Как получить имена вкладок из таблицы Excel с помощью OpenXML

У меня есть документ электронной таблицы, в котором 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 «list» в

OpenXmlElementList list = sheets.ChildElements;

, однако я заметил, что когда я зацикливаю электронную таблицу, это не так. получить названия вкладок в правильном порядке.

14
задан Fedor 22 September 2014 в 05:42
поделиться