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

C#使用ClosedXML進(jìn)行讀寫excel操作

 更新時(shí)間:2025年05月21日 10:17:54   作者:MartinYangHJ  
ClosedXML是.NET平臺(tái)上的一款開(kāi)源庫(kù),它使得程序員能夠方便地創(chuàng)建、讀取和修改Excel文件,下面就跟隨小編一起詳細(xì)一下具體的使用方法吧

項(xiàng)目簡(jiǎn)介

ClosedXML是.NET平臺(tái)上的一款開(kāi)源庫(kù),它使得程序員能夠方便地創(chuàng)建、讀取和修改Excel文件(.xlsx格式)。無(wú)需直接與Microsoft Office Interop進(jìn)行交互, ClosedXML提供了一種輕量級(jí)且高性能的方式來(lái)處理Excel數(shù)據(jù),兼容.NET Framework及.NET Core。

技術(shù)分析

易用性:ClosedXML提供了清晰、直觀的API,使得創(chuàng)建表格、設(shè)置樣式、插入公式等操作變得簡(jiǎn)單。例如,只需幾行代碼就能創(chuàng)建一個(gè)新的工作簿并填充數(shù)據(jù):

using (var workbook = new XLWorkbook())
{
    var worksheet = workbook.Worksheets.Add("Sample Sheet");
    worksheet.Cell("A1").Value = "Hello";
    worksheet.Cell("B1").Value = "World";
    workbook.SaveAs("HelloWorld.xlsx");
}

性能優(yōu)化:ClosedXML通過(guò)內(nèi)存映射文件和延遲計(jì)算策略提高了性能,這意味著直到需要時(shí)才會(huì)計(jì)算或?qū)懭霐?shù)據(jù),減少了不必要的資源消耗。

功能全面:ClosedXML支持處理復(fù)雜的Excel功能,如圖表、數(shù)據(jù)驗(yàn)證、條件格式化、超鏈接等。此外,還支持讀取和寫入數(shù)據(jù)表以及處理大型數(shù)據(jù)集。

版本兼容性:該庫(kù)已適配.NET Framework 4.0+ 和 .NET Core,確保了跨平臺(tái)的兼容性和未來(lái)發(fā)展的潛力。

社區(qū)活躍:ClosedXML有一個(gè)活躍的開(kāi)發(fā)團(tuán)隊(duì)和社區(qū),不斷修復(fù)bug、添加新功能,并對(duì)用戶反饋?zhàn)鞒龇e極回應(yīng)。

應(yīng)用場(chǎng)景

數(shù)據(jù)報(bào)表生成:快速將數(shù)據(jù)庫(kù)數(shù)據(jù)導(dǎo)出到Excel,生成自定義模板的報(bào)表。

文件解析:用于讀取現(xiàn)有的Excel文件,提取其中的數(shù)據(jù)進(jìn)行分析或?qū)氲狡渌到y(tǒng)。

前端下載功能:配合Web應(yīng)用,允許用戶下載自定義的Excel文件。

特點(diǎn)

簡(jiǎn)潔API:使代碼更易于編寫和理解。

強(qiáng)大性能:避免了對(duì)Office Interop的依賴,提高了運(yùn)行速度和內(nèi)存效率。

完整性:覆蓋了大部分Excel的功能特性。

可擴(kuò)展性:允許自定義樣式和行為以滿足特定需求。

跨平臺(tái)支持:可以在Windows、Linux和macOS上運(yùn)行。

C#使用ClosedXML讀寫excel

首先使用NuGet安裝ClosedXML,然后在程序中添加引用ClosedXML.Excel;

1.導(dǎo)出數(shù)據(jù)到Excel

