国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

深入解析C#中的第三方庫(kù)NPOI:Excel和Word文件處理的利器

這篇具有很好參考價(jià)值的文章主要介紹了深入解析C#中的第三方庫(kù)NPOI:Excel和Word文件處理的利器。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

一、引言
在.NET開(kāi)發(fā)中,操作Office文檔(特別是Excel和Word)是一項(xiàng)常見(jiàn)的需求。然而,在服務(wù)器端或無(wú)Microsoft Office環(huán)境的場(chǎng)景下,直接使用Office Interop可能會(huì)面臨挑戰(zhàn)。為了解決這個(gè)問(wèn)題,開(kāi)源庫(kù)NPOI應(yīng)運(yùn)而生,它提供了無(wú)需安裝Office即可創(chuàng)建、讀取和修改Excel (.xls, .xlsx) 和 Word (.doc) 文件的能力。
二、NPOI簡(jiǎn)介
NPOI是一個(gè)基于.NET的API,用于讀寫(xiě)微軟的OLE 2 Compound Document formats,如Microsoft Office Excel和Word。它是Apache POI項(xiàng)目的.NET移植版本,允許開(kāi)發(fā)者在沒(méi)有安裝Office的情況下處理這些格式的文件。
三、主要組件與方法
1. 安裝與引用
Install-Package NPOI
或者在Visual Studio中右鍵項(xiàng)目 -> 管理NuGet程序包 -> 搜索并安裝NPOI。
2. 引用命名空間

using NPOI.SS.UserModel; // Excel相關(guān)的接口和類(lèi)
using NPOI.XSSF.UserModel; // 處理.xlsx文件
using NPOI.HSSF.UserModel; // 處理.xls文件
using System.IO; // 文件操作

3. 創(chuàng)建/打開(kāi)工作簿

  • 創(chuàng)建一個(gè)新的Excel工作簿(.xlsx):
    var workbook = new XSSFWorkbook();
  • 打開(kāi)一個(gè)現(xiàn)有的Excel文件(.xlsx或.xls):
FileStream file = new FileStream("path_to_your_file.xlsx", FileMode.Open, FileAccess.Read);
var workbook = new XSSFWorkbook(file); // .xlsx格式
var workbook = new HSSFWorkbook(file); // .xls格式

4. 創(chuàng)建/獲取工作表

  • 創(chuàng)建新的工作表:
    ISheet sheet = workbook.CreateSheet("Sheet1");
  • 獲取已存在的工作表:
    ISheet sheet = workbook.GetSheetAt(0); // 獲取索引為0的工作表
    5. 寫(xiě)入單元格數(shù)據(jù)
  • 創(chuàng)建行與單元格:
IRow row = sheet.CreateRow(rowIndex);
ICell cell = row.CreateCell(columnIndex);
  • 設(shè)置單元格值:
cell.SetCellValue("文本內(nèi)容"); // 文本
cell.SetCellValue(12345); // 數(shù)字

6. 合并單元格

var region = new CellRangeAddress(startRow, endRow, startColumn, endColumn);
sheet.AddMergedRegion(region);

7. 設(shè)置單元格樣式

  • 創(chuàng)建樣式對(duì)象:
    var style = workbook.CreateCellStyle();
  • 設(shè)置樣式屬性(如字體、顏色、對(duì)齊方式等):
style.Alignment = HorizontalAlignment.Center;
IFont font = workbook.CreateFont();
font.Boldweight = (short)FontBoldWeight.Bold;
style.SetFont(font);
  • 應(yīng)用到單元格:
    cell.CellStyle = style;
    8. 保存文件
FileStream outputStream = new FileStream("output.xlsx", FileMode.Create);
workbook.Write(outputStream);
outputStream.Close();

9. 關(guān)閉資源

  • 確保關(guān)閉Workbook以及相關(guān)的文件流以釋放資源:
workbook.Close();
file.Close();

