目錄
ToggleC# Excel 轉換為 PDF 教學總覽
將Excel檔案轉換為PDF,是許多企業、專案團隊在報表彙整、資料分享、電子發票、合約存檔等場景的常見需求。PDF格式具備跨平台、不可輕易修改、易於列印等優勢,能有效提升文件流通與資訊安全。
本教學將帶你從開發環境建置、工具選擇、程式實作到進階應用,完整掌握C#自動化Excel轉PDF的實務技巧。
適用情境與常見需求
- 專案報表自動產生:定期將專案進度、資源分配等Excel報表轉為PDF,便於管理層審閱。
- 財務與發票文件歸檔:將財務明細、發票明細表轉為PDF存檔,確保格式一致與法規合規。
- 團隊協作資料分享:將Excel資料轉為PDF後,分享給不具備Excel軟體的外部夥伴,避免格式跑掉。
- 合約、申請表單電子化:將Excel設計的表單轉為PDF,方便電子簽署與資料存證。
Excel 轉 PDF 的常見挑戰
- 格式跑版:Excel表格在轉為PDF時,欄寬、字型、合併儲存格、顏色等格式可能失真。
- 多工作表處理:需選擇特定工作表或將多個工作表合併為單一PDF。
- 大檔案效能:大量資料或複雜格式時,轉換速度與記憶體消耗成為瓶頸。
- 圖片、圖表、公式支援:部分套件無法完整轉換Excel中的圖片、圖表或公式結果。
- 權限與安全性:PDF檔案需設定權限,防止未授權修改或複製。
主流轉換方案與工具比較
EPPlus + PdfSharp 方案優缺點
EPPlus專注於Excel檔案的讀寫,支援.xlsx格式,操作簡單、開源且社群活躍。PdfSharp則用於產生與編輯PDF文件,能自訂內容、字型與排版。
兩者結合可實現自動化、靈活的Excel轉PDF流程,適合自訂格式、批次處理或需嵌入於企業系統的情境。
優點:
– 開源、無額外授權費用(商業用途請查閱授權條款)
– 可自訂PDF排版、字型、分頁
– 易於整合自動化流程
限制:
– 需自行處理格式美化、表格繪製
– 不支援.xls(舊格式)、圖片、圖表直接轉換
– 需額外處理大檔案效能與錯誤
其他常見套件比較
| 套件名稱 | 支援格式 | 圖片/圖表支援 | 格式美化 | 授權/費用 | 適用情境 |
|---|---|---|---|---|---|
| FreeSpire.XLS | .xls/.xlsx | 支援 | 佳 | 免費/商用需付費 | 需完整轉換格式、圖表、圖片 |
| Aspose.Cells | .xls/.xlsx等 | 完整支援 | 極佳 | 商用授權 | 企業級、複雜Excel轉換 |
| GrapeCity Spread | .xls/.xlsx等 | 支援 | 佳 | 商用授權 | 需高度客製、整合其他報表功能 |
| Office Interop | .xls/.xlsx | 完整支援 | 完整 | 需安裝Office | 僅限Windows、需安裝Excel的環境 |
選擇建議:
– 若需高度自訂、輕量自動化,EPPlus+PdfSharp為首選。
– 若需完整保留格式、圖表、圖片,建議評估FreeSpire.XLS或Aspose.Cells。
– 若僅偶爾轉換、無需自動化,可考慮雲端工具如pdfFiller、SignNow。
開發環境與套件安裝
必要環境與前置作業
- 建議使用.NET Core或.NET Framework 4.6以上版本
- 開發工具:Visual Studio(或其他支援C#的IDE)
- 需具備Excel檔案(.xlsx格式)
NuGet 安裝指令與注意事項
於Visual Studio的「套件管理員主控台」輸入:
Install-Package EPPlus
Install-Package PdfSharp
注意事項:
– EPPlus僅支援.xlsx格式,若需處理.xls,請考慮其他套件。
– PdfSharp不支援直接嵌入Excel圖片、圖表,僅能轉換純文字與表格。
– 若需商業用途,請詳閱各套件授權條款。
C# 程式碼實作詳解
讀取 Excel 文件與資料解析
以下範例示範如何以EPPlus讀取Excel檔案,並解析多工作表與儲存格資料:
using OfficeOpenXml;
using System.IO;
string excelFilePath = "your_excel_file.xlsx";
FileInfo fileInfo = new FileInfo(excelFilePath);
using (ExcelPackage package = new ExcelPackage(fileInfo))
{
foreach (var worksheet in package.Workbook.Worksheets)
{
int rows = worksheet.Dimension.Rows;
int cols = worksheet.Dimension.Columns;
// 可依需求處理多工作表或指定工作表
}
}
實務建議:
– 若僅需轉換特定工作表,可用package.Workbook.Worksheets["工作表名稱"]。
– 需處理合併儲存格時,建議先解析合併範圍。
生成 PDF 並美化表格
PdfSharp無內建表格繪製功能,需自行計算欄寬、列高與繪製線條。以下為簡化範例:
using PdfSharp.Pdf;
using PdfSharp.Drawing;
PdfDocument document = new PdfDocument();
PdfPage page = document.AddPage();
XGraphics gfx = XGraphics.FromPdfPage(page);
XFont font = new XFont("Microsoft JhengHei", 10);
double startX = 40, startY = 40, cellWidth = 80, cellHeight = 20;
// 假設有rows與cols
for (int row = 1; row <= rows; row++)
{
for (int col = 1; col <= cols; col++)
{
string text = worksheet.Cells[row, col].Text;
double x = startX + (col - 1) * cellWidth;
double y = startY + (row - 1) * cellHeight;
gfx.DrawRectangle(XPens.Black, x, y, cellWidth, cellHeight);
gfx.DrawString(text, font, XBrushes.Black, new XRect(x + 2, y + 2, cellWidth, cellHeight), XStringFormats.TopLeft);
}
}
document.Save("output.pdf");
document.Close();
格式美化建議:
– 可根據內容動態調整欄寬。
– 若資料過多,需自動分頁(每頁最大列數可自訂)。
– 若需支援中文字型,請選用系統已安裝的中文字型。
整合流程與完整範例
結合上述步驟,處理多工作表、錯誤處理與分頁:
try
{
using (ExcelPackage package = new ExcelPackage(new FileInfo("your_excel.xlsx")))
{
var worksheet = package.Workbook.Worksheets[0];
int rows = worksheet.Dimension.Rows;
int cols = worksheet.Dimension.Columns;
PdfDocument document = new PdfDocument();
PdfPage page = document.AddPage();
XGraphics gfx = XGraphics.FromPdfPage(page);
XFont font = new XFont("Microsoft JhengHei", 10);
double startX = 40, startY = 40, cellWidth = 80, cellHeight = 20;
int maxRowsPerPage = 30;
int currentRowOnPage = 0;
for (int row = 1; row <= rows; row++)
{
if (currentRowOnPage >= maxRowsPerPage)
{
page = document.AddPage();
gfx = XGraphics.FromPdfPage(page);
currentRowOnPage = 0;
}
for (int col = 1; col <= cols; col++)
{
string text = worksheet.Cells[row, col].Text;
double x = startX + (col - 1) * cellWidth;
double y = startY + currentRowOnPage * cellHeight;
gfx.DrawRectangle(XPens.Black, x, y, cellWidth, cellHeight);
gfx.DrawString(text, font, XBrushes.Black, new XRect(x + 2, y + 2, cellWidth, cellHeight), XStringFormats.TopLeft);
}
currentRowOnPage++;
}
document.Save("output.pdf");
document.Close();
}
}
catch (Exception ex)
{
// 錯誤處理
Console.WriteLine("轉換失敗:" + ex.Message);
}
常見變化:
– 只轉換特定區域:調整row/col範圍。
– 多工作表合併:多次繪製於同一PDF或分頁。
常見錯誤與除錯建議
- Excel檔案損毀或格式不符:請確認檔案可正常開啟,且為.xlsx格式。
- 字型不支援或亂碼:請指定系統已安裝的中文字型(如「Microsoft JhengHei」)。
- 權限錯誤:確保程式有讀取Excel與寫入PDF的權限。
- 記憶體不足:大檔案建議分批處理或優化資料結構。
進階應用與自動化
批次轉換與自動化腳本
若需批次處理多個Excel檔案,可結合目錄掃描與迴圈自動轉換:
string[] files = Directory.GetFiles("excel_folder", "*.xlsx");
foreach (var file in files)
{
// 依上述流程轉換,每個Excel對應一個PDF
}
可進一步結合排程工具(如Windows Task Scheduler)實現定時自動轉換。
大檔案與效能優化建議
- 優先讀取必要資料,避免一次載入全部內容。
- 分頁處理,減少單頁資料量。
- 針對重複格式、字型,預先建立物件重複使用。
FAQ:C# Excel 轉 PDF 常見問題
支援格式、圖片、公式、圖表等
- 支援格式:EPPlus僅支援.xlsx,PdfSharp僅能處理純文字與表格。
- 圖片/圖表:EPPlus可讀取圖片,但PdfSharp需自行繪製,無法自動嵌入。
- 公式:僅能取得公式計算後的結果,無法保留公式本身。
- 合併儲存格:需自行判斷合併範圍,調整繪製邏輯。
轉換後PDF美觀度調整
- 可調整字型、欄寬、列高、顏色與線條樣式。
- 若需高度還原Excel格式,建議評估FreeSpire.XLS、Aspose.Cells等商用套件。
推薦工具與雲端解決方案
何時選用第三方雲端工具
若僅需偶爾轉換、無需自動化或格式高度還原,建議考慮雲端PDF工具如pdfFiller、SignNow。
適用情境:
– 無需自行開發程式,操作簡單
– 支援批次上傳、電子簽署、權限管理
– 適合跨部門、外部協作或臨時需求
優點:
– 免安裝、跨平台
– 支援多種格式轉換
– 內建簽署、審批等進階功能
限制:
– 需上傳資料至雲端,注意資訊安全
– 大量自動化或特殊格式仍需程式開發
結論與實務建議
選擇方案建議
- 需自動化、可接受自訂格式:EPPlus+PdfSharp最具彈性。
- 需完整還原格式、圖表、圖片:建議商用FreeSpire.XLS或Aspose.Cells。
- 僅偶爾需求、重視操作便利:可選雲端工具如pdfFiller、SignNow。
後續學習資源
立即試用推薦工具
如需更高效率的團隊協作與文件自動化,建議體驗Monday.com、ClickUp、Notion等專案管理平台,結合文件處理與流程自動化,讓專案管理更輕鬆。











