OpenXml读写Excel实例代码

当我们需要处理Excel文件时,可以选择使用OpenXml SDK来读写Excel。本文将提供一份简单易懂的OpenXml读写Excel示例代码以及相应的解释。

前置条件

在运行以下代码之前,需要在项目中安装Open XML SDK包,也可以通过NuGet包管理器中,搜索“DocumentFormat.OpenXml”并安装。

示例代码

首先,我们需要引入命名空间:

using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Spreadsheet;
using System.Linq;

读取数据

public static List<List<string>> ReadExcelData(string filePath)
{
    List<List<string>> data = new List<List<string>>();
    using (SpreadsheetDocument spreadsheetDocument = SpreadsheetDocument.Open(filePath, false))
    {
        WorkbookPart workbookPart = spreadsheetDocument.WorkbookPart;
        IEnumerable<Sheet> sheets = workbookPart.Workbook.GetFirstChild<Sheets>().Elements<Sheet>();
        WorksheetPart worksheetPart = (WorksheetPart)workbookPart.GetPartById(sheets.First().Id);
        SheetData sheetData = worksheetPart.Worksheet.Elements<SheetData>().First();
        foreach (Row row in sheetData.Elements<Row>())
        {
            List<string> rowData = new List<string>();
            foreach (Cell cell in row.Elements<Cell>())
            {
                rowData.Add(GetCellValue(cell, workbookPart));
            }
            data.Add(rowData);
        }
    }
    return data;
}

private static string GetCellValue(Cell cell, WorkbookPart workbookPart)
{
    SharedStringTablePart sharedStringPart = workbookPart.GetPartsOfType<SharedStringTablePart>().FirstOrDefault();
    string cellValue;
    if (cell != null && cell.DataType != null && cell.DataType.Value == CellValues.SharedString)
    {
        cellValue = sharedStringPart.SharedStringTable.ElementAt(int.Parse(cell.InnerText)).InnerText;
    }
    else
    {
        cellValue = cell?.InnerText ?? string.Empty;
    }
    return cellValue;
}

以上代码用于读取Excel文件数据,并将其返回为一个包含多个列表的列表,每个内部列表代表一行数据的列表。

写入数据

public static void WriteExcelData(string filePath, List<List<string>> data)
{
    using (SpreadsheetDocument spreadsheetDocument = SpreadsheetDocument.Create(filePath, SpreadsheetDocumentType.Workbook))
    {
        WorkbookPart workbookPart = spreadsheetDocument.AddWorkbookPart();
        workbookPart.Workbook = new Workbook();
        Sheets sheets = workbookPart.Workbook.AppendChild(new Sheets());
        Sheet sheet = new Sheet() { Id = workbookPart.GetIdOfPart(workbookPart.AddNewPart<WorksheetPart>()), SheetId = 1, Name = "Sheet1" };
        sheets.Append(sheet);
        WorksheetPart worksheetPart = (WorksheetPart)workbookPart.GetPartById(sheet.Id);
        Worksheet worksheet = new Worksheet(new SheetData());
        worksheetPart.Worksheet = worksheet;
        SheetData sheetData = worksheet.GetFirstChild<SheetData>();
        foreach (List<string> rowData in data)
        {
            Row row = new Row();
            foreach (string cellData in rowData)
            {
                Cell cell = new Cell();
                cell.DataType = ResolveCellDataType(cellData);
                cell.CellValue = new CellValue(cellData);
                row.AppendChild(cell);
            }
            sheetData.AppendChild(row);
        }
        workbookPart.Workbook.Save();
    }
}

private static CellValues ResolveCellDataType(string data)
{
    double result;
    if (double.TryParse(data, out result))
    {
        return CellValues.Number;
    }
    else
    {
        return CellValues.String;
    }
}

以上代码用于将数据写入Excel文件中。可以看到,在这个函数中,我们创建一个新的工作簿,并将数据写入其中。

示例解释

对于读取Excel数据的操作,我们首先使用创建SpreadsheetDocument对象,传入文件路径以打开要处理的Excel文件。然后,我们获取WorkbookPart和SheetData。接下来,我们迭代所获取的行和单元格,并调用GetCellValue方法以获取每个单元格的值。最后,返回将数据打包成一个二维列表的方法。该返回列表的内部列表包含一行中的所有列数据。

