我有一個電子表格文檔,其中有182列。我需要將電子表格數據放入一個數據表中,但是我需要找出每個標籤添加數據,標籤名稱是什麼,並將標籤名稱添加到數據表中的一列。如何使用OpenXML從Excel表格中檢索標籤名稱
這是我如何設置數據表。
然後,我在工作簿中循環並深入到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;
剛一說明:我在
OpenXmlElementList list = sheets.ChildElements;
但是我注意到,我沒有以前得到「名單」的InnerXML屬性選項卡名稱在電子表格中循環時,它不會以正確的順序獲得標籤名稱。
http://msdn.microsoft.com/en-us/library/bb507946。 aspx –
工作正常,如果我只是想拉出標籤名稱..我可以通過解析出內部/外部xml ..但我想在我自己的For循環..我無法訪問表而im在SheetData級別.. – Kwalke001
您無法使用「工作表」對象獲取其名稱?該頁面上的最後一個代碼示例顯示瞭如何循環顯示錶單的屬性:大概表單名稱是這些屬性之一(儘管我自己沒有經驗)。 –