四、高級(jí)功能

  • 讀取現(xiàn)有文件:通過(guò)FileStream打開(kāi)并讀取Excel文件內(nèi)容。

  • 讀取公式結(jié)果:通過(guò)ICell.CachedFormulaResultType或ICell.CellFormula屬性獲取公式計(jì)算結(jié)果。

  • 操作圖表和圖片:NPOI支持插入、更新和刪除Excel中的圖表和圖片。

  • 處理Word文檔:通過(guò)XWPFDocument類(lèi)來(lái)創(chuàng)建、讀取和修改Word(.doc)文件。

五、總結(jié)

NPOI庫(kù)憑借其強(qiáng)大的功能和輕量級(jí)設(shè)計(jì),已成為.NET環(huán)境下處理Office文檔的標(biāo)準(zhǔn)工具之一。無(wú)論是在Web應(yīng)用程序后臺(tái)處理用戶上傳的Excel文件,還是在批處理任務(wù)中生成報(bào)表,NPOI都能提供高效且易于使用的解決方案。通過(guò)深入理解和熟練運(yùn)用NPOI的各種方法,開(kāi)發(fā)者可以輕松應(yīng)對(duì)各種復(fù)雜的文檔處理任務(wù)。

六、完整的讀取數(shù)據(jù)例子

using NPOI.HSSF.UserModel;
using NPOI.SS.UserModel;
using System.IO;
  public void ReadExcelFile(string filePath)
    {
        // 創(chuàng)建一個(gè)FileStream對(duì)象來(lái)打開(kāi)Excel文件
        using (FileStream file = new FileStream(filePath, FileMode.Open, FileAccess.Read))
        {
            // 根據(jù)文件擴(kuò)展名選擇合適的Workbook實(shí)現(xiàn)
            IWorkbook workbook;
            if (Path.GetExtension(filePath).ToLower() == ".xlsx")
            {
                workbook = new XSSFWorkbook(file);
            }
            else
            {
                workbook = new HSSFWorkbook(file); // 適用于.xls文件
            }

            // 獲取第一個(gè)工作表(索引從0開(kāi)始)
            ISheet sheet = workbook.GetSheetAt(0);

            // 遍歷所有行
            for (int rowIndex = 0; rowIndex <= sheet.LastRowNum; rowIndex++)
            {
                IRow row = sheet.GetRow(rowIndex);

                // 如果當(dāng)前行不為空,則遍歷所有單元格
                if (row != null)
                {
                    for (int cellIndex = 0; cellIndex < row.LastCellNum; cellIndex++)
                    {
                        ICell cell = row.GetCell(cellIndex);

                        // 檢查單元格是否存在并獲取其數(shù)據(jù)類(lèi)型和值
                        if (cell != null)
                        {
                            switch (cell.CellType)
                            {
                                case CellType.Numeric:
                                    double numericValue = cell.NumericCellValue;
                                    Console.WriteLine($"第{rowIndex + 1}行,第{cellIndex + 1}列:{numericValue}");
                                    break;
                                case CellType.String:
                                    string stringValue = cell.StringCellValue;
                                    Console.WriteLine($"第{rowIndex + 1}行,第{cellIndex + 1}列:{stringValue}");
                                    break;
                                case CellType.Formula:
                                    // 如果需要顯示公式計(jì)算結(jié)果,使用CachedFormulaResultType
                                    if (cell.CachedFormulaResultType == CellType.Numeric)
                                    {
                                        double formulaValue = cell.NumericCellValue;
                                        Console.WriteLine($"第{rowIndex + 1}行,第{cellIndex + 1}列(公式結(jié)果):{formulaValue}");
                                    }
                                    else if (cell.CachedFormulaResultType == CellType.String)
                                    {
                                        string formulaValue = cell.StringCellValue;
                                        Console.WriteLine($"第{rowIndex + 1}行,第{cellIndex + 1}列(公式結(jié)果):{formulaValue}");
                                    }
                                    // 其他類(lèi)型的公式處理...
                                    break;
                                default:
                                    // 對(duì)于日期、布爾值等其他類(lèi)型,做相應(yīng)處理
                                    break;
                            }
                        }
                        else
                        {
                            Console.WriteLine($"第{rowIndex + 1}行,第{cellIndex + 1}列:空單元格");
                        }
                    }
                }
            }

            // 關(guān)閉workbook以釋放資源
            workbook.Close();
        }
    }

