國產化Excel處理組件Spire.XLS教程:使用 C# 將 DataTable 導出為 Excel 文件

在 C# 中將 DataTable 導出為 Excel 文件,是 .NET 開發中常見的任務,廣泛應用于報表生成、日志導出、系統間數據共享等場景。通過使用獨立的組件庫,開發者可以輕松將 DataTable 數據寫入 Excel 文件,并應用格式設置,生成專業、可直接使用的文檔,無需復雜配置或依賴第三方辦公軟件。

本文將介紹如何使用?Spire.XLS for .NET?將 DataTable 導出為 Excel(.xlsx/.xls)文件,包含數據創建、導出保存、格式設置等實用步驟。

Spire.XLS for .NET試用下載

安裝和配置 Spire.XLS

開始之前,請確保你的項目中已添加?Spire.XLS for .NET

通過 NuGet 安裝 Spire.XLS:

CopyInstall-Package Spire.XLS 

Spire.XLS?支持 .NET Framework、.NET Core、.NET 6/7+ 以及 ASP.NET 項目,且無需安裝 Microsoft Office

分步操作:C# 將 DataTable 導出為 Excel 文件

下面的步驟將演示如何使用?Spire.XLS?將 DataTable 導出為 Excel 文件,包含數據準備、文件保存、網頁流導出以及格式設置等內容。

第一步:創建示例 DataTable

先創建一個包含多列的?DataTable

// 創建數據表
DataTable dt = new DataTable("員工信息");// 添加列
dt.Columns.Add("員工編號", typeof(int));
dt.Columns.Add("姓名", typeof(string));
dt.Columns.Add("部門", typeof(string));
dt.Columns.Add("入職日期", typeof(DateTime));
dt.Columns.Add("工資", typeof(double));
dt.Columns.Add("是否全職", typeof(bool));
dt.Columns.Add("獎金系數", typeof(decimal));// 添加數據行
dt.Rows.Add(1001, "張偉", "人事部", new DateTime(2021, 5, 10), 55000.5, true, 0.05m);
dt.Rows.Add(1002, "李娜", "技術部", new DateTime(2020, 11, 23), 72000.0, false, 0.03m);
dt.Rows.Add(1003, "王強", "財務部", new DateTime(2019, 8, 15), 63000.75, true, 0.07m);
dt.Rows.Add(1004, "趙敏", "市場部", new DateTime(2022, 3, 8), 48800.0, true, 0.06m);

此處為演示用示例數據,實際使用中可綁定任意業務生成的 DataTable。

第二步:導入 DataTable 并保存為 Excel 文件

將 DataTable 導入到工作表中,并保存為 Excel 文件:

Workbook workbook = new Workbook();
workbook.Worksheets.Clear();
Worksheet sheet = workbook.Worksheets.Add(dt.TableName);// 從 A1 單元格開始插入數據表
sheet.InsertDataTable(dt, true, 1, 1);// 保存為 .xlsx 文件(推薦)
workbook.SaveToFile("員工信息.xlsx", FileFormat.Version2016);// 保存為 .xls 文件(舊格式)
workbook.SaveToFile("員工信息.xls", FileFormat.Version97to2003);

說明:

  • Workbook?表示整個 Excel 文件。
  • InsertDataTable?方法將 DataTable 內容映射到 Excel 表格中。
  • SaveToFile?方法用于保存文件,支持多種 Excel 格式。

導出效果示意圖:

第三步:在 ASP.NET 中以流形式導出

在 Web 項目中,通常需要將 Excel 文件直接以下載流的方式返回:

MemoryStream stream = new MemoryStream();
workbook.SaveToStream(stream, FileFormat.Version2013);
stream.Position = 0;

將此?MemoryStream?返回到 ASP.NET 控制器中,即可觸發瀏覽器下載。

設置導出文件的格式與樣式

若希望導出的 Excel 文件更具可讀性和專業感,可以對內容進行格式化:

// 設置表頭樣式
CellRange header = sheet.Rows[0];
header.Style.Font.IsBold = true;
header.Style.Font.FontName = "微軟雅黑";
header.Style.Font.Size = 13;
header.Style.Color = Color.LightGray;
header.Style.Borders[BordersLineType.EdgeBottom].LineStyle = LineStyleType.Thick;// 設置數據行樣式
for (int i =  1; i < sheet.Rows.Length; i++)
{CellRange dataRow = sheet.Rows[i];dataRow.Style.Font.FontName = "黑體";dataRow.Style.Font.Size = 11;dataRow.BorderInside();
}// 設置日期列的顯示格式
CellRange dateColumn = sheet.Range[2, 4, sheet.Rows.Length + 1, 4];
dateColumn.Style.NumberFormat = "yyyy-mm-dd";// 自動調整列寬
sheet.AllocatedRange.AutoFitColumns();

關鍵方法說明:

  • Style: 控制字體、顏色、邊框、數字格式等;
  • AutoFitColumns(): 自動調整列寬以適應內容;
  • NumberFormat: 格式化日期、貨幣等數據類型;
  • BorderInside(): 添加內邊框,增強表格可讀性。