public void ExportToExcel(DataTable dt)
{
   using (var workbook = new XLWorkbook())
   {
        if (dt.TableName == "") dt.TableName = "sheet1";
        var worksheet = workbook.Worksheets.Add(dt.TableName);
        var header = worksheet.FirstRow();
        for (int i = 0; i < dt.Columns.Count; ++i)
        {
            worksheet.Cell(1, i + 1).Value = dt.Columns[i].ColumnName;
            worksheet.Cell(1, i + 1).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center;
            worksheet.Cell(1, i + 1).Style.Alignment.Vertical = XLAlignmentVerticalValues.Center;
        }
        for (int i = 0; i < dt.Rows.Count; ++i)
        {
            for (int j = 0; j < dt.Columns.Count; ++j)
            {
                worksheet.Cell(i + 2, j + 1).Value = dt.Rows[i][j].ToString();
                worksheet.Cell(i + 2, j + 1).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center;
                worksheet.Cell(i + 2, j + 1).Style.Alignment.Vertical = XLAlignmentVerticalValues.Center;
             }
         }
         workbook.SaveAs(sfd.FileName);
     }         
}

2.從Excel讀取數(shù)據(jù)

public DataTable ImportExcelToDataTable(string filepath)
{
   DataTable dt = new DataTable();
   DataColumn dataColumn=new DataColumn("columnName1");
   dt.Columns.Add(dataColumn);
   dataColumn=new DataColumn("columnName2");
   dt.Columns.Add(dataColumn);
   dataColumn=new DataColumn("columnName3");
   dt.Columns.Add(dataColumn);
   dataColumn=new DataColumn("columnName4");
   dt.Columns.Add(dataColumn);
   using (XLWorkbook workBook = new XLWorkbook(filepath))
   {
       IXLWorksheet workSheet = workBook.Worksheet(1);                  
       bool isFirstRow = true;
       foreach (var row in workSheet.Rows())
       {
           if (isFirstRow)
           { 
                isFirstRow = false;
                continue;
           }
           else
           {
                dt.Rows.Add();
                int i = 0;
                foreach (IXLCell cell in row.Cells())
                {
                     if(i>dt.Columns.Count-1)
                     {
                        break;
                     }
                     dt.Rows[dt.Rows.Count - 1][i] = cell.Value.ToString();
                     i++;
                }
            }
         }
   }
   return dt;
}

3.讀取內(nèi)容映射到DataTable

using ClosedXML.Excel;
using DocumentFormat.OpenXml.Office2010.ExcelAc;
using DocumentFormat.OpenXml.Spreadsheet;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
 