在這個(gè)例子中,我們首先打開(kāi)了指定路徑下的Excel文件,并根據(jù)文件類(lèi)型創(chuàng)建了相應(yīng)的HSSFWorkbook或XSSFWorkbook對(duì)象。然后,我們循環(huán)遍歷每一行和每一列,獲取每個(gè)單元格的內(nèi)容,并根據(jù)單元格類(lèi)型輸出對(duì)應(yīng)的值。

請(qǐng)確保已安裝NPOI NuGet包并在項(xiàng)目中引用了必要的命名空間。

七、保存數(shù)據(jù)例子

using NPOI.HSSF.UserModel;
using NPOI.SS.UserModel;
using System.IO;
 public void SaveDataToExcel(string filePath)
    {
        // 創(chuàng)建一個(gè)新的HSSFWorkbook(適用于.xls格式)或XSSFWorkbook(適用于.xlsx格式)
        IWorkbook workbook = new XSSFWorkbook(); // 使用.xlsx格式

        // 創(chuàng)建新的工作表并設(shè)置名稱(chēng)
        ISheet sheet = workbook.CreateSheet("Sheet1");

        // 創(chuàng)建第一行數(shù)據(jù)
        IRow headerRow = sheet.CreateRow(0);
        headerRow.CreateCell(0).SetCellValue("Name");
        headerRow.CreateCell(1).SetCellValue("Age");
        headerRow.CreateCell(2).SetCellValue("City");

        // 添加三行數(shù)據(jù)
        for (int i = 1; i <= 3; i++)
        {
            IRow dataRow = sheet.CreateRow(i);

            dataRow.CreateCell(0).SetCellValue($"Person {i}");
            dataRow.CreateCell(1).SetCellValue(i * 10); // 年齡假設(shè)為i*10
            dataRow.CreateCell(2).SetCellValue($"City{i}");

            // 設(shè)置單元格樣式(可選,例如設(shè)置字體加粗和居中)
            ICellStyle style = workbook.CreateCellStyle();
            style.Alignment = HorizontalAlignment.Center;
            IFont font = workbook.CreateFont();
            font.Boldweight = (short)FontBoldWeight.Bold;
            style.SetFont(font);
            dataRow.Cells[0].CellStyle = style;
        }

        // 保存到文件
        using (FileStream fileStream = new FileStream(filePath, FileMode.Create, FileAccess.Write))
        {
            workbook.Write(fileStream);
        }

        // 關(guān)閉workbook以釋放資源
        workbook.Close();
    }

在這個(gè)例子中,我們首先創(chuàng)建了一個(gè)新的XSSFWorkbook對(duì)象,并在其中創(chuàng)建了一個(gè)名為"Sheet1"的工作表。接著,我們?cè)诒眍^添加了列名,并插入了三行示例數(shù)據(jù)。為了演示單元格樣式的設(shè)置,我們將第一列的數(shù)據(jù)設(shè)置為了加粗和居中的樣式。最后,將整個(gè)工作簿內(nèi)容寫(xiě)入指定路徑的Excel文件。

請(qǐng)注意,根據(jù)實(shí)際需求選擇創(chuàng)建HSSFWorkbook或XSSFWorkbook,以及調(diào)整保存的數(shù)據(jù)和樣式。確保已安裝NPOI NuGet包并在項(xiàng)目中引用了必要的命名空間。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-841142.html

