openxml获取sheet所有的数据二维数组

这篇具有很好参考价值的文章主要介绍了openxml获取sheet所有的数据二维数组。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

此代码假定您已经安装了OpenXML SDK,并且您有一个.xlsx文件的路径。\n\n请注意,续写的代码将获取指定工作表中的所有数据,包括空单元格,并将它们存储在一个二维数组中。如果工作表中有多个行和列,数组的大小将与工作表中的行数和列数相匹配。\n\n```csharp\nusing DocumentFormat.OpenXml.Packaging;\nusing DocumentFormat.OpenXml.Spreadsheet;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\n\npublic class ExcelReader\n{\n    public static string[,] GetAllSheetData(string filePath, string sheetName)\n    {\n        // 打开Excel文件\n        using (SpreadsheetDocument document = SpreadsheetDocument.Open(filePath, false))\n        {\n            // 获取工作表\n            WorkbookPart workbookPart = document.WorkbookPart;\n            Sheet sheet = workbookPart.Workbook.Descendants<Sheet>().FirstOrDefault(s => s.Name == sheetName);\n            if (sheet == null)\n            {\n                throw new ArgumentException($\"Sheet {sheetName} not found.\", nameof(sheetName));\n            }\n\n            // 获取工作表数据\n            WorksheetPart worksheetPart = (WorksheetPart)workbookPart.GetPartById(sheet.Id);\n            SheetData sheetData = worksheetPart.Worksheet.Elements<SheetData>().First();\n            var rows = sheetData.Descendants<Row>();\n\n            // 获取最大行数和列数\n            int rowCount = rows.Count();\n            int colCount = rows.Max(r => r.Elements<Cell>().Count());\n\n            // 创建二维数组\n            string[,] dataArray = new string[rowCount, colCount];\n\n            // 遍历所有行\n            for (int i = 0; i < rowCount; i++)\n            {\n                var row = rows.ElementAt(i);\n                var cells = row.Elements<Cell>().ToArray();\n\n                // 遍历所有列\n                for (int j = 0; j < colCount; j++)\n                {\n                    // 如果单元格不存在,则将其视为空\n                    if (j >= cells.Length || cells[j].CellValue == null)\n                    {\n                        dataArray[i, j] = string.Empty;\n                    }\n                    else\n                    {\n                        string value = cells[j].CellValue.InnerText;\n\n                        // 假设值是一个共享字符串\n                        if (cells[j].DataType != null && cells[j].DataType.Value == CellValues.SharedString)\n                        {\n                            var stringTable = workbookPart.GetPartsOfType<SharedStringTablePart>().FirstOrDefault();\n                            if (stringTable != null)\n                            {\n                                value = stringTable.SharedStringTable.ElementAt(int.Parse(value)).InnerText;\n                            }\n                        }\n                        dataArray[i, j] = value;\n                    }\n                }\n            }\n            return dataArray;\n        }\n    }\n}\n```\n\n在这段代码中,我们首先使用`SpreadsheetDocument.Open`方法打开Excel文件。然后,我们查找具有指定名称的工作表,并获取工作表中的所有行和列。我们计算出最大的行数和列数,以便创建一个适当大小的二维字符串数组。接着,我们遍历所有的行和列,将每个单元格的数据读取到数组中。\n\n如果单元格的数据是共享字符串(即,字符串存在于工作簿的共享字符串表中),我们会检索共享字符串表并获取实际的字符串值。\n\n现在,您可以通过调用`ExcelReader.GetAllSheetData`方法并传递Excel文件的路径和工作表的名称来获取工作表中的所有数据。文章来源地址https://www.toymoban.com/news/detail-798927.html

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

class Program
{
    static void Main()
    {
        string filePath = "YourExcelFile.xlsx"; // 替换为您的Excel文件路径

        // 调用方法获取工作表数据
        string[][] sheetData = ReadExcelFile(filePath, "Sheet1");

        // 打印数据
        foreach (var row in sheetData)
        {
            Console.WriteLine(string.Join("\t", row));
        }
    }

    static string[][] ReadExcelFile(string filePath, string sheetName)
    {
        List<string[]> sheetData = new List<string[]>();

        using (SpreadsheetDocument spreadsheetDocument = SpreadsheetDocument.Open(filePath, false))
        {
            WorkbookPart workbookPart = spreadsheetDocument.WorkbookPart;
            Sheet sheet = workbookPart.Workbook.Descendants<Sheet>().FirstOrDefault(s => s.Name == sheetName);

            if (sheet != null)
            {
                WorksheetPart worksheetPart = (WorksheetPart)workbookPart.GetPartById(sheet.Id);

                // 获取工作表中的所有行
                IEnumerable<Row> rows = worksheetPart.Worksheet.Descendants<Row>();

                foreach (Row row in rows)
                {
                    // 获取行中的所有单元格
                    IEnumerable<Cell> cells = row.Elements<Cell>();

                    // 将单元格值添加到数组
                    string[] rowData = cells.Select(cell => GetCellValue(workbookPart, cell)).ToArray();
                    sheetData.Add(rowData);
                }
            }
        }

        return sheetData.ToArray();
    }