格式化效果示意圖:

常見問題及解決方案

問題描述解決方法
文件無法打開或提示損壞檢查是否正確關閉流,且文件后綴與格式匹配
特殊字符或中文亂碼確保字符串為 UTF-8 編碼,字體設置支持目標語言
列寬過窄導致顯示不全使用?AutoFitColumns()?自動調整,或手動設置?ColumnWidth

總結

借助?Spire.XLS,開發者可輕松地將 C# 中的 DataTable 導出為 Excel 文件,支持 .xls 和 .xlsx 兩種格式,且無需依賴 Office 環境。無論是桌面應用還是 Web 系統,該方法都能快速生成格式良好的 Excel 報表。

常見問答(FAQ)

Q1:如何將 DataTable 轉換為 Excel 文件?

使用?sheet.InsertDataTable()?將 DataTable 寫入工作表,然后調用?workbook.SaveToFile()?保存文件。

Q2:能否在 ASP.NET 中導出 DataTable 為 Excel?

可以,在 ASP.NET 控制器中生成工作簿,并以流的方式返回,實現下載功能。

Q3:.xlsx 與 .xls 有何區別?

.xlsx 是較新的格式,兼容 Excel 2007 及更高版本;.xls 為舊版格式(Excel 97-2003),行數限制為 65536 行。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/92541.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/92541.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/92541.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C語言學習筆記——編譯和鏈接

目錄1 C程序的執行流程2 翻譯環境2.1 預編譯2.2 編譯2.2.1 詞法分析2.2.2 語法分析2.2.3 語法分析2.3 匯編2.4 鏈接1 C程序的執行流程 用戶編寫好的C程序不能直接被計算機識別并執行&#xff0c;在執行前&#xff0c;要先將源文件和頭文件進行編譯&#xff0c;生成目標文件&am…

Flink-1.19.0源碼詳解9-ExecutionGraph生成-后篇

《Flink-1.19.0源碼詳解8-ExecutionGraph生成-前篇》前篇已從Flink集群端調度開始解析ExecutionGraph生成的源碼&#xff0c;解析了ExecutionGraph的ExecutionJobVertex節點、ExecutionVertex節點、IntermediateResult數據集、IntermediateResultPartition數據集分區與封裝Task…

19、閾值分割+blob分析

目錄 一、仿射變換 1.變換矩陣 2.在矩陣的基礎上添加各種變換形式 3.開始變換 4.計算變換矩陣參數 新算子 二、閾值分割 新算子 三、blob分析案例 1.焊點 2.石頭 3.木材 4.車牌 5.骰子 新算子 一、仿射變換 1.變換矩陣 // 產生仿射變換矩陣hom_mat2d_identity…

破解 Django N+1 查詢困境:使用 select_related 與 prefetch_related 實踐指南

破解 Django N+1 查詢困境:使用 select_related 與 prefetch_related 實踐指南 開篇引入 數據庫查詢性能常常是 Web 應用性能瓶頸中的重中之重。Django ORM 以簡潔直觀的 API 層將 Python 代碼與數據庫打通,卻也可能因默認的惰性加載帶來 N+1 查詢問題,造成不必要的網絡往…

深入解析K-means聚類:從原理到調優實戰

一、聚類分析與K-means的核心價值在無監督學習領域&#xff0c;聚類分析是探索數據內在結構的核心技術。?K-means算法因其簡潔高效成為最廣泛使用的聚類方法&#xff0c;在客戶分群、圖像壓縮、生物信息學等領域應用廣泛。其核心目標是將數據集劃分為K個簇&#xff0c;實現“簇…

數據結構基礎:哈希表、排序和查找算法

目錄 一、哈希表 1.哈希算法 2.哈希碰撞 3.哈希表 4.哈希表相關操作 哈希表插入 哈希表遍歷 元素查找 哈希表銷毀 二、排序算法 1. 排序算法對比 2. 排序算法實現 冒泡排序 選擇排序 插入排序 希爾排序 快速排序 三、查找算法 1. 查找算法對比 2. 查找算法實…

Linux內核參數調優:為K8s節點優化網絡性能

在高并發微服務環境中&#xff0c;網絡性能往往成為K8s集群的瓶頸。本文將深入探討如何通過精細化的Linux內核參數調優&#xff0c;讓你的K8s節點網絡性能提升30%以上。引言&#xff1a;為什么網絡調優如此重要&#xff1f;作為一名在生產環境中維護過數千節點K8s集群的運維工程…

全家桶” 戰略如何重塑智能服務標準?無憂秘書 AI + 智腦 + 數字人協同模式的底層架構解析

在數字化浪潮的推動下&#xff0c;企業對智能化服務的需求日益增長。然而&#xff0c;單一的技術或產品往往難以滿足復雜場景下的多樣化需求。近年來&#xff0c;“全家桶”戰略成為科技行業的一大趨勢&#xff0c;通過整合多維度技術與服務&#xff0c;為企業提供全方位的支持…

前端后端之爭?JavaScript和Java的特性與應用場景解析