到了這里,關(guān)于深入解析C#中的第三方庫(kù)NPOI:Excel和Word文件處理的利器的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 安卓玩機(jī)搞機(jī)----移植第三方rom修復(fù) 第三方GSI系統(tǒng)修復(fù)bug綜合解析【一】

    安卓玩機(jī)搞機(jī)----移植第三方rom修復(fù) 第三方GSI系統(tǒng)修復(fù)bug綜合解析【一】

    很多朋友熱衷與刷寫(xiě)第三方非當(dāng)前機(jī)型官方系統(tǒng)的rom。和刷寫(xiě)第三方gsi等等。例如 米系列機(jī)型刷寫(xiě)Flyme 一加機(jī)型刷寫(xiě)miui oppo刷寫(xiě)gsi等等。 很多友友也會(huì)嘗試自己移植第三方rom。但此類(lèi)操作最大的問(wèn)題在于修復(fù)可以開(kāi)機(jī)后的bug,今天的教程綜合說(shuō)明下這類(lèi)修復(fù)思路。資源步驟

    2024年02月07日
    瀏覽(309)
  • 【深入淺出 Spring Security(十二)】使用第三方(Github)授權(quán)登錄

    【深入淺出 Spring Security(十二)】使用第三方(Github)授權(quán)登錄

    (Github授權(quán)登錄的具體操作在目錄第三“章”) 下面是《深入淺出Spring Security》書(shū)中的一段概述: OAuth 是一個(gè)開(kāi)放標(biāo)準(zhǔn)(現(xiàn)在所說(shuō)的 OAuth 一般都是指 OAuth2,即 2.0 版本),可以理解為是一種協(xié)議,該標(biāo)準(zhǔn)允許用戶讓第三方應(yīng)用訪問(wèn)該用戶在某一網(wǎng)站上存儲(chǔ)的私密資源(如頭

    2024年02月10日
    瀏覽(33)
  • c#獲取句柄,并對(duì)第三方軟件的輸入框和按鈕進(jìn)行控制

    c#獲取句柄,并對(duì)第三方軟件的輸入框和按鈕進(jìn)行控制

    剛學(xué)了沒(méi)多久,還有很多地方?jīng)]有理解到位,還請(qǐng)大家指正。 當(dāng)程序運(yùn)行起來(lái),就會(huì)顯示在任務(wù)管理器中,軟件中的每個(gè)事件,比如按鈕,文本框等一些控件,每個(gè)事件都會(huì)產(chǎn)生一個(gè)句柄,句柄就是這些事件的標(biāo)識(shí)符。如果拿到句柄就可以自己寫(xiě)軟件對(duì)第三方軟件進(jìn)行控制。

    2024年02月16日
    瀏覽(27)
  • ARM交叉編譯入門(mén)及交叉編譯第三方庫(kù)常見(jiàn)問(wèn)題解析

    交叉編譯簡(jiǎn)單說(shuō)來(lái),就是編譯成果物的地兒不是你運(yùn)行這個(gè)成果物的地兒。最常見(jiàn)的場(chǎng)景,就是我們要編譯一個(gè) ARM版本 的可執(zhí)行程序,但我們編譯這個(gè) ARM版本 可執(zhí)行程序的地方,是在一個(gè) x86_x64 的平臺(tái)上。 絕大部分的原因,是目標(biāo)平臺(tái)不具備編譯成果物的算力。具體說(shuō)來(lái)

    2023年04月26日
    瀏覽(28)
  • 【iOS】—— 實(shí)現(xiàn)WebSocket發(fā)送消息(SocketRocket第三方庫(kù)的使用和解析)

    【iOS】—— 實(shí)現(xiàn)WebSocket發(fā)送消息(SocketRocket第三方庫(kù)的使用和解析)

    偶然之間了解到了利用WebSocket實(shí)現(xiàn)后端和前端的相互發(fā)送消息,就查了查在iOS里這個(gè)東西該怎么寫(xiě),用舍友寫(xiě)的接口簡(jiǎn)單實(shí)現(xiàn)了兩個(gè)用戶的通信。 WebSocket 是一種在 Web 應(yīng)用程序中實(shí)現(xiàn)雙向通信的協(xié)議。它允許客戶端和服務(wù)器之間建立一個(gè)持久性的連接,以便可以在任何時(shí)間點(diǎn)

    2024年02月15日
    瀏覽(23)
  • 【Spring教程11】Spring框架實(shí)戰(zhàn):IOC/DI注解開(kāi)發(fā)管理第三方bean的全面深入詳解

    【Spring教程11】Spring框架實(shí)戰(zhàn):IOC/DI注解開(kāi)發(fā)管理第三方bean的全面深入詳解

    歡迎大家回到《 Java教程之Spring30天快速入門(mén)》,本教程所有示例均基于Maven實(shí)現(xiàn),如果您對(duì)Maven還很陌生,請(qǐng)移步本人的博文《 如何在windows11下安裝Maven并配置以及 IDEA配置Maven環(huán)境》,本文的上一篇為《 純注解開(kāi)發(fā)模式下的依賴注入和讀取properties配置文件》 前面定義bean的時(shí)

    2024年02月04日
    瀏覽(29)
  • 供應(yīng)鏈安全和第三方風(fēng)險(xiǎn)管理:討論如何應(yīng)對(duì)供應(yīng)鏈中的安全風(fēng)險(xiǎn),以及評(píng)估和管理第三方合作伙伴可能帶來(lái)的威脅

    供應(yīng)鏈安全和第三方風(fēng)險(xiǎn)管理:討論如何應(yīng)對(duì)供應(yīng)鏈中的安全風(fēng)險(xiǎn),以及評(píng)估和管理第三方合作伙伴可能帶來(lái)的威脅

    ? 在當(dāng)今數(shù)字化時(shí)代,供應(yīng)鏈的安全性越來(lái)越受到重視。企業(yè)的成功不僅僅依賴于產(chǎn)品和服務(wù)的質(zhì)量,還取決于供應(yīng)鏈中的安全性。然而,隨著供應(yīng)鏈越來(lái)越復(fù)雜,第三方合作伙伴的參與也帶來(lái)了一系列安全風(fēng)險(xiǎn)。本文將探討供應(yīng)鏈安全和第三方風(fēng)險(xiǎn)管理的關(guān)鍵問(wèn)題,并通過(guò)

    2024年02月12日
    瀏覽(30)
  • python使用第三方庫(kù)PyPDF2、PDFMiner或pdfplumber來(lái)解析PDF文件

    使用第三方庫(kù)PyPDF2、PDFMiner或pdfplumber來(lái)解析PDF文件可以實(shí)現(xiàn)PDF文件的內(nèi)容提取、搜索和修改等功能。下面是使用PDFMiner來(lái)解析PDF文件的安裝說(shuō)明和代碼示例: PDFMiner 下面是一些PDFMiner的常見(jiàn)操作: 1.安裝PDFMiner庫(kù):在Python環(huán)境中,可以使用pip命令安裝PDFMiner庫(kù)。 2.導(dǎo)入PDFMiner庫(kù)

    2024年02月09日
    瀏覽(28)
  • 138. 第三方系統(tǒng)或者工具通過(guò) HTTP 請(qǐng)求發(fā)送給 ABAP 系統(tǒng)的數(shù)據(jù),應(yīng)該如何解析

    138. 第三方系統(tǒng)或者工具通過(guò) HTTP 請(qǐng)求發(fā)送給 ABAP 系統(tǒng)的數(shù)據(jù),應(yīng)該如何解析

    本教程第 37 篇文章,我們介紹了如何在 SAP ABAP 系統(tǒng) SICF 事務(wù)碼 里,開(kāi)發(fā)一段 ABAP 代碼,用來(lái)響應(yīng)通過(guò)瀏覽器或者第三方工具,比如 curl,Postman 發(fā)起的 HTTP 請(qǐng)求。 31. 如何讓 ABAP 服務(wù)器能夠響應(yīng)通過(guò)瀏覽器發(fā)起的自定義 HTTP 請(qǐng)求 在實(shí)際的 ABAP 集成項(xiàng)目中,這種方式非常使用。

    2024年03月21日
    瀏覽(102)
  • 【196】JAVA8 用 DOM 方式的 API 解析XML文件,無(wú)需引入第三方依賴。

    JAVA8 可以使用標(biāo)準(zhǔn)的 DOM 方式的 API 來(lái)編寫(xiě)代碼解析 XML 文件,無(wú)需引入第三方依賴。下面是兩個(gè)測(cè)試用的 XML 文件: test.xml test2.xml 負(fù)責(zé)接收所有信息的 AllDataDTO.java 負(fù)責(zé)接收用戶信息的 AllDataUserDTO.java 處理 XML 文件的工具類(lèi),XmlUtils.java 用于測(cè)試效果的類(lèi) Main.java 輸出結(jié)果:

    2024年01月22日
    瀏覽(23)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包