    static string GetCellValue(WorkbookPart workbookPart, Cell cell)
    {
        if (cell.DataType != null && cell.DataType == CellValues.SharedString)
        {
            // 如果单元格类型为共享字符串,则获取共享字符串的值
            SharedStringTablePart sharedStringTablePart = workbookPart.GetPartsOfType<SharedStringTablePart>().FirstOrDefault();
            if (sharedStringTablePart != null)
            {
                int sharedStringIndex = int.Parse(cell.InnerText);
                return sharedStringTablePart.SharedStringTable.Elements<SharedStringItem>().ElementAt(sharedStringIndex).InnerText;
            }
        }

        // 否则直接获取单元格的值
        return cell.InnerText;
    }
}

到了这里,关于openxml获取sheet所有的数据二维数组的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Excel·VBA二维数组组合函数、组合求和

    之前的文章《Excel·VBA数组组合函数、组合求和》和《Excel·VBA数组排列函数》,都是针对 一维数组 的组合和排列 二维数组组合:对一个 m行*n列 的二维数组,每行抽取1个元素进行组合,则共有 n ^ m 个组合 代码思路,类似之前的文章“VBA排列函数”尾数循环的方式 举例 组合

    2024年02月11日
    浏览(47)
  • 【Python】excel多个sheet数据合并实例

    因为,每天都会有的大量excel报表汇总处理任务,所以写了一个脚本来处理。 就是找出每一个excel中特定的sheet,把这些sheet的特定列读取出来合并到一个sheet中。 因为每一个sheet的数据都不太一样,所以稍微麻烦一点,下面使用openpyxl方式和pandas两种方式来处理。 使用openpyx

    2024年02月02日
    浏览(47)
  • Python合并EXCEL数据(按行、按列、按sheet)

    1.按行合并多个excel文件 2.按列合并多个excel文件(多个excel文件行数需一致) 改进版:把需要合并的excel表格放在一个文件夹,运行代码把该文件夹中的表格合并 这个代码直接粘过去用就行,改绿色的部分即可,注意要把文件都放一个文件夹里。 3.按sheet合并,把一个文件里

    2024年02月15日
    浏览(42)
  • excel(wps)之vlookup函数合并sheet数据

    VLOOKUP函数是Excel中的一个纵向查找函数,它与LOOKUP函数和HLOOKUP函数属于一类函数,在工作中都有广泛应用,例如可以用来核对数据,多个表格之间快速导入数据等函数功能。功能是按列查找,最终返回该列所需查询列序所对应的值;与之对应的HLOOKUP是按行查找的。 VLOOKUP函数

    2024年01月24日
    浏览(40)
  • Java利用POI导入Excel数据(多个sheet、模板)

    需求:根据excel模板导入数据            sheet1:1-6行为固定格式,且需要取值({xxx});7行开始为数据集合(list)            sheet2:都为固定格式,取值地方:{xxx}         1、数据格式(两个Sheet)   2、代码

    2024年02月16日
    浏览(49)
  • easyExcel 获取多个sheet中复杂表头的数据

    EasyExcel是一个强大且易于使用的Java库,用于简化Excel文件的读写操作。它是阿里巴巴开源的一个基于POI实现的Excel处理工具,并提供了一组简单的API来处理Excel文件,包括读取、写入和转换。 EasyExcel的特点包括: 易于使用:EasyExcel提供了简单而直观的API,使得读取、写入和转

    2024年01月21日
    浏览(39)
  • Springboot基于easyexcel实现一个excel文件包含多个sheet表格的数据导出

    EasyExcel 是一款基于Java的开源Excel操作工具,它提供了简单且强大的 API,使开发人员可以轻松地读写、操作和生成Excel文件。 EasyExcel 支持 Excel 文件的导入和导出,可以处理大量数据,具有高性能和低内存占用。它可以读取 Excel 文件中的数据,并将数据转换为 Java 对象,也可

    2024年02月03日
    浏览(56)
  • Python获取二维数组(矩阵)第二列值与最大值

    对于二维数组(矩阵)的应用有多广与多重要,怎么研究都不为过,突然想获取其中最大的一组值,发现max返回的是第一列最大值的这组数,如何获得第二列最大的这组数呢? 比如: A=[[1, 2], [12, 22], [22, 5], [22, 50], [122, 50], [330, 3], [4, 400], [34, 56], [3, 44]] 如果max(A),返回的是[330, 3

    2024年02月06日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包