C#實(shí)現(xiàn)高效讀寫Excel工作表
Excel 是各行業(yè)數(shù)據(jù)管理的核心載體,廣泛應(yīng)用于財(cái)務(wù)統(tǒng)計(jì)、庫存管理、報(bào)表生成等場景。對(duì)于 C# 開發(fā)者而言,掌握高效的 Excel 讀寫能力,是實(shí)現(xiàn)數(shù)據(jù)自動(dòng)化處理、業(yè)務(wù)報(bào)表生成的關(guān)鍵。本文基于免費(fèi)庫 Free Spire.XLS for .NET,通過環(huán)境準(zhǔn)備→實(shí)戰(zhàn)示例的邏輯,帶你從零掌握 C# 讀寫 Excel 的核心技巧。
一、環(huán)境準(zhǔn)備
Free Spire.XLS for .NET 是一款專門用于處理 Excel 文件的免費(fèi) C# 庫,相比 EPPlus 等同類工具,它能更精細(xì)地控制 Excel 工作表(如格式設(shè)置、公式計(jì)算、圖表生成等)。
開始前需要先通過 NuGet 快速安裝該免費(fèi)庫:
- 打開 Visual Studio,右鍵點(diǎn)擊項(xiàng)目 → 選擇「管理 NuGet 程序包」。
- 在「瀏覽」頁搜索 FreeSpire.XLS,點(diǎn)擊「安裝」即可完成。
或者打開「程序包管理器控制臺(tái)」,執(zhí)行以下命令:
Install-Package FreeSpire.XLS
注意:免費(fèi)版存在部分限制(如單文件最大支持 500 行數(shù)據(jù))。
二、通過 C# 讀取 Excel 數(shù)據(jù)
從「讀取特定單元格」到「提取公式結(jié)果」,覆蓋開發(fā)中最常用的 3 類讀取場景,示例代碼可直接運(yùn)行。
2.1 讀取指定單元格數(shù)據(jù)
適用場景:獲取 Excel 中固定位置的關(guān)鍵數(shù)據(jù)(如報(bào)表標(biāo)題、匯總結(jié)果)。
using Spire.Xls;
using System;
namespace ReadExcelData
{
class Program
{
static void Main(string[] args)
{
// 加載 Excel 文檔
Workbook wb = new Workbook();
wb.LoadFromFile("示例.xlsx");
//獲取第一張工作表
Worksheet sheet = wb.Worksheets[0];
// 獲取指定單元格的數(shù)據(jù)
Console.Write(sheet.Range["B4"].Value);
Console.WriteLine();
}
}
}
2.2 讀取整個(gè)工作表數(shù)據(jù)
適用場景:批量獲取工作表中所有數(shù)據(jù)(如導(dǎo)入 Excel 表格到數(shù)據(jù)庫)。
using Spire.Xls;
using System;
namespace ReadExcelData
{
class Program
{
static void Main(string[] args)
{
// 加載 Excel 文檔
Workbook wb = new Workbook();
wb.LoadFromFile("示例.xlsx");
// 獲取第一張工作表
Worksheet sheet = wb.Worksheets[0];
// 獲取數(shù)據(jù)有效范圍(僅遍歷有數(shù)據(jù)的單元格,避免空白行/列無效循環(huán))
CellRange locatedRange = sheet.AllocatedRange;
//遍歷各行
for (int i = 0; i < locatedRange.Rows.Length; i++)
{
//遍歷各列
for (int j = 0; j < locatedRange.Rows[i].ColumnCount; j++)
{
// 讀取單元格數(shù)據(jù)并輸出
Console.Write(locatedRange[i + 1, j + 1].Value + " ");
}
Console.WriteLine();
}
}
}
}
2.3 讀取公式與公式計(jì)算結(jié)果
適用場景:需要獲取 Excel 中公式的原始表達(dá)式,或其計(jì)算后的最終結(jié)果(如財(cái)務(wù)報(bào)表中的自動(dòng)求和結(jié)果)。
using Spire.Xls;
using System;
namespace ExcelReadDemo
{
class FormulaReadDemo
{
static void Main(string[] args)
{
// 加載 Excel 文檔
Workbook workbook = new Workbook();
workbook.LoadFromFile("DataSample.xlsx");
// 獲取第一張工作表
Worksheet sheet = workbook.Worksheets[0];
// 指定包含公式的目標(biāo)單元格(如 E3)
CellRange formulaCell = sheet.Range["E3"];
// 檢查單元格是否包含公式
if (formulaCell.HasFormula)
{
Console.WriteLine("該單元格包含公式:");
// 讀取公式原始表達(dá)式(如 "SUM(B3:D3)")
string formula = formulaCell.Formula;
Console.WriteLine($"公式表達(dá)式:{formula}");
// 讀取公式計(jì)算結(jié)果(自動(dòng)執(zhí)行計(jì)算邏輯)
object formulaResult = formulaCell.FormulaValue;
Console.WriteLine($"公式計(jì)算結(jié)果:{formulaResult}");
}
else
{
Console.WriteLine("該單元格不包含公式");
}
workbook.Dispose();
Console.ReadKey();
}
}
}
三、通過 C# 寫入 Excel 數(shù)據(jù)
從「創(chuàng)建新工作簿」到「格式化數(shù)據(jù)寫入」,覆蓋報(bào)表生成、數(shù)據(jù)追加等核心寫入場景。
3.1 創(chuàng)建含多工作表的新工作簿
適用場景:從零構(gòu)建 Excel 文件(如生成包含「銷售數(shù)據(jù)」「利潤分析」的多表報(bào)表)。
using Spire.Xls;
namespace ExcelWriteDemo
{
class NewWorkbookDemo
{
static void Main(string[] args)
{
// 初始化空工作簿
Workbook workbook = new Workbook();
// 清除默認(rèn)空白工作表(可選,根據(jù)需求保留)
workbook.Worksheets.Clear();
// 添加 3 個(gè)新工作表
workbook.CreateEmptySheets(3);
// 重命名工作表(提升文件可讀性)
workbook.Worksheets[0].Name = "月度銷售數(shù)據(jù)";
workbook.Worksheets[1].Name = "庫存統(tǒng)計(jì)";
workbook.Worksheets[2].Name = "利潤分析";
// 保存文件(指定路徑和 Excel 版本,支持 2007/2010/2016 等)
workbook.SaveToFile("SalesReport.xlsx", ExcelVersion.Version2016);
workbook.Dispose();
}
}
}
3.2 向現(xiàn)有文件追加數(shù)據(jù)并格式化
適用場景:在已有 Excel 中添加數(shù)據(jù)并美化格式(如生成帶樣式的員工報(bào)表、銷售清單)。
using Spire.Xls;
using System.Drawing;
namespace ExcelWriteDemo
{
class DataWriteWithFormatDemo
{
static void Main(string[] args)
{
// 加載已有的 Excel 文件
Workbook workbook = new Workbook();
workbook.LoadFromFile("SalesReport.xlsx");
// 獲取目標(biāo)工作表
Worksheet sheet = workbook.Worksheets[0];
// 寫入標(biāo)題(合并單元格 + 格式化)
// 合并 A1:D1 單元格作為標(biāo)題欄
sheet.Range["A1:D1"].Merge();
sheet.Range["A1"].Text = "2024年1月員工銷售業(yè)績";
// 設(shè)置標(biāo)題樣式:藍(lán)色粗體、居中對(duì)齊、行高25
sheet.Range["A1"].Style.Font.IsBold = true;
sheet.Range["A1"].Style.Font.Color = Color.Blue;
sheet.Range["A1"].HorizontalAlignment = HorizontalAlignType.Center;
sheet.Rows[0].RowHeight = 25;
// 寫入業(yè)務(wù)數(shù)據(jù)(支持文本、數(shù)值等類型)
sheet.Range["A2"].Value = "張三";
sheet.Range["B2"].Value = "1月";
sheet.Range["C2"].Value2 = 58000; // 數(shù)值類型
sheet.Range["D2"].Value = "銷售一部";
sheet.Range["A3"].Value = "李四";
sheet.Range["B3"].Value = "1月";
sheet.Range["C3"].Value2 = 62000;
sheet.Range["D3"].Value = "銷售二部";
// 調(diào)整列寬(適配內(nèi)容,避免文字截?cái)啵?
sheet.SetColumnWidth(1, 12); // A列
sheet.SetColumnWidth(2, 10); // B列
sheet.SetColumnWidth(3, 15); // C列
sheet.SetColumnWidth(4, 12); // D列
// 添加邊框(美化表格)
CellRange dataRange = sheet.Range["A2:D3"];
dataRange.BorderAround(LineStyleType.Medium); // 外邊框
dataRange.BorderInside(LineStyleType.Thin); // 內(nèi)邊框
// 保存文件
workbook.SaveToFile("FormattedSalesReport.xlsx", ExcelVersion.Version2016);
workbook.Dispose();
}
}
}
總結(jié):Free Spire.XLS for .NET 以「低門檻、高兼容性」的特點(diǎn),成為 C# 處理 Excel 輕量級(jí)場景的優(yōu)選工具。免費(fèi)版雖有數(shù)據(jù)量限制,但足以滿足中小型項(xiàng)目的報(bào)表生成、數(shù)據(jù)導(dǎo)入導(dǎo)出等需求。
到此這篇關(guān)于C#實(shí)現(xiàn)高效讀寫Excel工作表的文章就介紹到這了,更多相關(guān)C#讀寫Excel工作表內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C#操作SQLite實(shí)現(xiàn)數(shù)據(jù)的增刪改查
SQLite是一個(gè)輕量級(jí)、跨平臺(tái)的關(guān)系型數(shù)據(jù)庫,在小型項(xiàng)目中,方便,易用,同時(shí)支持多種開發(fā)語言。本文將用C#語言對(duì)SQLite 的一個(gè)封裝,實(shí)現(xiàn)數(shù)據(jù)的增刪改查。需要的可以參考一下2022-01-01
淺拷貝和深拷貝深入理解(shallow copy VS deep copy)
淺拷貝和深拷貝深入理解(shallow copy VS deep copy) 本文重點(diǎn)討論引用類型變量的拷貝機(jī)制和實(shí)現(xiàn)2014-01-01
C#中調(diào)用命令行cmd開啟wifi熱點(diǎn)的實(shí)例代碼
最近想在win7上開啟wifi熱點(diǎn),于是就弄出下面這個(gè)小東西,里面涉及如何在控制臺(tái)上輸入命令,分享一下。首先在VS中創(chuàng)建一個(gè)window窗口,然后創(chuàng)建兩個(gè)四個(gè)button,兩個(gè)輸入框2013-04-04
在C#?WPF中實(shí)現(xiàn)登錄頁面跳轉(zhuǎn)的兩種方案
在?C#?WPF?中實(shí)現(xiàn)登錄頁面跳轉(zhuǎn),核心是?“驗(yàn)證登錄邏輯”?與?“頁面切換”?結(jié)合,常用兩種方案:NavigationWindow?導(dǎo)航跳轉(zhuǎn)(適合多頁面場景)和Window+UserControl?切換(適合單窗口集成場景),本文介紹了具體實(shí)現(xiàn)步驟,需要的朋友可以參考下2025-10-10

