【发布时间】:2011-09-21 17:50:00
【问题描述】:
我有一个包含 182 列的电子表格文档。我需要将电子表格数据逐个选项卡地放入数据表中,但我需要在从每个选项卡添加数据时找出选项卡名称是什么,并将选项卡名称添加到数据表中的列中.
这就是我设置数据表的方式。
然后我在工作簿中循环并深入到sheetData 对象并遍历每一行和每一列,获取单元格数据。
DataTable dt = new DataTable();
for (int i = 0; i <= col.GetUpperBound(0); i++)
{
try
{
dt.Columns.Add(new DataColumn(col[i].ToString(), typeof(string)));
}
catch (Exception e)
{
MessageBox.Show("Uploader Error" + e.ToString());
return null;
}
}
dt.Columns.Add(new DataColumn("SheetName", typeof(string)));
但是,在我用于数据表的字符串数组的末尾,我需要添加选项卡名称。当我在 Open XML 的工作表中循环时,如何找出选项卡名称?
到目前为止,这是我的代码:
using (SpreadsheetDocument spreadSheetDocument =
SpreadsheetDocument.Open(Destination, false))
{
WorkbookPart workbookPart = spreadSheetDocument.WorkbookPart;
Workbook workbook = spreadSheetDocument.WorkbookPart.Workbook;
Sheets sheets =
spreadSheetDocument
.WorkbookPart
.Workbook
.GetFirstChild<DocumentFormat.OpenXml.Spreadsheet.Sheets>();
OpenXmlElementList list = sheets.ChildElements;
foreach (WorksheetPart worksheetpart in workbook.WorkbookPart.WorksheetParts)
{
Worksheet worksheet = worksheetpart.Worksheet;
foreach (SheetData sheetData in worksheet.Elements<SheetData>())
{
foreach (Row row in sheetData.Elements())
{
string[] thisarr = new string[183];
int index = 0;
foreach (Cell cell in row.Elements())
{
thisarr[(index)] = GetCellValue(spreadSheetDocument, cell);
index++;
}
thisarr[182] = ""; //need to add tabname here
if (thisarr[0].ToString() != "")
{
dt.Rows.Add(thisarr);
}
}
}
}
}
return dt;
请注意:我之前确实从“列表”的 InnerXML 属性中获取了选项卡名称
OpenXmlElementList list = sheets.ChildElements;
但是我注意到,当我在电子表格中循环时,它没有以正确的顺序获取选项卡名称。
【问题讨论】:
-
如果我只想将选项卡名称拉出来,那效果很好..我可以通过解析内部/外部 xml.. 但我想在我自己的 For 循环中执行它..我在 SheetData 级别访问工作表时遇到问题..
-
您不能使用“工作表”对象来获取其名称?该页面上的最后一个代码示例显示了如何遍历工作表的属性:大概工作表名称是这些属性之一(虽然我自己没有经验)。
-
嗯,工作表级别有一个“名称”属性,但它没有选项卡名称。我只是继续这样做: OpenXmlElementList list = sheet.ChildElements; foreach (OpenXmlElement elm in list) { string xml = elm.OuterXml;
标签: c# .net excel openxml openxml-sdk