Comment récupérer des noms d'onglet à partir d'une feuille Excel en utilisant OpenXML

J'ai un document de feuille de calcul qui a 182 colonnes. J'ai besoin de placer les données de feuille de calcul dans une table de données, onglet par onglet, mais j'ai besoin de savoir que je suis en ajoutant les données de chaque onglet, quel est le nom de l'onglet, et ajouter le nom de l'onglet à une colonne dans la table de données.

C'est la façon dont j'ai créé la table de données.

J'ai ensuite une boucle dans le classeur et de forage vers le bas pour le sheetData objet et de marcher à travers chaque ligne et chaque colonne, l'obtention de données de la cellule.

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)));

Toutefois, à la fin de la chaîne de tableau que j'utilise pour le Tableau de Données, j'ai besoin d'ajouter le nom de l'onglet. Comment puis-je connaître le nom de l'onglet que je suis en boucle dans la feuille Open XML?

Voici mon code pour l'instant:

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;

Juste une remarque: je l'ai fait précédemment obtenir les noms des onglets de la propriété InnerXML de "la liste" dans

OpenXmlElementList list = sheets.ChildElements;

cependant, j'ai remarqué que je suis en boucle dans la feuille de calcul, il n'obtient pas les noms des onglets dans le bon ordre.

source d'informationauteur Kwalke001