欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

介紹

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

為何使用 OpenXML

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

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

無(wú)依賴性:無(wú)需安裝 Microsoft Office。

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

先決條件

在深入研究代碼之前,請(qǐ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è)置項(xiàng)目

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

打開 Visual Studio 并創(chuàng)建一個(gè)新的控制臺(tái)應(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. 高效處理大文件

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

4. 優(yōu)化性能

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

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

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

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

下面是一個(gè)使用流式傳輸?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)大的解決方案。通過遵循本文概述的做法,您可以高效地處理存儲(chǔ)在 Excel 文件中的大型數(shù)據(jù)集,從而使您的應(yīng)用程序更高效、響應(yīng)更快。OpenXML 無(wú)需安裝 Office 即可操作 Office 文檔,這使其成為任何開發(fā)人員工具包中的重要工具。

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

相關(guān)文章

最新評(píng)論