C# 애플리케이션에서 Excel 파일을 프로그래밍 방식으로 여는 것은 일반적인 요구 사항이지만, 많은 개발자가 기존 방식의 한계에 어려움을 겪습니다. 이 가이드에서는 Microsoft Excel 설치가 필요하지 않은 무료 오픈 소스 라이브러리인 Openize.OpenXML SDK를 사용하여 C#에서 Excel 파일을 여는 방법을 보여드리겠습니다.

Excel 설치 없이 C#에서 Excel 파일을 여는 방법

기존 방법의 문제점

대부분의 개발자는 Microsoft.Office.Interop.Excel로 시작하지만, 이 접근 방식에는 심각한 한계가 있습니다.

  • ❌ 모든 컴퓨터에 Excel 설치가 필요합니다.
  • ❌ 성능 저하 및 메모리 누수
  • ❌ 서버 애플리케이션에 적합하지 않습니다.
  • ❌ 웹 애플리케이션의 스레딩 문제
  • ❌ 비싼 라이선스 비용

솔루션: Openize.OpenXML SDK

Openize.OpenXML SDK는 다음과 같은 문제를 해결합니다.

  • ✅ 엑셀 설치가 필요 없습니다
  • ✅ 고성능 및 스레드 안전
  • ✅ 웹 애플리케이션 및 서버에 적합
  • ✅ 오픈 소스이며 완전 무료입니다
  • ✅ 간단하고 직관적인 API

설치

프로젝트에 Openize.OpenXML SDK를 추가합니다.

<PackageReference Include="DocumentFormat.OpenXml" Version="3.2.0" />

기본 예제: Excel 파일 열기 및 읽기

using Openize.Cells;
using System;
using System.IO;

class Program
{
    static void Main()
    {
        try
        {
            // Open existing Excel file
            using (var workbook = new Workbook("sample.xlsx"))
            {
                // Get the first worksheet
                var worksheet = workbook.Worksheets[0];
                
                Console.WriteLine($"Worksheet Name: {worksheet.Name}");
                Console.WriteLine($"Total Rows: {worksheet.GetRowCount()}");
                Console.WriteLine($"Total Columns: {worksheet.GetColumnCount()}");
                
                // Read specific cell values
                string cellA1 = worksheet.Cells["A1"].GetValue();
                string cellB1 = worksheet.Cells["B1"].GetValue();
                
                Console.WriteLine($"Cell A1: {cellA1}");
                Console.WriteLine($"Cell B1: {cellB1}");
            }
        }
        catch (FileNotFoundException)
        {
            Console.WriteLine("Excel file not found!");
        }
        catch (Exception ex)
        {
            Console.WriteLine($"Error: {ex.Message}");
        }
    }
}

Excel 파일을 열기 전에 파일이 있는지 확인하세요

using Openize.Cells;
using System.IO;

public class ExcelFileHandler
{
    public static void OpenExcelSafely(string filePath)
    {
        // Check if file exists
        if (!File.Exists(filePath))
        {
            Console.WriteLine($"File not found: {filePath}");
            return;
        }
        
        try
        {
            using (var workbook = new Workbook(filePath))
            {
                var worksheet = workbook.Worksheets[0];
                Console.WriteLine($"Successfully opened: {filePath}");
                Console.WriteLine($"First cell value: {worksheet.Cells["A1"].GetValue()}");
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine($"Failed to open Excel file: {ex.Message}");
        }
    }
}

여러 개의 워크시트 읽기

using Openize.Cells;

public class MultiSheetReader
{
    public static void ReadAllWorksheets(string filePath)
    {
        using (var workbook = new Workbook(filePath))
        {
            Console.WriteLine($"Total worksheets: {workbook.Worksheets.Count}");
            
            foreach (var worksheet in workbook.Worksheets)
            {
                Console.WriteLine($"\nWorksheet: {worksheet.Name}");
                Console.WriteLine($"Rows: {worksheet.GetRowCount()}");
                Console.WriteLine($"Columns: {worksheet.GetColumnCount()}");
                
                // Read first few cells
                for (int row = 1; row <= 3; row++)
                {
                    for (int col = 1; col <= 3; col++)
                    {
                        string cellRef = GetCellReference(row, col);
                        string value = worksheet.Cells[cellRef].GetValue();
                        Console.Write($"{value}\t");
                    }
                    Console.WriteLine();
                }
            }
        }
    }
    
    static string GetCellReference(int row, int col)
    {
        return $"{GetColumnLetter(col)}{row}";
    }
    
    static string GetColumnLetter(int columnNumber)
    {
        string columnLetter = string.Empty;
        while (columnNumber > 0)
        {
            columnNumber--;
            columnLetter = (char)('A' + columnNumber % 26) + columnLetter;
            columnNumber /= 26;
        }
        return columnLetter;
    }
}

결론

Openize.OpenXML SDK는 Excel Interop의 복잡성 없이 C#에서 Excel 파일을 열 수 있는 안정적이고 효율적인 방법을 제공합니다. 데스크톱 애플리케이션, 웹 서비스 및 서버 측 처리에 적합합니다. 주요 이점:

  • Excel 설치가 필요하지 않습니다.
  • 고성능
  • 웹 애플리케이션에 대한 스레드 안전
  • 오픈소스이며 무료입니다
  • 사용하기 쉬운 API 다음 프로젝트에서 시도해 보고 그 차이를 느껴보세요!