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
Vous devez vous connecter pour publier un commentaire.
La feuille les noms sont stockés dans le
WorkbookPart
dans unSheets
élément qui a des enfants de l'élémentSheet
qui correspond à chaque feuille de calcul dans le fichier Excel. Tout ce que vous avez à faire est de saisir le bon indice de ceSheets
élément et qui sera leSheet
vous êtes dans votre boucle. J'ai ajouté un extrait de code ci-dessous pour faire ce que vous voulez.Ici est une pratique méthode d'assistance pour obtenir la Fiche correspondant à un WorksheetPart:
Ensuite, vous pouvez obtenir le nom à partir de feuilles de Nom de la propriété:
...ce sera le "nom de l'onglet" OP visée.
Pour l'enregistrement à l'opposé de la méthode ressemblerait à:
...et avec qui nous pouvons également ajouter la méthode suivante:
Maintenant, vous pouvez facilement énumérer toutes les Feuilles de calcul, y compris leur nom.
Jeter le tout dans un dictionnaire pour le nom de la base de recherche si vous préférez que:
...ou si vous souhaitez simplement une fiche spécifique par nom:
(Alors appel
GetWorkSheetFromSheet
correspondant à l'Feuille de calcul.)