最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#使用NPOI進(jìn)行Excel和Word文件處理

 更新時間:2024年03月19日 09:33:25   作者:承蒙_關(guān)照  
NPOI是一個基于.NET的API,用于讀寫微軟的OLE?2?Compound?Document?formats,如Microsoft?Office?Excel和Word,下面就跟隨小編一起來看看它的具體操作吧

一、引言

在.NET開發(fā)中,操作Office文檔(特別是Excel和Word)是一項常見的需求。然而,在服務(wù)器端或無Microsoft Office環(huán)境的場景下,直接使用Office Interop可能會面臨挑戰(zhàn)。為了解決這個問題,開源庫NPOI應(yīng)運(yùn)而生,它提供了無需安裝Office即可創(chuàng)建、讀取和修改Excel (.xls, .xlsx) 和 Word (.doc) 文件的能力。

二、NPOI簡介

NPOI是一個基于.NET的API,用于讀寫微軟的OLE 2 Compound Document formats,如Microsoft Office Excel和Word。它是Apache POI項目的.NET移植版本,允許開發(fā)者在沒有安裝Office的情況下處理這些格式的文件。

三、主要組件與方法

1. 安裝與引用

Install-Package NPOI

或者在Visual Studio中右鍵項目 -> 管理NuGet程序包 -> 搜索并安裝NPOI。

2. 引用命名空間

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

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

創(chuàng)建一個新的Excel工作簿(.xlsx):

var workbook = new XSSFWorkbook();

打開一個現(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. 寫入單元格數(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)建樣式對象:

var style = workbook.CreateCellStyle();

設(shè)置樣式屬性(如字體、顏色、對齊方式等):

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();

四、高級功能

  • 讀取現(xiàn)有文件:通過FileStream打開并讀取Excel文件內(nèi)容。
  • 讀取公式結(jié)果:通過ICell.CachedFormulaResultType或ICell.CellFormula屬性獲取公式計算結(jié)果。
  • 操作圖表和圖片:NPOI支持插入、更新和刪除Excel中的圖表和圖片。
  • 處理Word文檔:通過XWPFDocument類來創(chuàng)建、讀取和修改Word(.doc)文件。

五、總結(jié)

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

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

using NPOI.HSSF.UserModel;
using NPOI.SS.UserModel;
using System.IO;
  public void ReadExcelFile(string filePath)
    {
        // 創(chuàng)建一個FileStream對象來打開Excel文件
        using (FileStream file = new FileStream(filePath, FileMode.Open, FileAccess.Read))
        {
            // 根據(jù)文件擴(kuò)展名選擇合適的Workbook實現(xiàn)
            IWorkbook workbook;
            if (Path.GetExtension(filePath).ToLower() == ".xlsx")
            {
                workbook = new XSSFWorkbook(file);
            }
            else
            {
                workbook = new HSSFWorkbook(file); // 適用于.xls文件
            }
 
            // 獲取第一個工作表(索引從0開始)
            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ù)類型和值
                        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:
                                    // 如果需要顯示公式計算結(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}");
                                    }
                                    // 其他類型的公式處理...
                                    break;
                                default:
                                    // 對于日期、布爾值等其他類型,做相應(yīng)處理
                                    break;
                            }
                        }
                        else
                        {
                            Console.WriteLine($"第{rowIndex + 1}行,第{cellIndex + 1}列:空單元格");
                        }
                    }
                }
            }
 
            // 關(guān)閉workbook以釋放資源
            workbook.Close();
        }
    }

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

請確保已安裝NPOI NuGet包并在項目中引用了必要的命名空間。

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

using NPOI.HSSF.UserModel;
using NPOI.SS.UserModel;
using System.IO;
 public void SaveDataToExcel(string filePath)
    {
        // 創(chuàng)建一個新的HSSFWorkbook(適用于.xls格式)或XSSFWorkbook(適用于.xlsx格式)
        IWorkbook workbook = new XSSFWorkbook(); // 使用.xlsx格式
 
        // 創(chuàng)建新的工作表并設(shè)置名稱
        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();
    }

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

請注意,根據(jù)實際需求選擇創(chuàng)建HSSFWorkbook或XSSFWorkbook,以及調(diào)整保存的數(shù)據(jù)和樣式。確保已安裝NPOI NuGet包并在項目中引用了必要的命名空間。

