C#利用Openxml读取Excel数据实例

C#利用OpenXML读取Excel数据实例

1. 什么是 OpenXML?

OpenXML是一个开放式、XML-based格式,用于表述和传输数据、文档和电子表格。该格式由Microsoft于2007年推出,其主要作用是为了实现对微软Office系列软件的扩展。OpenXML可以通过Microsoft Office 2007或更高版本创建和编辑,如Word、PowerPoint、Excel、Outlook等。

2. 为什么要使用 OpenXML?

使用 OpenXML 的主要原因是为了通过程序的方式操作和修改Microsoft Office系列文件。比如,现在很多企业都需要将Excel文件中的数据抽离出来,再进行各种统计和筛选。在此情景下,我们可以使用C#程序通过OpenXML来读取Excel文件中的数据,进而实现数据处理和分析。

3. 使用OpenXML读取Excel数据的步骤

  1. 添加OpenXML的引用

为了使用OpenXML,我们需要在项目中添加NuGet包,可以使用NuGet包管理工具或直接手动添加。使用 NuGet 安装时,我们只需要在包管理器控制台中输入以下代码即可安装:

PM> Install-Package DocumentFormat.OpenXml
  1. 创建读取流对象

在C#程序中,我们需要先获得一个实际数据的流对象。我们可以通过以下代码获得数据流:

using (var fs = new FileStream(fileInfo.FullName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
{
    using (var doc = SpreadsheetDocument.Open(fs, false))
    {
        var sheets = doc.WorkbookPart.Workbook.Sheets;

        foreach (var sheet in sheets)
        {
            var worksheet = (WorksheetPart)doc.WorkbookPart.GetPartById(sheet.Id);

            var rows = worksheet.Worksheet.GetFirstChild<SheetData>().Descendants<Row>();
            foreach (var row in rows)
            {
                //此处需要读取具体行数据并做相应处理
            }
        }
    }
}

需要注意的是,示例代码中的fileInfo是由传入参数得到的参数FileInfo对象,它是Excel文档的文件路径,即需要读取的Excel文件路径。

  1. 读取行数据

在获取Excel数据流后,我们需要读取数据流的每一行。具体代码如下:

var cellValueList = new List<string>();
foreach (var cell in row.Descendants<Cell>())
{
    var value = cell.InnerText;

    if (cell.DataType != null && cell.DataType == CellValues.SharedString)
    {
        value = doc.WorkbookPart.SharedStringTablePart.SharedStringTable.ChildElements[int.Parse(value)].InnerText;
    }

    cellValueList.Add(value);
}

在该示例代码中,我们遍历了每一行中的每一个单元格。对于每个单元格,我们读取了它的InnerText并获取它的数据类型,若单元格数据类型为SharedString则根据ChildElements[index]获取真正的值。

4. 示例说明

下面,我们通过两个数据集来说明如何使用OpenXML读取Excel数据并进行数据处理:

示例1:读取一般数据集

在这个示例中,我们将读取一个Excel文件,该文件包含三列数据,分别是姓名、年龄和职业。首先我们找到Excel文件所在的路径,通过以下代码获取数据流:

var fileInfo = new FileInfo(@"D:\samples\example1.xlsx");
using (var fs = new FileStream(fileInfo.FullName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
{
    using (var doc = SpreadsheetDocument.Open(fs, false))
    {
        var sheets = doc.WorkbookPart.Workbook.Sheets;

        foreach (var sheet in sheets)
        {
            var worksheet = (WorksheetPart)doc.WorkbookPart.GetPartById(sheet.Id);
            Console.WriteLine($"Sheet Name:{sheet.Name}");

            var rows = worksheet.Worksheet.GetFirstChild<SheetData>().Descendants<Row>();

            foreach (var row in rows)
            {
                var cellValueList = new List<string>();

                foreach (var cell in row.Descendants<Cell>())
                {
                    var value = cell.InnerText;

                    if (cell.DataType != null && cell.DataType == CellValues.SharedString)
                    {
                        value = doc.WorkbookPart.SharedStringTablePart.SharedStringTable.ChildElements[int.Parse(value)].InnerText;
                    }

                    cellValueList.Add(value);
                }

                Console.WriteLine($"{cellValueList[0]} {cellValueList[1]} {cellValueList[2]}");
            }
        }
    }
}

当我们执行该程序后,便会输出读取到的数据:

Sheet Name:Sheet1
姓名 年龄 职业
张三 25 技术部
李四 24 人事部
王五 23 财务部

示例2:读取数据表头与数据内容

在这个示例中,我们将读取一个Excel文件,该文件的第一行是数据表头,之后的每一行是数据内容。我们将分别读取表头和数据内容,并进行处理。代码如下:

var fileInfo = new FileInfo(@"D:\samples\example2.xlsx");
using (var fs = new FileStream(fileInfo.FullName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
{
    using (var doc = SpreadsheetDocument.Open(fs, false))
    {
        var sheets = doc.WorkbookPart.Workbook.Sheets;

        foreach (var sheet in sheets)
        {
            var worksheet = (WorksheetPart)doc.WorkbookPart.GetPartById(sheet.Id);
            Console.WriteLine($"Sheet Name:{sheet.Name}");

            var rows = worksheet.Worksheet.GetFirstChild<SheetData>().Descendants<Row>();
            var fieldNames = new List<string>();
            var fieldList = new List<List<string>>();

            foreach (var row in rows)
            {
                var cellValueList = new List<string>();
                foreach (var cell in row.Descendants<Cell>())
                {
                    var value = cell.InnerText;

                    if (cell.DataType != null && cell.DataType == CellValues.SharedString)
                    {
                        value = doc.WorkbookPart.SharedStringTablePart.SharedStringTable.ChildElements[int.Parse(value)].InnerText;
                    }

                    cellValueList.Add(value);
                }

                if (row.RowIndex == 1)
                {
                    fieldNames = cellValueList;
                }
                else
                {
                    fieldList.Add(cellValueList);
                }
            }

            Console.WriteLine("Field Names:");
            Console.WriteLine(string.Join(",", fieldNames));
            Console.WriteLine("Data:");
            foreach (var fieldRow in fieldList)
            {
                Console.WriteLine(string.Join(",", fieldRow));
            }
        }
    }
}

当我们执行该程序后,便会输出读取到的数据:

Sheet Name:Sheet1
Field Names:
Name,Age,Department
Data:
Allen,30,Sales
Emma,25,IT
Mike,27,HR

这里通过读取表头和数据内容分别存储在不同的List变量中,我们可以更方便地去获取需要的数据信息。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#利用Openxml读取Excel数据实例 - Python技术站

(0)
上一篇 2023年5月30日
下一篇 2023年5月30日

相关文章

  • java中使用xls格式化xml的实例

    下面我将为您详细讲解Java中使用xls格式化XML的实例攻略。 简介 在Java中,我们通常使用第三方库库来生成XML文件,比如DOM、SAX等。但是,有时我们需要生成规范的XML文件格式,这时就需要使用XLS格式化XML文件。XLS是一种基于XML的标记语言,它使用XML格式定义了生成规范的XML文件的规则。 使用xls格式化xml的步骤 使用xls格式…

    html 2023年5月30日
    00
  • python批量修改xml属性的实现方式

    针对“Python批量修改XML属性的实现方式”的问题,我们可以按照以下步骤来实现: 1. 解析XML文件 首先,我们需要使用Python内置库xml.etree.ElementTree来加载待处理的XML文件,并将其解析为一个树形结构,这样我们才能更方便地操作其中的元素和属性。 示例代码如下: import xml.etree.ElementTree as…

    html 2023年5月30日
    00
  • 手机误删除照片如何恢复 使用Recuva恢复手机内误删除照片教程

    手机误删除照片如何恢复?使用Recuva恢复手机内误删除照片教程 当您误删除手机内的照片时,您可以使用Recuva等数据恢复软件来恢复这些照片。以下是关于如何使用Recuva恢复手机内误删除照片的攻略,包括以下几个步骤: 步骤1:下载并安装Recuva 在使用Recuva恢复手机内误删除照片之前,您需要下载并安装Recuva。以下是下载并安装Recuva的步…

    html 2023年5月17日
    00
  • Asp+Rss阅读器制作第2/2页

    针对“Asp+Rss阅读器制作第2/2页”的完整攻略,我整理了以下步骤: 第一步:搭建本地Web服务器 在本地电脑上搭建Web服务器,可以使用IIS或者Tomcat。在搭建完成后,将网站服务器的根目录设置为静态站点。在本地服务器上创建rss.xml文件,用于存放RSS源数据。同时,设置ASP页面页面,用于生成动态内容并且接收与查询数据的页面。 第二步:编写A…

    html 2023年5月30日
    00
  • Java中四种XML解析技术

    Java中常用的四种XML解析技术包括DOM、SAX、JDOM和DOM4J。每种技术都有自己的特点和适用场景。下面分别进行详细讲解: DOM DOM(Document Object Model)是一种W3C推荐的XML解析技术,能够将整个XML文档加载到内存中,并以树形结构的形式表示XML文档的各个元素节点,因此能够轻松进行对XML文档的读写操作。 DOM解…

    html 2023年5月30日
    00
  • JAVA DOM解析XML文件过程详解

    JAVA DOM解析XML文件过程详解 什么是DOM解析? DOM(Document Object Model)文档对象模型,是一种处理XML和HTML文档的标准编程接口,它将整个文档结构解析为一个树形结构,通过调用树中的节点来操作文档中的数据。 在Java语言中,我们可以通过使用Java自带的JAXP(Java API for XML Processing…

    html 2023年5月30日
    00
  • 新手如何做短视频?新手入门短视频教程分享

    以下是“新手如何做短视频?新手入门短视频教程分享”的完整攻略: 新手如何做短视频?新手入门短视频教程分享 短视频已经成为了一种流行的社交媒体形式,越来越多的人开始尝试制作自己的短视频。如果你也想尝试制作短视频,可以按照以下步骤进行操作。 步骤1:选择合适的短视频制作工具 用户需要选择一款合适的短视频制作工具,如抖音、快手、小影等。不同的工具有不同的特点和功能…

    html 2023年5月18日
    00
  • 简单了解JavaScript操作XPath的一些基本方法

    下面是详细讲解“简单了解JavaScript操作XPath的一些基本方法”的完整攻略。 什么是XPath? XPath是一种用于在XML文档中查找信息的语言。它的全称是XML Path Language。XPath使用路径表达式来选取XML文档中的节点或节点集,并提供了很多内置函数来处理这些节点。 XPath的基本语法 XPath的基本语法由以下三个部分组成…

    html 2023年5月30日
    00
合作推广
合作推广
分享本页
返回顶部