亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

使用C#和OpenXML讀取大型Excel文件

 更新時間:2024年11月12日 10:45:03   作者:謝.鋒  
OpenXML 是辦公文檔(Word、Excel、PowerPoint)的開放標(biāo)準(zhǔn),允許以編程方式操作這些文檔,本文主要介紹了C#如何利用OpenXML讀取大型Excel文件,感興趣的可以了解下

介紹

高效讀取大型 Excel 文件可能具有挑戰(zhàn)性,尤其是在處理需要高性能和可擴(kuò)展性的應(yīng)用程序時。Microsoft 的 OpenXML SDK 提供了一套強(qiáng)大的工具來處理 Office 文檔(包括 Excel 文件),而無需在服務(wù)器上安裝 Excel。本文將指導(dǎo)您使用 C# 和 OpenXML 高效讀取大型 Excel 文件。

為何使用 OpenXML

OpenXML 是辦公文檔(Word、Excel、PowerPoint)的開放標(biāo)準(zhǔn),允許以編程方式操作這些文檔。使用 OpenXML 的一些好處包括:

性能:它直接對文件流進(jìn)行操作,而無需將整個文檔加載到內(nèi)存中。

無依賴性:無需安裝 Microsoft Office。

可擴(kuò)展性:非常適合服務(wù)器端應(yīng)用程序和批處理。

先決條件

在深入研究代碼之前,請確保您已具備以下內(nèi)容。

Visual Studio 或任何 C# IDE

.NET Framework 或 .NET Core SDK

OpenXML SDK:您可以使用命令通過 NuGet 安裝它。

Install-Package DocumentFormat.OpenXml

使用 OpenXML 讀取大型 Excel 文件

以下是使用 C# 和 OpenXML 讀取大型 Excel 文件的分步指南。

1. 設(shè)置項目

創(chuàng)建一個新的 C# 控制臺應(yīng)用程序。

打開 Visual Studio 并創(chuàng)建一個新的控制臺應(yīng)用程序(.NET Core 或 .NET Framework)。

通過 NuGet 安裝 OpenXML SDK。

2.打開 Excel 文件

首先,您需要打開 Excel 文件并訪問要讀取的工作表。使用以下代碼打開 Excel 文件。

using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Spreadsheet;
using System;
using System.Collections.Generic;

namespace ReadLargeExcelFile
{
    class Program
    {
        static void Main(string[] args)
        {
            string filePath = "path/to/your/large/excelfile.xlsx";
            using (SpreadsheetDocument doc = SpreadsheetDocument.Open(filePath, false))
            {
                WorkbookPart workbookPart = doc.WorkbookPart;
                Sheet sheet = workbookPart.Workbook.Sheets.GetFirstChild<Sheet>();
                WorksheetPart worksheetPart = (WorksheetPart)workbookPart.GetPartById(sheet.Id);

                IEnumerable<Row> rows = worksheetPart.Worksheet.GetFirstChild<SheetData>().Elements<Row>();

                foreach (Row row in rows)
                {
                    foreach (Cell cell in row.Elements<Cell>())
                    {
                        string cellValue = GetCellValue(doc, cell);
                        Console.Write(cellValue + " ");
                    }
                    Console.WriteLine();
                }
            }
        }

        private static string GetCellValue(SpreadsheetDocument doc, Cell cell)
        {
            SharedStringTablePart stringTablePart = doc.WorkbookPart.SharedStringTablePart;
            string value = cell.CellValue.InnerXml;

            if (cell.DataType != null && cell.DataType.Value == CellValues.SharedString)
            {
                return stringTablePart.SharedStringTable.ChildElements[Int32.Parse(value)].InnerText;
            }
            else
            {
                return value;
            }
        }
    }
}

3. 高效處理大文件

上述代碼將整個工作表讀入內(nèi)存,這對于非常大的文件來說可能效率不高。為了更有效地處理大文件,請考慮分塊處理文件或使用流式傳輸技術(shù)。

4. 優(yōu)化性能

為了優(yōu)化性能,您可以

流式傳輸文件:使用流式傳輸技術(shù)分部分處理文件,而不是將整個文件加載到內(nèi)存中。

并行處理:如果您的應(yīng)用程序允許,您可以并行處理文件的不同部分。

高效的數(shù)據(jù)結(jié)構(gòu):使用高效的數(shù)據(jù)結(jié)構(gòu)來存儲和處理數(shù)據(jù)。

下面是一個使用流式傳輸?shù)氖纠?/p>

using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Spreadsheet;
using System;
using System.Collections.Generic;