对于写入Excel数据的操作,我们创建SpreadsheetDocument对象,并为要创建的工作表添加一个WorkbookPart。接下来,我们建立Sheet、Sheets和WorksheetPart,使得它们在工作部件中。然后,创建Worksheet,并创建工作表数据行和单元格。最后,将数据写入单元格中。

关于读取Excel数据和写入Excel数据,上述代码涵盖了最常用的操作。这可以为大家提供一个用于处理Excel数据的可读性较高的框架。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:OpenXml读写Excel实例代码 - Python技术站

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

相关文章

  • Mybatis多表查询与动态SQL特性详解

    Mybatis多表查询与动态SQL特性详解 介绍 Mybatis是一款使用Java编写的持久层框架,它可以帮助程序员将Java对象和数据库表之间传输数据映射成为一种简单的配置,同时还支持很多高级特性,例如动态SQL语句和多表查询。 在本篇文章中,我们将会详细讲解Mybatis多表查询与动态SQL特性的使用方法,帮助Mybatis初学者更好地理解和掌握该框架。…

    html 2023年5月30日
    00
  • JSP学习笔记之基础语法

    下面我将为您详细讲解 “JSP学习笔记之基础语法”的完整攻略。 一、概述 JSP(Java Server Pages)是一种基于 Java 技术,用于开发动态 Web 网页的服务器端脚本语言。它可以将 Java 代码嵌入到 HTML 页面中,实现 Web 页面的动态效果,使得页面可以根据用户的请求动态改变。JSP 技术是在传统 CGI(Common Gate…

    html 2023年5月30日
    00
  • HTML基本概念详解

    首先我来解释一下HTML的基本概念。 HTML是一种标记语言,用于描述网页的结构和内容。HTML文件由一系列HTML元素组成,每个元素都可以通过标记来定义,用于告诉浏览器如何呈现文本、图像等内容。常见的HTML标记可以分为两类,即块级元素和行内元素。块级元素通常用于布局整个页面的结构,例如<div>、<h1>到<h6>、&…

    html 2023年5月30日
    00
  • Linux 中unzip解压时中文乱码的解决办法

    当我们在Linux中解压zip文件时,经常会遇到中文文件名乱码的情况。下面是解决这个问题的完整攻略: 1. 安装unzip 首先,需要确保系统上已经安装了unzip。若未安装,则可运行以下命令进行安装: sudo apt-get install unzip 2. 解压zip文件 解压zip文件通常使用以下命令: unzip file.zip 但是,当zip文…

    html 2023年5月31日
    00
  • springboot 中文件上传下载实例代码

    关于“springboot 中文件上传下载实例代码”,我们可以从以下几个方面进行介绍和实例演示: 一、上传文件实例代码 1.1 添加依赖 在 pom.xml 文件中添加如下依赖: <dependency> <groupId>org.springframework.boot</groupId> <artifactId&…

    html 2023年5月31日
    00
  • finalshell怎么使用?finalshell安装使用图文教程

    以下是“finalshell怎么使用?finalshell安装使用图文教程”的完整攻略: finalshell怎么使用?finalshell安装使用图文教程 FinalShell是一款功能强大的SSH客户端,可以帮助用户连接到远程服务器并进行管理。下面是FinalShell的安装和使用教程。 FinalShell的安装 下载FinalShell:用户需要从F…

    html 2023年5月18日
    00
  • XML入门教程:CSS样式表-XML/XSLT

    XML入门教程:CSS样式表-XML/XSLT 简介 本教程介绍如何使用CSS样式表在XML/XSLT文档中添加样式。CSS(层叠样式表)是一种用于指定文档格式和布局的文件,它可以应用于Web文档、PDF文件、电子书等多种文档格式。 本教程将演示如何在XML文档中使用CSS样式表来定义元素样式、类样式和ID样式,并介绍如何在XSLT文档中将CSS样式表应用到…

    html 2023年5月30日
    00
  • Graphics2D 写图片中文乱码问题及解决

    Graphics2D 是 Java 中常用的绘图类,可以对图片进行各种绘制操作。但是,当我们在图片中添加中文字符时,往往会出现乱码的情况。下面是 Graphics2D 写图片中文乱码问题及解决的完整攻略。 问题解析 中文乱码问题通常是因为在绘图的过程中,字符编码格式不正确或字体不兼容所导致的。 解决方案 为了解决中文乱码问题,我们可以采取以下措施: 1. 设…

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