到此這篇關(guān)于C#使用NPOI進(jìn)行Excel和Word文件處理的文章就介紹到這了,更多相關(guān)C# NPOI處理文件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C#數(shù)值轉(zhuǎn)換-顯式數(shù)值轉(zhuǎn)換表(參考)

    C#數(shù)值轉(zhuǎn)換-顯式數(shù)值轉(zhuǎn)換表(參考)

    就是在將一種類型轉(zhuǎn)換成另外一種類型時,需要額外的代碼來完成這種轉(zhuǎn)換。
    2013-04-04
  • C#使用Socket發(fā)送和接收TCP數(shù)據(jù)實例

    C#使用Socket發(fā)送和接收TCP數(shù)據(jù)實例

    這篇文章主要介紹了C#使用Socket發(fā)送和接收TCP數(shù)據(jù)的實現(xiàn)方法,以實例的形式詳細(xì)講述了C#實現(xiàn)socket通信的完整實現(xiàn)過程,非常具有實用價值,需要的朋友可以參考下
    2014-10-10
  • WPF使用Dragablz構(gòu)建可拖拽分離的Tab頁程序

    WPF使用Dragablz構(gòu)建可拖拽分離的Tab頁程序

    這篇文章介紹了WPF使用Dragablz構(gòu)建可拖拽分離Tab頁的方法,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • C#實現(xiàn)對Word文檔頁面進(jìn)行自動化添加、插入和刪除操作

    C#實現(xiàn)對Word文檔頁面進(jìn)行自動化添加、插入和刪除操作

    在日常開發(fā)和工作中,你是否曾被Word文檔的頁面管理所困擾?批量合并報告、動態(tài)生成合同、根據(jù)條件拆分文檔,這些需求如果手動操作,不僅耗時耗力,還極易出錯,本文介紹了如何通過強(qiáng)大的C#編程實現(xiàn)對Word文檔的頁面進(jìn)行自動化添加、插入和刪除操作,需要的朋友可以參考下
    2026-01-01
  • C#實現(xiàn)折半查找算法

    C#實現(xiàn)折半查找算法

    這篇文章介紹了C#實現(xiàn)折半查找的算法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-08-08
  • unity通過Mesh網(wǎng)格繪制圖形球體

    unity通過Mesh網(wǎng)格繪制圖形球體

    這篇文章主要為大家詳細(xì)介紹了unity通過Mesh網(wǎng)格繪制圖形球體,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • C#窗口實現(xiàn)定時關(guān)機(jī)系統(tǒng)

    C#窗口實現(xiàn)定時關(guān)機(jī)系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C#窗口實現(xiàn)定時關(guān)機(jī)系統(tǒng),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-07-07
  • C#實現(xiàn)三元組的使用示例

    C#實現(xiàn)三元組的使用示例

    本文介紹了C#中的三元組數(shù)據(jù)結(jié)構(gòu),以及如何使用三元組在C#中進(jìn)行一些特定的計算,具有一定的參考價值,感興趣的可以了解一下
    2023-11-11
  • C#以流方式讀socket超時設(shè)置的實例

    C#以流方式讀socket超時設(shè)置的實例

    這篇文章主要為大家詳細(xì)介紹了C#以流方式讀socket超時設(shè)置的實例,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • C#線程開發(fā)之System.Thread類詳解

    C#線程開發(fā)之System.Thread類詳解

    本文詳細(xì)講解了C#線程開發(fā)之System.Thread類,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-05-05

最新評論

泰兴市| 得荣县| 井陉县| 会同县| 海淀区| 阳泉市| 吴江市| 黄石市| 宿松县| 浮梁县| 汾阳市| 关岭| 台中市| 绿春县| 牟定县| 衡阳县| 金寨县| 丰原市| 禹州市| 诏安县| 海城市| 弥勒县| 民县| 沙河市| 嘉峪关市| 洪雅县| 淮滨县| 女性| 恩平市| 卓资县| 易门县| 江门市| 靖州| 靖安县| 水富县| 尚志市| 绥阳县| 讷河市| 常德市| 阿图什市| 东源县|