网站开发 运行及维护,免费个人简历电子版填写,芍药居网站建设公司,北京平台网站建设找哪家此代码假定您已经安装了OpenXML SDK#xff0c;并且您有一个.xlsx文件的路径。\n\n请注意#xff0c;续写的代码将获取指定工作表中的所有数据#xff0c;包括空单元格#xff0c;并将它们存储在一个二维数组中。如果工作表中有多个行和列#xff0c;数组的大小将与工作表…此代码假定您已经安装了OpenXML SDK并且您有一个.xlsx文件的路径。\n\n请注意续写的代码将获取指定工作表中的所有数据包括空单元格并将它们存储在一个二维数组中。如果工作表中有多个行和列数组的大小将与工作表中的行数和列数相匹配。\n\ncsharp\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.DescendantsSheet().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.ElementsSheetData().First();\n var rows sheetData.DescendantsRow();\n\n // 获取最大行数和列数\n int rowCount rows.Count();\n int colCount rows.Max(r r.ElementsCell().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.ElementsCell().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.GetPartsOfTypeSharedStringTablePart().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文件的路径和工作表的名称来获取工作表中的所有数据。 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){Liststring[] sheetData new Liststring[]();using (SpreadsheetDocument spreadsheetDocument SpreadsheetDocument.Open(filePath, false)){WorkbookPart workbookPart spreadsheetDocument.WorkbookPart;Sheet sheet workbookPart.Workbook.DescendantsSheet().FirstOrDefault(s s.Name sheetName);if (sheet ! null){WorksheetPart worksheetPart (WorksheetPart)workbookPart.GetPartById(sheet.Id);// 获取工作表中的所有行IEnumerableRow rows worksheetPart.Worksheet.DescendantsRow();foreach (Row row in rows){// 获取行中的所有单元格IEnumerableCell cells row.ElementsCell();// 将单元格值添加到数组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.GetPartsOfTypeSharedStringTablePart().FirstOrDefault();if (sharedStringTablePart ! null){int sharedStringIndex int.Parse(cell.InnerText);return sharedStringTablePart.SharedStringTable.ElementsSharedStringItem().ElementAt(sharedStringIndex).InnerText;}}// 否则直接获取单元格的值return cell.InnerText;}
}