項目實戰中整理的通用導出類,支援 DataSet 導出為 Excel、Word,提供三種技術路線:OWC 組件、HTML 表格流、COM 自動化(已棄用),滿足不同環境需求。
核心類結構
public class ExportFiles
{
// 1. OWC Spreadsheet 導出 Excel(需安裝 OWC)
public void DataSetToExcel(DataSet ds, string user, string title, string filePath) { ... }
// 2. HTML 表格流導出 Excel(無依賴,推薦 Web 端)
public void DataSetToExcel(DataSet ds, string fileName) { ... }
public void DataSetToExcel(DataSet ds, string fileName, string title) { ... }
// 3. HTML 表格流導出 Word(無依賴)
public void DataSetToWord(DataSet ds, string fileName) { ... }
public void DataSetToWord(DataSet ds, string fileName, string title) { ... }
// 4. COM 自動化導出 Excel/Word(已屏蔽,速度慢、權限麻煩)
// ...
}
三種方案對比
| 方案 | 優點 | 缺點 | 適用場景 |
| OWC 組件 | 生成真實 .xls,支援樣式、合併儲存格 | 需服務器安裝 OWC,權限配置繁瑣 | 內網、可控環境 |
| HTML 表格流 | 無依賴、跨平台、代碼簡單 | 本質是 .xls/.doc 格式的 HTML,部分功能受限 | Web 端、快速導出 |
| COM 自動化 | 功能最全,可操作圖表、樞紐分析 | 速度極慢、需 Office 授權、服務器不穩定 | 極少數複雜報表 |
關鍵代碼片段(HTML 流導出 Excel)
public void DataSetToExcel(DataSet ds, string fileName, string title)
{
HttpResponse resp = HttpContext.Current.Response;
resp.Clear();
resp.ContentEncoding = Encoding.UTF8;
resp.AppendHeader("Content-Disposition", "attachment;filename=" + fileName + ".xls");
resp.ContentType = "application/vnd.ms-excel";
StringBuilder sb = new StringBuilder();
sb.Append("");
// 標題行
sb.Append("| " + title + " |
");
// 表頭
sb.Append("");
foreach (DataColumn col in dt.Columns) sb.Append("| " + col.Caption + " | ");
sb.Append("
");
// 數據行
foreach (DataRow row in dt.Rows)
{
sb.Append("");
foreach (object val in row.ItemArray) sb.Append("| " + val + " | ");
sb.Append("
");
}
sb.Append("
");
resp.Write(sb.ToString());
resp.End();
}
使用建議
- Web 端優先使用 HTML 流方案,零依賴、易維護。
- 需真實 .xlsx 格式時,建議引入
EPPlus 或 NPOI 庫替代 OWC/COM。
- 導出前做數據量檢查,超大數據集建議分頁或後台異步生成提供下載鏈接。