gpt4 book ai didi

c# - 使用 OpenXML 按工作表名称读取 excel

转载 作者:行者123 更新时间:2023-11-30 15:54:39 28 4
gpt4 key购买 nike

我是 OpenXML c# 的新手,我想从 excel 文件中读取行。但我需要按名称阅读 excel 表。这是我读取第一张纸的示例代码:

 using (var spreadSheet = SpreadsheetDocument.Open(path, true))
{
WorkbookPart workbookPart = spreadSheet.WorkbookPart;
WorksheetPart worksheetPart = workbookPart.WorksheetParts.First();
SheetData sheetData = worksheetPart.Worksheet.Elements<SheetData>().First();

foreach (Row r in sheetData.Elements<Row>())
{
foreach (Cell c in r.Elements<Cell>())
{
if (c.DataType != null && c.DataType == CellValues.SharedString)
{
// reading cells
}
}
}

但是如何通过工作表名称查找和读取单元格。

最佳答案

我已经按照下面的代码片段完成了它。它基本上是 Workbook->Spreadsheet->Sheet 然后获取工作表的 Name 属性。

基本的底层 xml 如下所示:

<x:workbook>
<x:sheets>
<x:sheet name="Sheet1" sheetId="1" r:id="rId1" />
<x:sheet name="TEST sheet Name" sheetId="2" r:id="rId2" />
</x:sheets>
</x:workbook>

id 值是 Open XML 包在内部用于识别每个工作表并将其与其他 XML 部分链接的值。这就是为什么识别名称后的代码行使用 GetPartById 来获取 WorksheetPart

using (SpreadsheetDocument doc = SpreadsheetDocument.Open(path, false))
{
WorkbookPart bkPart = doc.WorkbookPart;
DocumentFormat.OpenXml.Spreadsheet.Workbook workbook = bkPart.Workbook;
DocumentFormat.OpenXml.Spreadsheet.Sheet s = workbook.Descendants<DocumentFormat.OpenXml.Spreadsheet.Sheet>().Where(sht => sht.Name == "Sheet1").FirstOrDefault();
WorksheetPart wsPart = (WorksheetPart)bkPart.GetPartById(s.Id);
DocumentFormat.OpenXml.Spreadsheet.SheetData sheetdata = wsPart.Worksheet.Elements<DocumentFormat.OpenXml.Spreadsheet.SheetData>().FirstOrDefault();

foreach (DocumentFormat.OpenXml.Spreadsheet.Row r in sheetdata.Elements<DocumentFormat.OpenXml.Spreadsheet.Row>())
{
DocumentFormat.OpenXml.Spreadsheet.Cell c = r.Elements<DocumentFormat.OpenXml.Spreadsheet.Cell>().First();
txt += c.CellValue.Text + Environment.NewLine;
}
this.txtMessages.Text += txt;
}

关于c# - 使用 OpenXML 按工作表名称读取 excel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49965851/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com