public class ExcelReader
{
    /// <summary>
    /// 讀取 Excel 文件內(nèi)容并返回包含多個(gè)工作表的 Dictionary 列表
    /// </summary>
    /// <param name="excelFilePath">Excel 文件路徑</param>
    /// <param name="sheetNames">需要讀取的工作表名稱列表</param>
    /// <returns>工作表:工作表數(shù)據(jù)</returns>
    public Dictionary<string, DataTable> ReadExcel(string excelFilePath, List<string> sheetNames)
    {
        Dictionary<string, DataTable> result = new Dictionary<string, DataTable>();
 
        try
        {
            using (var workbook = new XLWorkbook(excelFilePath))
            {
                // 遍歷所有需要讀取的工作表
                foreach (var sheetName in sheetNames)
                {
                    // 判斷工作表是否存在
                    if (workbook.Worksheets.Contains(sheetName))
                    {
                        var worksheet = workbook.Worksheet(sheetName);
                        DataTable dataTable = ConvertWorksheetToDataTable(worksheet);
                        result.Add(sheetName, dataTable);
                    }
                    else
                    {
                        Console.WriteLine($"工作表 {sheetName} 不存在!");
                    }
                }
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine($"讀取 Excel 文件時(shí)發(fā)生錯(cuò)誤: {ex.Message}");
        }
 
        return result;
    }
 
    /// <summary>
    /// 將工作表轉(zhuǎn)換為 DataTable
    /// </summary>
    /// <param name="worksheet">工作表</param>
    /// <returns>轉(zhuǎn)換后的 DataTable</returns>
    private DataTable ConvertWorksheetToDataTable(IXLWorksheet worksheet)
    {
        DataTable dataTable = new DataTable();
        bool isHeaderRow = true;
 
        // 遍歷工作表的每一行
        foreach (var row in worksheet.Rows())
        {
            if (isHeaderRow)
            {
                // 第一個(gè)非空單元格是列頭
                foreach (var cell in row.Cells())
                {
                    dataTable.Columns.Add(cell.Value.ToString());
                }
                isHeaderRow = false;
            }
            else
            {
                // 每一行對(duì)應(yīng) DataTable 的一行
                DataRow dataRow = dataTable.NewRow();
                int columnIndex = 0;
 
                foreach (var cell in row.Cells())
                {
                    dataRow[columnIndex] = cell.Value.ToString();
                    columnIndex++;
                }
 
                dataTable.Rows.Add(dataRow);
            }
        }
 
        return dataTable;
    }
}
 
public class Program
{
    public static void Main()
    {
        string excelFilePath = @"C:\Users\Mike\Desktop\Demo.xlsx";
        List<string> sheetNames = new List<string> { "導(dǎo)入", "導(dǎo)入2" };
 
        ExcelReader excelReader = new ExcelReader();
        var result = excelReader.ReadExcel(excelFilePath, sheetNames);
        foreach (var item in result)
        {
            Console.WriteLine($"工作表:{item.Key}");
            var dt = item.Value;
            foreach (DataRow row in dt.Rows)
            {
                //打印該行的第一列、第二列、第三列的內(nèi)容
                Console.WriteLine($"{row[0]}_{row[1]}_{row[2]}");
            }
            Console.WriteLine();
        }
    }
}

4.讀取Sheet名稱列表

class Program
{
    static void Main()
    {
        string filePath = "C:\\Users\\XCKJ\\Desktop\\導(dǎo)入.xlsx"; // 請(qǐng)?zhí)鎿Q為你文件的路徑
        var list = GetSheetNameList(filePath);// 獲取所有工作表(sheet)名稱
    }
 
    private static List<string> GetSheetNameList(string filePath)
    {
        // 打開(kāi) Excel 文件
        using (var workbook = new XLWorkbook(filePath))
        {
            // 獲取所有工作表(sheet)名稱
            List<string> sheetNames = new List<string>();
            foreach (var worksheet in workbook.Worksheets)
            {
                sheetNames.Add(worksheet.Name);
            }
            return sheetNames;
        }
    }
}

到此這篇關(guān)于C#使用ClosedXML進(jìn)行讀寫excel操作的文章就介紹到這了,更多相關(guān)C# ClosedXML讀寫excel內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C#中方括號(hào)[]的語(yǔ)法及作用介紹

    C#中方括號(hào)[]的語(yǔ)法及作用介紹

    C#中方括號(hào)[]可用于數(shù)組,索引、屬性,更重要的是用于外部DLL類庫(kù)的引用。
    2013-04-04
  • 深入c# Func委托的詳解

    深入c# Func委托的詳解

    本篇文章是對(duì)c#中的Func委托進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-06-06
  • C#基礎(chǔ)之委托詳解(Delegate)

    C#基礎(chǔ)之委托詳解(Delegate)

    這篇文章主要介紹了C#基礎(chǔ)之委托(Delegate),具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-03-03
  • C#使用WinRar命令進(jìn)行壓縮和解壓縮操作的實(shí)現(xiàn)方法

    C#使用WinRar命令進(jìn)行壓縮和解壓縮操作的實(shí)現(xiàn)方法

    這篇文章主要介紹了C#使用WinRar命令進(jìn)行壓縮和解壓縮操作的實(shí)現(xiàn)方法,涉及C#基于Process類操作WinRar命令的相關(guān)實(shí)現(xiàn)技巧,代碼簡(jiǎn)潔實(shí)用,需要的朋友可以參考下
    2016-06-06
  • C#中實(shí)現(xiàn)HTTP請(qǐng)求通訊的操作指南