namespace ReadLargeExcelFile
{
    class Program
    {
        static void Main(string[] args)
        {
            string filePath = "path/to/your/large/excelfile.xlsx";
            using (SpreadsheetDocument doc = SpreadsheetDocument.Open(filePath, false))
            {
                WorkbookPart workbookPart = doc.WorkbookPart;
                Sheet sheet = workbookPart.Workbook.Sheets.GetFirstChild<Sheet>();
                WorksheetPart worksheetPart = (WorksheetPart)workbookPart.GetPartById(sheet.Id);

                OpenXmlReader reader = OpenXmlReader.Create(worksheetPart);
                while (reader.Read())
                {
                    if (reader.ElementType == typeof(Row))
                    {
                        Row row = (Row)reader.LoadCurrentElement();
                        foreach (Cell cell in row.Elements<Cell>())
                        {
                            string cellValue = GetCellValue(doc, cell);
                            Console.Write(cellValue + " ");
                        }
                        Console.WriteLine();
                    }
                }
            }
        }

        private static string GetCellValue(SpreadsheetDocument doc, Cell cell)
        {
            SharedStringTablePart stringTablePart = doc.WorkbookPart.SharedStringTablePart;
            string value = cell.CellValue.InnerXml;

            if (cell.DataType != null && cell.DataType.Value == CellValues.SharedString)
            {
                return stringTablePart.SharedStringTable.ChildElements[Int32.Parse(value)].InnerText;
            }
            else
            {
                return value;
            }
        }
    }
}

結(jié)論

使用 C# 和 OpenXML 讀取大型 Excel 文件為需要高性能和可擴(kuò)展性的應(yīng)用程序提供了強(qiáng)大的解決方案。通過遵循本文概述的做法,您可以高效地處理存儲在 Excel 文件中的大型數(shù)據(jù)集,從而使您的應(yīng)用程序更高效、響應(yīng)更快。OpenXML 無需安裝 Office 即可操作 Office 文檔,這使其成為任何開發(fā)人員工具包中的重要工具。

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

相關(guān)文章

  • C#網(wǎng)頁跳轉(zhuǎn)方法總結(jié)

    C#網(wǎng)頁跳轉(zhuǎn)方法總結(jié)

    這篇文章主要介紹了C#網(wǎng)頁跳轉(zhuǎn)方法總結(jié)的相關(guān)資料,需要的朋友可以參考下
    2015-12-12
  • C# 對MongoDB 進(jìn)行增刪改查的簡單操作實(shí)例

    C# 對MongoDB 進(jìn)行增刪改查的簡單操作實(shí)例

    這篇文章介紹了C# 對MongoDB 進(jìn)行增刪改查的簡單操作實(shí)例,有需要的朋友可以參考一下
    2013-09-09
  • C#使用Ado.net讀取Excel表的方法

    C#使用Ado.net讀取Excel表的方法

    這篇文章主要介紹了C#使用Ado.net讀取Excel表的方法,涉及C#使用OLEDB操作Excel的方法,需要的朋友可以參考下
    2015-04-04
  • c#唯一值渲染實(shí)例代碼

    c#唯一值渲染實(shí)例代碼

    這篇文章主要介紹了c#唯一值渲染實(shí)例代碼,有需要的朋友可以參考一下
    2013-12-12
  • C#預(yù)處理器指令詳解與示例

    C#預(yù)處理器指令詳解與示例

    在軟件開發(fā)中,我們常常需要編寫可移植和可配置的代碼,C#?預(yù)處理器指令為我們提供了這樣的能力,在本篇文章中,我們將詳細(xì)介紹C#預(yù)處理器指令的定義、語法格式、功能以及在實(shí)際編程中的應(yīng)用,需要的朋友可以參考下
    2024-04-04
  • c# 通過WinAPI播放PCM聲音

    c# 通過WinAPI播放PCM聲音

    這篇文章主要介紹了c# 通過WinAPI播放PCM聲音的方法,幫助大家更好的理解和使用c#編程語言,感興趣的朋友可以了解下
    2020-12-12
  • C#中使用反射遍歷一個對象屬性及值的小技巧

    C#中使用反射遍歷一個對象屬性及值的小技巧

    這篇文章主要介紹了C#中使用反射遍歷一個對象屬性及值的小技巧,這在很時候應(yīng)該都非常有用,本文直接給出實(shí)例代碼,需要的朋友可以參考下
    2015-07-07
  • .net實(shí)現(xiàn)序列化與反序列化實(shí)例解析

    .net實(shí)現(xiàn)序列化與反序列化實(shí)例解析

    這篇文章主要介紹了.net實(shí)現(xiàn)序列化與反序列化實(shí)例解析,需要的朋友可以參考下
    2014-08-08
  • C#開發(fā)中常用的加密解密方法匯總

    C#開發(fā)中常用的加密解密方法匯總

    這篇文章主要介紹了C#開發(fā)中常用的加密解密方法匯總,幫助大家更好的理解和使用c#,感興趣的朋友可以了解下
    2020-11-11
  • C#?SQLite庫使用技巧

    C#?SQLite庫使用技巧

    SQLite是一個開源、免費(fèi)的小型RDBMS(關(guān)系型數(shù)據(jù)庫),能獨(dú)立運(yùn)行、無服務(wù)器、零配置、支持事物,用C實(shí)現(xiàn),內(nèi)存占用較小,支持絕大數(shù)的SQL92標(biāo)準(zhǔn)。下面跟隨小編一起看下C#?SQLite庫使用
    2022-01-01

最新評論