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日

相关文章

  • Android PopupWindow实现右侧、左侧和底部弹出菜单

    首先需要注意的是,PopupWindow是一个弹出菜单的控件,可以用于实现右侧、左侧和底部的弹出菜单。 1. 创建PopupWindow对象 使用PopupWindow需要创建PopupWindow对象。通过LayoutInflater将xml布局文件转化成View对象,并将View对象传给PopupWindow来实现弹出菜单的功能。具体过程如下: // 创…

    html 2023年5月31日
    00
  • ASP.NET使用xslt将xml转换成Excel

    下面是“ASP.NET使用XSLT将XML转换成Excel”的完整攻略: 1. 准备工作 首先,我们需准备以下工具和环境: Visual Studio IDE: 用于编写和调试 ASP.NET 应用程序的集成开发环境。 .NET Framework: 在 Windows 上运行 ASP.NET 应用程序所需的开发环境。 XML 文件: 包含要转换为 Exce…

    html 2023年5月30日
    00
  • Dreamweaver编辑网页预览的时候显示乱码该怎么办?

    首先需要明确一点,Dreamweaver编辑网页时显示乱码,可能有多种原因,可以根据具体情况分析解决。以下是常见的几种情况以及解决方法。 情况一:编码格式不一致导致乱码 确认编辑器字符编码格式:在Dreamweaver中,打开被编辑的网页文件,然后在“文件”菜单中选择“属性”,检查选项卡中的字符集是否为正确的编码格式(如UTF-8)。 确认HTML文件的编码…

    html 2023年5月31日
    00
  • 数字货币交易app有哪些?

    以下是“数字货币交易app有哪些?”的完整攻略: 数字货币交易app有哪些? 随着数字货币的普及,越来越多的人开始使用数字货币交易app进行交易。以下是关于数字货币交易app的详细攻略,介绍一些常用的数字货币交易app。 常用数字货币交易app Coinbase:Coinbase是一家总部位于美国的数字货币交易所,提供比特币、以太坊、莱特币等数字货币的交易服…

    html 2023年5月18日
    00
  • 腾讯地图怎么退出登录账号? 腾讯地图app退出账号的技巧

    以下是“腾讯地图怎么退出登录账号? 腾讯地图app退出账号的技巧”的完整攻略: 腾讯地图怎么退出登录账号? 在腾讯地图中,可以按照以下步骤退出登录账号: 打开腾讯地图:在手机上打开腾讯地图应用。 进入个人中心:在腾讯地图中,点击右下角“我的”按钮,进入个人中心页面。 进入设置页面:在个人中心页面中,点击“设置”按钮,进入设置页面。 退出登录账号:在设置页面中…

    html 2023年5月18日
    00
  • vbscript 读取xml格式的配置文件

    这里是详细讲解vbscript读取xml格式的配置文件的完整攻略,包含以下四个步骤: 创建XML对象 首先,我们需要用XML对象读取XML格式的配置文件。我们可以通过以下步骤创建一个XML对象: Set xmlDoc = CreateObject("Microsoft.XMLDOM") 加载XML文件 现在我们已经创建了XML对象,我们需…

    html 2023年5月30日
    00
  • HTML基础详解(下)

    下面我针对“HTML基础详解(下)”的内容,给出完整的攻略如下: 1. 标题 HTML基础详解(下) 2. 简介 本篇文章是HTML基础知识学习的第二篇文章,主要讲解了HTML的表格、表单和网页布局等内容。 3. HTML表格 HTML表格是用于在网页上展示数据的一种常见方式,本节将详细介绍HTML表格的使用。 基本结构 HTML表格的基本结构如下所示: &…

    html 2023年5月30日
    00
  • HTML段落标签(p标签)

    HTML段落标签<p>是用于定义文本段落的基本标记,它告诉浏览器要把这些文本视为一个段落,从而设置正确的行距、缩进和对齐等样式。 <p>标签主要用于排版,将文本按照语义化分段。它是一个块级元素,会自动在其前后添加换行符,用于将周围其他的元素和段落分开。 它的使用方法非常简单,只需要在开始和结尾处分别使用<p>和</p…

    Web开发基础 2023年3月15日
    00
合作推广
合作推广
分享本页
返回顶部