    C#中實(shí)現(xiàn)HTTP請(qǐng)求通訊的操作指南

    在現(xiàn)代軟件開(kāi)發(fā)中,HTTP 協(xié)議是應(yīng)用程序與外部服務(wù)交互的核心橋梁,C# 作為 .NET 生態(tài)的主力語(yǔ)言,提供了豐富而成熟的 HTTP 通訊能力,本文將系統(tǒng)介紹 C# 中實(shí)現(xiàn) HTTP 請(qǐng)求的技術(shù)選型、核心概念、常見(jiàn)場(chǎng)景及最佳實(shí)踐,需要的朋友可以參考下
    2026-05-05
  • C# 泛型集合的自定義類型排序的實(shí)現(xiàn)

    C# 泛型集合的自定義類型排序的實(shí)現(xiàn)

    這篇文章主要介紹了C# 泛型集合的自定義類型排序的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • C#字符串?dāng)?shù)組轉(zhuǎn)換為整形數(shù)組的方法

    C#字符串?dāng)?shù)組轉(zhuǎn)換為整形數(shù)組的方法

    這篇文章主要介紹了C#字符串?dāng)?shù)組轉(zhuǎn)換為整形數(shù)組的方法,涉及C#數(shù)組遍歷與轉(zhuǎn)換的相關(guān)技巧,需要的朋友可以參考下
    2015-06-06
  • C#實(shí)現(xiàn)數(shù)據(jù)導(dǎo)出任一Word圖表的通用呈現(xiàn)方法

    C#實(shí)現(xiàn)數(shù)據(jù)導(dǎo)出任一Word圖表的通用呈現(xiàn)方法

    應(yīng)人才測(cè)評(píng)產(chǎn)品的需求,導(dǎo)出測(cè)評(píng)報(bào)告是其中一個(gè)重要的環(huán)節(jié),報(bào)告的文件類型也多種多樣,其中WORD輸出也扮演了一個(gè)重要的角色,本文給大家介紹了C#實(shí)現(xiàn)數(shù)據(jù)導(dǎo)出任一Word圖表的通用呈現(xiàn)方法及一些體會(huì),需要的朋友可以參考下
    2023-10-10
  • C#使用XML文件的操作詳解及示例

    C#使用XML文件的操作詳解及示例

    XML是 Extensible Markup Language 的簡(jiǎn)稱,用于存儲(chǔ)和傳輸數(shù)據(jù)的可擴(kuò)展標(biāo)記語(yǔ)言,它被應(yīng)用在數(shù)據(jù)交換、數(shù)據(jù)存儲(chǔ)、Web服務(wù)、網(wǎng)絡(luò)協(xié)議等場(chǎng)景,本文給大家介紹了C#使用XML文件的操作詳解及示例,需要的朋友可以參考下
    2024-10-10
  • c# 適配器模式

    c# 適配器模式

    適配器模式:將一個(gè)類的接口轉(zhuǎn)換成客戶希望的另一個(gè)接口,Adapter使原本由于接口不兼容而不能一起工作的那些類可以一起工作
    2012-10-10

最新評(píng)論

罗甸县| 同江市| 北安市| 中方县| 宁城县| 庆安县| 镶黄旗| 渭源县| 盐亭县| 新巴尔虎左旗| 黔西县| 新龙县| 醴陵市| 崇明县| 彩票| 漠河县| 英德市| 铜川市| 奉化市| 阳朔县| 昔阳县| 龙井市| 百色市| 德江县| 来凤县| 龙南县| 日喀则市| 江达县| 册亨县| 偃师市| 广昌县| 绵阳市| 湘潭市| 罗山县| 吴江市| 东海县| 荆州市| 金堂县| 长泰县| 正定县| 五华县|