技術(shù)頻道導(dǎo)航
HTML/CSS
.NET技術(shù)
IIS技術(shù)
PHP技術(shù)
Js/JQuery
Photoshop
Fireworks
服務(wù)器技術(shù)
操作系統(tǒng)
網(wǎng)站運(yùn)營(yíng)

贊助商

分類(lèi)目錄

贊助商

最新文章

搜索

用EPPlus在C# .NET中讀取Excel文件非常簡(jiǎn)單【案例】

作者:admin    時(shí)間:2023-5-15 0:26:51    瀏覽:

早在 .NET Core 出現(xiàn)之前,用代碼打開(kāi) Excel 文件一直是一種痛苦的經(jīng)歷。在許多情況下,你實(shí)際上需要在目標(biāo)/用戶計(jì)算機(jī)上安裝 Excel 應(yīng)用程序才能通過(guò)代碼打開(kāi) Excel 文件。如果你以前不得不使用那些“OLE DB Jet”查詢,你就會(huì)知道這不是很好的體驗(yàn)。幸運(yùn)的是,現(xiàn)在有一些非常好的開(kāi)源解決方案不需要目標(biāo)機(jī)器上的 Excel。這對(duì) Windows 用戶有好處,這樣你就不必在目標(biāo)用戶機(jī)器或 Web 服務(wù)器上安裝 Excel,而且對(duì)在 Linux(甚至 Mac/ARM)上托管 .NET Core 應(yīng)用程序的人也有好處——Excel 顯然無(wú)處可去被看到!

我寫(xiě)這篇文章的方法非常簡(jiǎn)單。使用幾個(gè)工作表、幾個(gè)公式和幾個(gè)特殊格式案例創(chuàng)建一個(gè)標(biāo)準(zhǔn)化的 Excel 工作簿。在每個(gè)庫(kù)中讀取相同的數(shù)據(jù),看看哪個(gè)最適合我。

請(qǐng)注意如果你正在讀取一個(gè)沒(méi)有公式的單個(gè)sheet的Excel工作表,你應(yīng)該改為使用標(biāo)準(zhǔn) CSV 技術(shù)解析它。我這里有幾篇關(guān)于在 C# .NET 中解析 CSV 的精彩文章,你應(yīng)該遵循這篇文章。CSV 解析器非常適合獲取表格數(shù)據(jù)并將其反序列化為對(duì)象,應(yīng)該盡可能使用。

示例數(shù)據(jù)

我認(rèn)為比較所提供的不同庫(kù)的最佳方法是創(chuàng)建一個(gè)簡(jiǎn)單的電子表格來(lái)比較我們讀取數(shù)據(jù)的不同方式。電子表格將有兩個(gè)“工作表”,其中第二個(gè)工作表引用第一個(gè)。

工作表 1 被命名為“First Sheet”,看起來(lái)像這樣:

 

請(qǐng)注意,單元格 A2 只是數(shù)字“1”。然后在 B2 列中,我們引用了單元格 A2。這是因?yàn)槲覀円獧z查庫(kù)是否允許我們不僅從單元格中獲取“公式”,而且還允許我們計(jì)算出的值應(yīng)該是什么。

我們還將單元格 A2 的字體顏色設(shè)置為紅色,并且 B2 具有完整的邊框(雖然很難看到,因?yàn)槲艺趪L試顯示公式)。稍后我們將嘗試提取這些樣式元素。

Sheet 2 被命名為“Second Sheet”,看起來(lái)像這樣:

 

所以我們正在做一個(gè)簡(jiǎn)單的“SUM”公式并引用第一張表。同樣,這樣我們就可以測(cè)試獲取公式和計(jì)算值,但這次是跨不同的工作表。對(duì)于習(xí)慣于使用 Excel 的人來(lái)說(shuō),這并不復(fù)雜,但讓我們看看一些庫(kù)是如何處理它的。

一般來(lái)說(shuō),在我的測(cè)試中,我希望我的輸出始終遵循相同的格式: 

Sheet 1 Data
Cell A2 Value   : 
Cell A2 Color   :
Cell B2 Formula :
Cell B2 Value   :
Cell B2 Border  :

Sheet 2 Data
Cell A2 Formula :
Cell A2 Value   :

這樣當(dāng)我展示代碼時(shí),你可以選擇對(duì)你來(lái)說(shuō)最有意義的庫(kù)。

EPPlus

當(dāng)我第一次開(kāi)始在 .NET Core 中尋找解析 Excel 時(shí),我記得很多個(gè)月前使用 EPPlus 進(jìn)行一些非常輕量級(jí)的 Excel 解析??梢栽诖颂幷业?nuget 包:

https://www.nuget.org/packages/EPPlus/

它也是開(kāi)源的,所以如果你喜歡的話,你可以通讀源代碼:

https://github.com/JanKallman/EPPlus

讀取我們的 Excel 電子表格的代碼如下所示:

static void Main(string[] args)
{
    using(var package = new ExcelPackage(new FileInfo("Book.xlsx")))
    {
        var firstSheet = package.Workbook.Worksheets["First Sheet"];
        Console.WriteLine("Sheet 1 Data");
        Console.WriteLine($"Cell A2 Value   : {firstSheet.Cells["A2"].Text}");
        Console.WriteLine($"Cell A2 Color   : {firstSheet.Cells["A2"].Style.Font.Color.LookupColor()}");
        Console.WriteLine($"Cell B2 Formula : {firstSheet.Cells["B2"].Formula}");
        Console.WriteLine($"Cell B2 Value   : {firstSheet.Cells["B2"].Text}");
        Console.WriteLine($"Cell B2 Border  : {firstSheet.Cells["B2"].Style.Border.Top.Style}");
        Console.WriteLine("");

        var secondSheet = package.Workbook.Worksheets["Second Sheet"];
        Console.WriteLine($"Sheet 2 Data");
        Console.WriteLine($"Cell A2 Formula : {secondSheet.Cells["A2"].Formula}");
        Console.WriteLine($"Cell A2 Value   : {secondSheet.Cells["A2"].Text}");
    }
}

這是*超級(jí)*簡(jiǎn)單,開(kāi)箱即用。它完美地選擇了公式與文本!我們第一張紙上的樣式也很容易上手。邊框有點(diǎn)煩人,因?yàn)槟惚仨殭z查邊框的“樣式”,如果樣式為“無(wú)”,則表示沒(méi)有邊框(與“HasBorder”或類(lèi)似的布爾值相反)。但我認(rèn)為我只是吹毛求疵,EPPlus 確實(shí)有效!

總結(jié)

本文介紹了用EPPlus在C# .NET中讀取Excel文件的案例,希望對(duì)你有幫助。

相關(guān)文章

標(biāo)簽: EPPlus  CSharp  asp.net  Excel  
x