C#高效實現(xiàn)Excel數(shù)據(jù)讀取入門教程
在 C# 開發(fā)中,Excel 數(shù)據(jù)處理是高頻場景—無論是用戶數(shù)據(jù)導(dǎo)入、業(yè)務(wù)報表生成,還是簡單的數(shù)據(jù)分析,Excel 都不可或缺。但傳統(tǒng)依賴 Microsoft.Office.Interop.Excel 的方案,總會遇到性能差、需裝Office環(huán)境、部署麻煩等問題。
而免費版 Free Spire.XLS恰好能解決這些痛點:無需安裝任何Office組件,完全免費且API簡潔,足以滿足小型項目的Excel讀取需求。下面就詳細介紹如何用它實現(xiàn)Excel數(shù)據(jù)讀取。
一、環(huán)境準備:安裝 Free Spire.XLS
1. NuGet安裝
有兩種方式任選:
- 右鍵點擊項目 → 「管理NuGet程序包」→ 切換到「瀏覽」,搜索“FreeSpire.XLS”,找到后點擊「安裝」。
- 打開「NuGet包管理器控制臺」,輸入以下命令并回車:
install-package FreeSpire.XLS
2. 驗證安裝
安裝完成后,展開項目的「引用」文件夾,若能看到 FreeSpire.XLS 程序集,說明免費版已成功集成。
注意:免費版有數(shù)據(jù)量限制,適合小型數(shù)據(jù)處理場景。
二、3分鐘快速上手:基礎(chǔ)單元格讀取
1. 引入命名空間
在代碼文件頂部添加 Spire.XLS 命名空間,確保能調(diào)用核心類:
using Spire.Xls;
2. 編寫基礎(chǔ)讀取代碼
支持讀取 XLS 和 XLSX 文件,提供“列名定位”和“行號列號定位”兩種方式,代碼如下:
// 1. 初始化工作簿,加載Excel文件(替換為你的文件路徑)
Workbook workbook = new Workbook();
workbook.LoadFromFile("測試數(shù)據(jù).xlsx");
// 2. 獲取第一個工作表(索引從0開始)
Worksheet targetSheet = workbook.Worksheets[0];
// 3. 讀取指定單元格數(shù)據(jù)
Console.WriteLine("通過列名讀?。ˋ1單元格):" + targetSheet.Range["A1"].Value);
Console.WriteLine("通過行號列號讀?。ǖ?行第1列):" + targetSheet.Range[2, 1].Value);
3.關(guān)鍵提醒
用「行號+列號」定位時,索引從1開始(而非 C# 常規(guī)的0索引),比如“第3行第2列”需寫為Range[3, 2],若誤寫為Range[3, 1]會定位到錯誤單元格。
三、批量讀?。罕闅v整個工作表數(shù)據(jù)
若需讀取Excel中所有有效數(shù)據(jù)(如批量導(dǎo)入到數(shù)據(jù)庫),可通過“有效數(shù)據(jù)區(qū)域”遍歷,避免讀取空單元格。完整代碼如下:
using Spire.Xls;
namespace ExcelRead
{
class Program
{
static void Main(string[] args)
{
try
{
// 加載Excel文件
Workbook workbook = new Workbook();
workbook.LoadFromFile("產(chǎn)品數(shù)據(jù).xlsx");
// 獲取第一個工作表
Worksheet dataSheet = workbook.Worksheets[0];
// 獲取“有效數(shù)據(jù)區(qū)域”(僅包含有數(shù)據(jù)的單元格,減少資源占用)
CellRange validRange = dataSheet.AllocatedRange;
// 外層循環(huán)遍歷行
for (int rowIdx = 0; rowIdx < validRange.Rows.Length; rowIdx++)
{
// 內(nèi)層循環(huán)遍歷當前行的列
for (int colIdx = 0; colIdx < validRange.Rows[rowIdx].ColumnCount; colIdx++)
{
// 單元格索引從1開始,需對循環(huán)變量+1
string cellData = validRange[rowIdx + 1, colIdx + 1].Value;
Console.Write(cellData + " ");
}
Console.WriteLine(); // 一行結(jié)束后換行
}
Console.WriteLine("讀取完成!");
}
catch (Exception ex)
{
Console.WriteLine("讀取失敗:" + ex.Message);
}
}
}
}
四、特殊場景:讀取公式與計算結(jié)果
若 Excel 單元格包含公式(如=A2+B2),直接用 Value 屬性會返回公式文本,而非計算結(jié)果。Free Spire.XLS支持獲取公式結(jié)果,代碼如下:
// 遍歷有效數(shù)據(jù)區(qū)域的所有單元格
foreach (CellRange cell in dataSheet.AllocatedRange)
{
// 判斷單元格是否包含公式
if (cell.HasFormula)
{
// 1. 讀取原始公式(如“=A2+B2”)
string formulaText = cell.Formula;
// 2. 讀取公式計算后的結(jié)果
string formulaResult = cell.FormulaValue.ToString();
// 輸出結(jié)果
Console.WriteLine($"單元格{cell.RangeAddress}:");
Console.WriteLine($" 公式:{formulaText}");
Console.WriteLine($" 結(jié)果:{formulaResult}\n");
}
}
Excel 數(shù)據(jù)處理是 C# 開發(fā)中的基礎(chǔ)需求,F(xiàn)ree Spire.XLS for .NET 不僅擺脫了對 Office 環(huán)境的依賴,還通過簡潔的 API 降低了開發(fā)門檻 — 無論是基礎(chǔ)的單元格讀取、批量數(shù)據(jù)遍歷,還是特殊的公式結(jié)果獲取,都能高效實現(xiàn)。
到此這篇關(guān)于C#高效實現(xiàn)Excel數(shù)據(jù)讀取入門教程的文章就介紹到這了,更多相關(guān)C#讀取Excel數(shù)據(jù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C#如何將List<string>轉(zhuǎn)換為List<double>
這篇文章主要介紹了C#如何將List<string>轉(zhuǎn)換為List<double>問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-07-07
C#中Thread(線程)和Task(任務(wù))實例詳解
.NET Framework在System.Threading命名空間中具有與線程相關(guān)的類,線程是一小組可執(zhí)行指令,這篇文章主要給大家介紹了關(guān)于C#中Thread(線程)和Task(任務(wù))的相關(guān)資料,需要的朋友可以參考下2022-03-03
C# 中的委托與事件實現(xiàn)靈活的回調(diào)機制(應(yīng)用場景分析)
委托提供了一種類型安全的方式將方法作為參數(shù)傳遞,而事件則允許對象通知其他對象發(fā)生了某些事情,這篇文章主要介紹了C# 中的委托與事件實現(xiàn)靈活的回調(diào)機制,需要的朋友可以參考下2024-12-12
C#高效比較兩個DataTable數(shù)據(jù)差異化的方法實現(xiàn)
本文主要介紹了C#高效比較兩個DataTable數(shù)據(jù)差異化的方法實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-05-05
C#實現(xiàn)通過程序自動抓取遠程Web網(wǎng)頁信息的代碼
C#實現(xiàn)通過程序自動抓取遠程Web網(wǎng)頁信息的代碼...2007-04-04
C#解決多IfElse判斷語句和Switch語句問題的方法分享
這篇文章主要為大家介紹C#如何使用設(shè)計模式中的策略模式和委托來解決多個IfElse判斷語句和Switch語句,這種替換方式在其他語言也一樣可以做到,感興趣的可以了解一下2022-12-12

