目錄
ToggleC# 將 Excel 轉換為 PDF 教學總覽
在專案管理、報表製作、合約審核等日常工作中,經常需要將Excel文件轉換為PDF格式,以便於分享、存檔或列印。無論是財務報表、進度追蹤表還是客戶提案,PDF的不可編輯性與跨平台兼容性,讓它成為商務溝通的標準格式。
本篇將以實務角度,系統性介紹C#環境下的Excel轉PDF主流方案,並針對格式保留、授權限制、常見錯誤、跨平台支援等重點,提供具體解決策略與應用建議,協助你根據實際需求選擇最合適的技術路徑。
常見應用場景舉例:
– 專案團隊定期自動產出進度報告,需將Excel轉為PDF發送給利害關係人。
– 財會部門批次轉換大量Excel帳務明細為PDF存檔。
– 人資或法務部門將表單、合約等Excel檔案轉為PDF,確保格式一致性。
– SaaS平台自動化產生PDF報表,供用戶下載或簽署。
常見 C# Excel 轉 PDF 方法比較
C#開發者可選擇多種方式將Excel檔案轉換為PDF。以下彙整主流方案,並以表格比較其優缺點、授權限制、格式支援性及跨平台適用性,協助你快速判斷最適合的工具。
EPPlus + iTextSharp(本教學主軸)
- 原理:EPPlus讀取Excel內容,iTextSharp負責產生PDF並寫入表格。
- 優點:免費(部分授權限制)、可控性高、適合自訂格式。
- 缺點:需自行處理格式、圖片、合併儲存格等進階內容,開發量較大。
Microsoft.Office.Interop.Excel
- 原理:直接調用Excel COM元件,利用Excel內建的「匯出為PDF」功能。
- 優點:格式保留最佳,支援所有Excel原生功能。
- 缺點:僅限Windows且需安裝Excel,伺服器端不建議使用,授權成本高。
FreeSpire.XLS
- 原理:第三方元件,支援Excel與PDF互轉,API簡單。
- 優點:格式保留度高,支援圖片、合併儲存格、圖表等,部分功能免費。
- 缺點:免費版有頁數/功能限制,商業用途需購買授權。
IronPDF、Aspose.Cells 等商用套件
- 原理:高階商用元件,直接支援Excel到PDF轉換。
- 優點:格式保留完整,支援多平台、雲端部署,API豐富。
- 缺點:需付費,授權費用較高。
方法比較表
| 方法 | 格式保留 | 圖片/圖表支援 | 跨平台 | 授權限制 | 適用情境 |
|---|---|---|---|---|---|
| EPPlus + iTextSharp | 中 | 需自行處理 | 是 | LGPL/Polyform | 自訂流程、控制細節 |
| Microsoft.Office.Interop.Excel | 高 | 完整支援 | 否 | 需安裝Excel | 桌面應用、格式要求極高 |
| FreeSpire.XLS | 高 | 完整支援 | 是 | 免費/商用需付費 | 伺服器、批次處理、格式保留需求 |
| IronPDF、Aspose.Cells | 高 | 完整支援 | 是 | 商用授權 | 企業級、跨平台、雲端服務 |
實務建議:
– 若需高度格式保留、支援圖片與圖表,建議優先考慮FreeSpire.XLS或商用元件。
– 若僅需簡單表格轉換,且重視開源與可控性,可採EPPlus+iTextSharp。
– 若在Windows桌面應用且已安裝Excel,可用Interop.Excel。
EPPlus + iTextSharp 轉檔實作教學
本節以EPPlus搭配iTextSharp為例,說明如何在C#中將Excel轉換為PDF,並補充格式處理、異常排除等細節。
環境準備與套件安裝
- 安裝NuGet套件:
EPPlus(用於讀取Excel)iTextSharp(用於產生PDF)
Install-Package EPPlus
Install-Package itextsharp
- 授權說明:
- EPPlus自5.x起採Polyform Noncommercial授權,商業用途需購買授權。
-
iTextSharp 5.x為LGPL/MPL授權,6.x起轉為商用授權,請依實際用途選擇版本。
-
.NET版本相容性:
- EPPlus支援.NET Framework與.NET Core/.NET 5+。
- iTextSharp主要支援.NET Framework,.NET Core可考慮iText7(需商業授權)。
讀取 Excel 檔案
以下範例示範如何讀取Excel的多個工作表、合併儲存格與圖片資訊:
using OfficeOpenXml;
using System.IO;
public void ReadExcel(string filePath)
{
FileInfo fileInfo = new FileInfo(filePath);
using (ExcelPackage package = new ExcelPackage(fileInfo))
{
foreach (var worksheet in package.Workbook.Worksheets)
{
Console.WriteLine($"工作表:{worksheet.Name}");
for (int row = 1; row <= worksheet.Dimension.Rows; row++)
{
for (int col = 1; col <= worksheet.Dimension.Columns; col++)
{
var cell = worksheet.Cells[row, col];
string cellValue = cell.Text;
bool isMerged = cell.Merge;
Console.Write($"{cellValue}{(isMerged ? "(合併)" : "")}\t");
}
Console.WriteLine();
}
// 圖片處理
foreach (var pic in worksheet.Drawings)
{
Console.WriteLine($"發現圖片:{pic.Name}");
}
}
}
}
補充說明:
– 合併儲存格需特別處理,否則PDF表格易出現錯位。
– 圖片可透過EPPlus的Drawings屬性取得,進階應用可將圖片匯出再插入PDF。
建立 PDF 並寫入內容
將Excel內容轉為PDF表格,並處理基本格式與字型設定:
using iTextSharp.text;
using iTextSharp.text.pdf;
using OfficeOpenXml;
using System.IO;
public void ExcelToPdf(string excelPath, string pdfPath)
{
FileInfo fileInfo = new FileInfo(excelPath);
using (ExcelPackage package = new ExcelPackage(fileInfo))
{
var worksheet = package.Workbook.Worksheets[0];
using (FileStream stream = new FileStream(pdfPath, FileMode.Create))
{
Document pdfDoc = new Document(PageSize.A4);
PdfWriter.GetInstance(pdfDoc, stream);
pdfDoc.Open();
// 設定中文字型(避免亂碼)
BaseFont baseFont = BaseFont.CreateFont("msjh.ttf", BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
Font font = new Font(baseFont, 12);
PdfPTable table = new PdfPTable(worksheet.Dimension.Columns);
for (int row = 1; row <= worksheet.Dimension.Rows; row++)
{
for (int col = 1; col <= worksheet.Dimension.Columns; col++)
{
string cellValue = worksheet.Cells[row, col].Text;
PdfPCell cell = new PdfPCell(new Phrase(cellValue, font));
// 進階:可根據合併儲存格設定cell.Colspan/Rowspan
table.AddCell(cell);
}
}
pdfDoc.Add(table);
pdfDoc.Close();
}
}
}
格式保留技巧:
– 若需保留Excel的顏色、字型、合併儲存格,需額外判斷並設定PdfPCell屬性。
– 圖片可先匯出為byte[],再用iTextSharp插入PDF。
完整範例程式碼與說明
異常處理與常見錯誤排除:
– 若遇到「字型亂碼」問題,請確認PDF中文字型已嵌入,並選用支援中文的字型檔(如msjh.ttf)。
– 若Excel檔案格式不符(如損毀、密碼保護),EPPlus會拋出例外,建議加上try-catch處理。
– 若PDF表格出現錯位,請檢查合併儲存格設定,必要時需自行計算rowspan/colspan。
進階應用與常見問題
批次轉換、檔案自動化流程
- 可結合檔案監控(FileSystemWatcher)或排程(Windows Task Scheduler),自動將指定資料夾內所有Excel檔批次轉換為PDF。
- 適用於財會、行政等需定期產出大量報表的部門。
格式失真、字型遺失等常見問題解決
- 格式失真:EPPlus+iTextSharp需自行處理格式,若格式要求高,建議改用FreeSpire.XLS或商用元件。
- 字型遺失:PDF中文字亂碼時,請確認已嵌入正確字型,並指定BaseFont。
- 圖片遺漏:EPPlus讀取圖片後,需用iTextSharp的Image物件插入PDF。
跨平台(Windows/Linux)注意事項
- EPPlus與FreeSpire.XLS支援.NET Core,可於Linux執行。
- Microsoft.Office.Interop.Excel僅限Windows,且需安裝Excel。
- iTextSharp 5.x主要支援.NET Framework,若需.NET Core建議改用iText7(需付費)。
FAQ
Q1:如何處理大檔案或多工作表?
A:建議逐個工作表處理,分批寫入PDF,避免記憶體溢位。可考慮分頁輸出或合併多個PDF。
Q2:如何僅轉換特定工作表?
A:EPPlus可指定工作表名稱或索引,僅讀取所需內容。
Q3:如何自動化轉檔流程?
A:可結合排程工具或CI/CD流程,自動執行轉檔程式,並將PDF上傳至雲端或郵件發送。
Q4:遇到「未授權」或「功能受限」訊息怎麼辦?
A:請確認所用套件授權條款,商業用途需購買正式授權,避免法律風險。
其他推薦工具與適用情境
除了程式碼實作,部分雲端或無程式碼工具也能高效完成Excel轉PDF,尤其適合非技術人員或臨時需求。
雲端/無程式碼解決方案
適用情境:
– 需快速轉換且不想寫程式。
– 需結合電子簽署、表單填寫等進階功能。
– 跨部門協作、遠端辦公。
專案管理與自動化推薦
- Monday.com: 支援自動化報表產生、文件管理與團隊協作,適合專案經理與跨部門團隊。
- ClickUp: 整合任務追蹤、文件管理與自動化工具,提升團隊效率。
適用情境:
– 須將Excel/PDF整合至專案流程。
– 需自動化產生、分發報表。
– 團隊需協作審核、簽署文件。
結論與行動呼籲
C#將Excel轉換為PDF的方法多元,從開源組合(EPPlus+iTextSharp)、Windows原生(Interop.Excel)、到高階商用元件(FreeSpire.XLS、IronPDF),各有優缺點。選擇時應根據格式保留需求、授權限制、平台環境與自動化程度,做出最適合的決策。
若你追求高效率、格式完整且需自動化,建議考慮如Monday.com、pdfFiller等現代化工具,無論是程式開發或雲端平台,都能大幅提升團隊生產力。立即評估你的需求,選擇最適合的Excel轉PDF方案,讓日常工作更輕鬆高效!