Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En este tema se muestra cómo usar las clases del SDK de Open XML para Office para recuperar mediante programación información de una hoja de cálculo de un documento de hoja de cálculo.
Estructura básica de un documento spreadsheetML
La estructura básica de un SpreadsheetML
documento consta de los Sheets elementos y Sheet , que hacen referencia a las hojas de cálculo del libro. Se crea un archivo XML independiente para cada hoja de cálculo. Por ejemplo, para SpreadsheetML
un Workbook objeto que tiene dos hojas de cálculo denominados MySheet1 y MySheet2 se encuentra en el archivo Workbook.xml y se muestra en el ejemplo de código siguiente.
<?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>
Los archivos XML de hoja de cálculo contienen uno o varios elementos de nivel de bloque, como SheetData representa la tabla de celdas y contiene uno o varios Row elementos. contiene row
uno o varios Cell elementos. Cada celda contiene un CellValue elemento que representa el valor de la celda. Por ejemplo, para SpreadsheetML
la primera hoja de cálculo de un libro, que solo tiene el valor 100 en la celda A1, se encuentra en el archivo Sheet1.xml y se muestra en el ejemplo de código siguiente.
<?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>
Con el SDK de Open XML, puede crear la estructura de documentos y el contenido que usa clases fuertemente tipadas que corresponden a SpreadsheetML
elementos. Puede encontrar estas clases en el espacio de DocumentFormat.OpenXML.Spreadsheet
nombres. En la tabla siguiente se enumeran los nombres de clase de las clases correspondientes a los workbook
elementos , sheets
, sheet
, worksheet
y sheetData
.
Elemento de SpreadsheetML | Open XML SDK (clase) | Descripción |
---|---|---|
<workbook/> |
DocumentFormat.OpenXML.Spreadsheet.Workbook | El elemento raíz del elemento de documento principal. |
<sheets/> |
DocumentFormat.OpenXML.Spreadsheet.Sheets | El contenedor de las estructuras del nivel de bloque, como sheet, fileVersion y otras que se detallan en la especificación ISO/IEC 29500. |
<sheet/> |
DocumentFormat.OpenXml.Spreadsheet.Sheet | Una hoja que apunta a un archivo de definición de hoja. |
<worksheet/> |
DocumentFormat.OpenXML.Spreadsheet. Worksheet | Un archivo de definición de hoja que contiene los datos de la hoja. |
<sheetData/> |
DocumentFormat.OpenXML.Spreadsheet.SheetData | La tabla de celdas agrupadas por filas. |
<row/> |
DocumentFormat.OpenXml.Spreadsheet.Row | Una fila en una tabla de celdas. |
<c/> |
DocumentFormat.OpenXml.Spreadsheet.Cell | Una celda en una fila. |
<v/> |
DocumentFormat.OpenXml.Spreadsheet.CellValue | El valor de una celda. |
Funcionamiento del código de ejemplo
Después de abrir el archivo para el acceso de solo lectura, cree una instancia de la Sheets
clase .
Sheets? sheets = mySpreadsheet.WorkbookPart?.Workbook?.Sheets;
A continuación, se recorre en iteración la Sheets
colección y se muestra OpenXmlElement y en OpenXmlAttribute cada elemento.
foreach (OpenXmlElement sheet in sheets)
{
foreach (OpenXmlAttribute attr in sheet.GetAttributes())
{
Console.WriteLine("{0}: {1}", attr.LocalName, attr.Value);
}
}
Al mostrar la información del atributo, se obtiene el nombre y el identificador de cada hoja de cálculo del archivo de hoja de cálculo.
Código de ejemplo
El siguiente es el ejemplo de código completo en C# y 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);
}
}
}
}
}