C#에서 Excel을 HTML로 변환할 때 이미지 임베딩하기

Pilalo Jovanitho·2026년 9월 23일

Excel 스프레드시트를 웹 페이지로 게시해야 할 때 HTML로 변환하는 것은 자연스러운 선택이다. 하지만 변환 과정에서 이미지가 단순한 상대 경로 링크로 처리되면, 클라이언트 측에서 이미지를 찾지 못해 웹 페이지가 제대로 표시되지 않는 문제가 발생할 수 있다. 이 글에서는 C#에서 Excel을 HTML로 변환할 때 이미지를 HTML 코드에 직접 임베딩하는 방법을 살펴본다.

이미지 임베딩이 필요한 이유

일반적인 Excel→HTML 변환에서는 이미지가 별도의 파일로 추출되어 <img src="image.png">와 같은 형태로 참조된다. 이 방식은 서버 환경에서는 문제없이 작동하지만, HTML 파일을 이메일로 보내거나 다른 시스템에 업로드했을 때 이미지 파일이 함께 전달되지 않으면 이미지가 깨진 채로 표시된다.

이미지를 HTML 코드에 직접 임베딩하면 이미지 데이터가 HTML 파일 내부에 포함되므로, 파일 하나만으로 완전한 웹 페이지를 구성할 수 있다. 이를 위해서는 이미지를 Base64로 인코딩하여 Data URI 형태로 HTML에 삽입해야 한다.

사용할 라이브러리

이 글에서는 Spire.XLS for .NET을 사용한다. 이 라이브러리는 Excel 파일을 읽고 HTML로 저장하는 기능을 제공하며, 이미지 임베딩 여부를 옵션으로 제어할 수 있다.

NuGet을 통해 패키지를 설치한다:

Install-Package Spire.XLS

설치가 완료되면 C# 코드에서 필요한 네임스페이스를 추가한다:

using Spire.Xls;
using Spire.Xls.Core.Spreadsheet;

이미지 임베딩을 위한 핵심 코드

이미지를 HTML에 임베딩하는 핵심은 HTMLOptions 클래스의 ImageEmbedded 속성을 true로 설정하는 것이다.

// 워크북 인스턴스 생성 및 Excel 파일 로드
Workbook book = new Workbook();
book.LoadFromFile("Book1.xlsx");

// HTMLOptions 인스턴스 생성
HTMLOptions options = new HTMLOptions();

// 이미지를 HTML 코드에 임베딩하도록 설정
options.ImageEmbedded = true;

// 첫 번째 워크시트를 HTML로 저장
book.Worksheets[0].SaveToHtml("sample.html", options);
System.Diagnostics.Process.Start("sample.html");

ImageEmbedded 속성의 기본값은 false이며, 이 경우 이미지는 별도 파일로 내보내지고 HTML에서는 상대 경로로 참조된다. 이 값을 true로 변경하면 이미지 데이터가 Base64로 인코딩되어 data:image/png;base64,... 형태의 URI로 HTML에 포함된다.

SaveToHtml 메서드는 여러 오버로드를 제공한다. HTMLOptions 매개변수를 생략한 기본 호출도 가능하지만, 이미지 임베딩과 같은 동작을 제어하려면 위 예제처럼 옵션 객체를 함께 전달해야 한다.

전체 예제 코드

다음은 완전한 C# 콘솔 애플리케이션 예제이다:

using Spire.Xls;
using Spire.Xls.Core.Spreadsheet;
using System;

namespace EmbedImageInHtml
{
    class Program
    {
        static void Main(string[] args)
        {
            // Workbook 인스턴스 생성
            Workbook book = new Workbook();
            
            // 이미지가 포함된 Excel 파일 로드
            book.LoadFromFile(@"C:\path\to\Book1.xlsx");
            
            // HTMLOptions 인스턴스 생성
            HTMLOptions options = new HTMLOptions();
            
            // 이미지를 HTML 코드에 임베딩하도록 설정
            options.ImageEmbedded = true;
            
            // 첫 번째 워크시트를 HTML로 저장
            book.Worksheets[0].SaveToHtml(@"C:\path\to\sample.html", options);
            System.Diagnostics.Process.Start(@"C:\path\to\sample.html");
            
            Console.WriteLine("변환이 완료되었습니다.");
            
            // 리소스 해제
            book.Dispose();
        }
    }
}

코드에서 확인할 사항

위 코드를 실제로 사용할 때 검토해야 할 부분이 몇 가지 있다.

네임스페이스: HTMLOptions 클래스가 Spire.Xls.Core.Spreadsheet 네임스페이스에 속하는지 확인이 필요하다. 라이브러리 버전에 따라 네임스페이스 구성이 다를 수 있으므로, 컴파일 오류가 발생하면 설치된 버전의 API 문서를 확인하는 것이 좋다.

Dispose 호출: Workbook 객체는 IDisposable을 구현하므로 사용 후 Dispose()를 호출하거나 using 문으로 감싸는 것이 안전하다.

Process.Start: 이 코드는 변환 완료 후 기본 브라우저에서 결과 파일을 여는 용도로, 변환 자체에는 영향을 주지 않는 선택적 부분이다. 서버 환경에서는 불필요할 수 있다.

고려 사항

이미지 임베딩 방식을 사용할 때는 몇 가지 기술적 제약을 고려해야 한다.

Data URI 길이 제한: HTMLOptions 클래스 문서에 따르면, Internet Explorer 8은 Data URI를 최대 32KB로 제한한다. 대부분의 최신 브라우저는 이 제한이 없지만, 매우 큰 이미지가 포함된 경우 HTML 파일 크기가 상당히 커질 수 있다. 이미지가 많은 대용량 스프레드시트의 경우 별도 이미지 파일로 내보내는 방식이 더 적합할 수 있다.

파일 크기: Base64 인코딩은 원본 바이너리 데이터보다 약 33% 더 큰 크기를 차지한다. 이미지 수와 크기에 따라 HTML 파일이 예상보다 커질 수 있다.

워크시트 단위 변환: 이 예제에서는 SaveToHtml 메서드를 사용하여 첫 번째 워크시트만 변환했다. 여러 워크시트를 변환하려면 각각의 시트에 대해 별도로 메서드를 호출해야 한다.

마무리

C#에서 Excel을 HTML로 변환할 때 ImageEmbedded 속성을 true로 설정하면 이미지를 HTML 코드에 임베딩할 수 있다. 이 접근 방식은 HTML 파일을 독립적으로 배포해야 하는 상황에서 유용하며, 별도의 이미지 파일 없이도 웹 페이지가 올바르게 표시된다. 다만 이미지 용량과 브라우저 호환성을 고려하여 적절한 상황에서 사용하는 것이 좋다.

0개의 댓글