OpenXml读写Excel实例代码

yizhihongxing

当我们需要处理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日

相关文章

  • CentOS7.3怎么安装?使用DVD ISO镜像安装CentOS7.3的方法

    以下是使用DVD ISO镜像安装CentOS 7.3的方法: 下载CentOS 7.3 ISO镜像:首先,您需要从CentOS官网下载CentOS 7.3 ISO镜像。您可以选择下载DVD ISO镜像或Minimal ISO镜像。在本教程中,我们将使用DVD ISO镜像进行安装。 制作CentOS 7.3安装盘:在下载完CentOS 7.3 ISO镜像后,您…

    html 2023年5月17日
    00
  • 怎么去检查自己网站优化做的怎么样?

    以下是“怎么去检查自己网站优化做的怎么样?”的完整攻略: 怎么去检查自己网站优化做的怎么样? 网站优化是提高网站排名和流量的重要手段,但如何检查自己网站优化做的怎么样呢?下面是检查自己网站优化的攻略。 使用SEO工具 使用SEO工具是检查自己网站优化的重要手段之一。SEO工具可以帮助用户分析网站的关键词排名、流量、页面质量等指标,从而了解网站的优化情况。常用…

    html 2023年5月18日
    00
  • C#通过XML节点属性/属性值读取写入XML操作代码实例

    下面我将为您详细讲解”C#通过XML节点属性/属性值读取写入XML操作代码实例”的完整攻略。 什么是XML XML是一种标记语言,用于描述数据的结构和内容。它是一种元素,属性和文本的组合。XML文档由一个根元素开始,并具有唯一结束标记。XML是可扩展的,可用于存储和传输任何类型的数据。 读取XML节点属性/属性值 读取XML节点属性/属性值是通过使用C#的X…

    html 2023年5月30日
    00
  • 简单了解Thymeleaf语法 数据延迟加载使用实例

    Thymeleaf是一个用于Web和独立环境的现代服务器端Java模板引擎,具有可维护性强、可读性高等优点。本文将为大家详细讲解Thymeleaf语法和数据延迟加载的使用实例。 Thymeleaf语法 变量表达式 [[${variable}]]可以在HTML页面中输出表达式的值,其中variable是一个变量名。 <p>当前时间: [[${loc…

    html 2023年5月30日
    00
  • Android简单实现引导页

    1. 引言 引导页是App开发中常见的功能之一,它通常会在用户第一次进入App时展示。引导页一般用来介绍App的功能、特点,或者是展示一些美观的图片,使用户对App有更直观的感受。Android的开发者可以利用ViewPager和Fragment来实现引导页的功能。 2. 实现步骤 2.1 在布局文件中添加ViewPager控件 在布局文件中添加一个View…

    html 2023年5月30日
    00
  • CSS 文本渲染属性text-rendering的介绍和使用示例

    关于CSS文本渲染属性text-rendering的使用,我可以给你一份完整攻略。 什么是text-rendering属性 text-rendering属性用于控制浏览器在渲染文字时的细节选项,可以影响字体呈现的平滑性、清晰度和精度。 在默认情况下,浏览器会使用其内置的文本渲染引擎来呈现文本,但是在某些情况下,开启ascii-art风格呈现文本、优化呈现表单…

    html 2023年5月30日
    00
  • python网络爬虫精解之pyquery的使用说明

    Python 网络爬虫精解之 PyQuery 的使用说明 1. PyQuery 简介 PyQuery 是 Python 网络爬虫中常用的 HTML/XML 解析库之一。它是基于 jQuery 核心思想的 Python 实现,使用方式与 jQuery 类似,支持静态解析和动态解析。 PyQuery 让选取特定元素变得轻松,提供简单易用的 API,用于解析HTM…

    html 2023年5月30日
    00
  • IOS 数据存储详解及实例代码

    IOS 数据存储详解及实例代码 在开发 IOS 应用程序时,数据存储是非常重要的一部分,因为应用程序需要记录用户的信息和应用程序状态。IOS 提供了几种数据存储选项,包括: Property List(属性列表) SQLite 数据库 Core Data User Defaults(用户默认设置) NSKeyedArchier Property List(属…

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