一、名字相似&#xff0c;本質迥異 1.1 歷史淵源與命名背景 在編程世界中&#xff0c;很少有兩種語言像JavaScript和Java這樣&#xff0c;僅僅因為名字的相似性就引發了無數初學者的困惑。然而&#xff0c;這種相似性純屬巧合——或者說是一種營銷策略的產物。 JavaScript誕…

【文獻分享】Machine learning models提供數據和代碼

數據輸入及前期信息&#xff1a;ChronoGauge 需要一個基因表達矩陣&#xff0c;其中包括來自多個時間進程 RNA-測序實驗的觀測數據&#xff0c;用于訓練&#xff0c;并且需要有關每個基因在連續光照&#xff08;LL&#xff09;條件下經過光暗&#xff08;LD&#xff09;周期調整…

PHP MySQL Delete 操作詳解

PHP MySQL Delete 操作詳解 引言 在Web開發中&#xff0c;數據庫是存儲和管理數據的重要工具。PHP作為一種流行的服務器端腳本語言&#xff0c;與MySQL數據庫結合使用可以高效地處理數據。本文將詳細介紹PHP中如何使用DELETE語句刪除MySQL數據庫中的數據。 什么是DELETE語句&am…

計組-大/小端存放區別

在計算機系統中&#xff0c;大端存放&#xff08;Big-Endian&#xff09;和小端存放&#xff08;Little-Endian&#xff09;是兩種不同的多字節數據存儲方式&#xff0c;主要區別在于字節在內存中的排列順序。理解它們對底層編程&#xff08;如網絡通信、二進制文件處理、硬件交…

線程同步相關知識

文章目錄一、線程同步的核心目標二、線程安全的判定條件三、同步方式一&#xff1a;synchronized 關鍵字1. 同步代碼塊2. 同步方法四、鎖的釋放與不釋放場景1. 自動釋放鎖的場景2. 不會釋放鎖的場景五、同步方式二&#xff1a;ReentrantLock&#xff08;顯式鎖&#xff09;1. 核…

Armoury Crate無法通過BIOS卸載

設備&#xff1a;天選4 Armoury Crate窗口反復彈出影響使用體驗&#xff0c;但無法通過BIOS關閉該怎么辦&#xff1f;本文以天選4為例提供解決方案。 Step1&#xff1a;進入服務支持官網 Armoury Crate-服務支持 下滑點擊”查看更多” 下載安裝卸載工具 得到Armoury_Crate_Un…

如何將視頻轉為GIF格式,3大視頻轉為GIF工具

在社交媒體和即時通訊盛行的當下&#xff0c;GIF 動圖以其獨特的魅力備受青睞。它能夠生動地捕捉視頻中的精彩瞬間&#xff0c;憑借體積小巧、無需復雜加載且可循環播放的特性&#xff0c;成為了人們在網絡交流中表達情感、分享趣事的得力工具。無論是制作詼諧幽默的表情包&…

開發避坑指南(22):Vue3響應式編程中this綁定機制與解決方案

錯誤信息 TypeError: Cannot read properties of undefined (reading find) TypeError: r.vnode.el.querySelector is not a function報錯背景 vue2項目升級到vue3后&#xff0c;原來的代碼報錯。 報錯代碼computed: {/** 計算列的顯示與隱藏*/columnVisible() {return functio…

AI學習筆記三十五:實時傳輸視頻

若該文為原創文章&#xff0c;轉載請注明原文出處。 目的是實現視頻的傳輸&#xff0c;只是個demo. 程序分為兩部分&#xff0c;視頻接收端和視頻發送端。 一、視頻接收端流程分析 主要流程&#xff1a; 初始化配置&#xff1a; 設置UDP端口&#xff08;5001&#xff09;和緩…

【ArcGIS】分區統計中出現Null值且Nodata無法忽略的問題以及shp擦除(erase)的使用——以NDVI去水體為例

需求 已有某地NDVI柵格、行政區shp以及水體shp&#xff0c;計算每個行政區的平均NDVI 問題 1.如果不剔除水體 負值NDVI會把平均值拉低 且水體NDVI并不全為負 需要通過shp剔除&#xff0c;Mask掩膜是提取水體本身而不是剩余部分 2.使用分區統計工具&#xff08;Zonal statis…

Linux中的內核同步源碼相關總結

什么是內核同步Linux 內核同步是指內核中用于解決并發執行單元&#xff08;如進程、中斷、內核線程等&#xff09;對共享資源&#xff08;如全局數據結構、硬件寄存器、鏈表等&#xff09;的競爭訪問的一系列機制和技術。其核心目標是保證多個并發單元在操作共享資源時的數據一…

WORD接受修訂,并修改修訂后文字的顏色

在 Word 中&#xff0c;接受修訂之后默認會采用正文的默認字體格式&#xff0c;不會保留修訂時設置的顏色&#xff0c;比如“插入內容是藍色字體”的設置會被清除。 如果你想要做到&#xff1a;? 接受所有修訂后仍然讓“原插入的文字”變為藍色字體保留下來你只能通過一些手動…