Obtenir des informations de feuille de calcul à partir d’un package Open XML
Cette rubrique montre comment utiliser les classes du Kit de développement logiciel (SDK) Open XML pour Office afin de récupérer par programmation des informations à partir d’une feuille de calcul dans un document de feuille de calcul.
Structure de base d’un document spreadsheetML
La structure de base d’un SpreadsheetML
document se compose des Sheets éléments et Sheet , qui font référence aux feuilles de calcul du classeur. Un fichier XML distinct est créé pour chaque feuille de calcul. Par exemple, le SpreadsheetML
pour un Workbook qui a deux feuilles de calcul nommées MySheet1 et MySheet2 se trouve dans le fichier Workbook.xml et est illustré dans l’exemple de code suivant.
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<workbook xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships">
<sheets>
<sheet name="MySheet1" sheetId="1" r:id="rId1" />
<sheet name="MySheet2" sheetId="2" r:id="rId2" />
</sheets>
</workbook>
Les fichiers XML de feuille de calcul contiennent un ou plusieurs éléments de niveau bloc, tels que SheetData représente la table de cellules et contient un ou plusieurs Row éléments. Un row
contient un ou plusieurs Cell éléments. Chaque cellule contient un CellValue élément qui représente la valeur de la cellule. Par exemple, le SpreadsheetML
pour la première feuille de calcul d’un classeur, qui n’a que la valeur 100 dans la cellule A1, se trouve dans le fichier Sheet1.xml et est illustré dans l’exemple de code suivant.
<?xml version="1.0" encoding="UTF-8" ?>
<worksheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main">
<sheetData>
<row r="1">
<c r="A1">
<v>100</v>
</c>
</row>
</sheetData>
</worksheet>
À l’aide du Kit de développement logiciel (SDK) Open XML, vous pouvez créer une structure de document et un contenu qui utilisent des classes fortement typées qui correspondent à SpreadsheetML
des éléments. Vous trouverez ces classes dans l’espace de DocumentFormat.OpenXML.Spreadsheet
noms . Le tableau suivant répertorie les noms de classes des classes qui correspondent aux workbook
éléments , sheets
, sheet
, worksheet
et sheetData
.
Élément SpreadsheetML | Classe du Kit de développement logiciel (SDK) Open XML | Description |
---|---|---|
<workbook/> |
DocumentFormat.OpenXML.Spreadsheet.Workbook | Élément racine du composant document principal. |
<sheets/> |
DocumentFormat.OpenXML.Spreadsheet.Sheets | Conteneur des structures de niveau bloc comme les éléments de feuille, fileVersion et autres spécifiés par la norme ISO/IEC 29500. |
<sheet/> |
DocumentFormat.OpenXml.Spreadsheet.Sheet | Feuille qui pointe vers un fichier de définition de feuille. |
<worksheet/> |
DocumentFormat.OpenXML.Spreadsheet. Feuilles de calcul | Fichier de définition de feuille qui contient les données de feuille. |
<sheetData/> |
DocumentFormat.OpenXML.Spreadsheet.SheetData | Tableau de cellules, regroupées par lignes. |
<row/> |
DocumentFormat.OpenXml.Spreadsheet.Row | Ligne dans le tableau de cellules. |
<c/> |
DocumentFormat.OpenXml.Spreadsheet.Cell | Cellule d'une ligne. |
<v/> |
DocumentFormat.OpenXml.Spreadsheet.CellValue | Valeur d’une cellule. |
Fonctionnement de l’exemple de code
Une fois que vous avez ouvert le fichier pour l’accès en lecture seule, vous instanciez la Sheets
classe .
Sheets? sheets = mySpreadsheet.WorkbookPart?.Workbook?.Sheets;
Vous effectuez ensuite une itération au sein de la Sheets
collection et vous affichez OpenXmlElement et le OpenXmlAttribute dans chaque élément.
foreach (OpenXmlElement sheet in sheets)
{
foreach (OpenXmlAttribute attr in sheet.GetAttributes())
{
Console.WriteLine("{0}: {1}", attr.LocalName, attr.Value);
}
}
L’affichage des informations d’attribut vous permet d’obtenir le nom et l’ID de chaque feuille de calcul du fichier de tableur.
Exemple de code
Voici un exemple de code complet en C# et Visual Basic.
static void GetSheetInfo(string fileName)
{
// Open file as read-only.
using (SpreadsheetDocument mySpreadsheet = SpreadsheetDocument.Open(fileName, false))
{
Sheets? sheets = mySpreadsheet.WorkbookPart?.Workbook?.Sheets;
if (sheets is not null)
{
// For each sheet, display the sheet information.
foreach (OpenXmlElement sheet in sheets)
{
foreach (OpenXmlAttribute attr in sheet.GetAttributes())
{
Console.WriteLine("{0}: {1}", attr.LocalName, attr.Value);
}
}
}
}
}