Obter informações da folha de cálculo a partir de um pacote Open XML
Este tópico mostra como utilizar as classes no SDK Open XML para o Office para obter informações através de programação a partir de uma folha de cálculo num documento de Folha de Cálculo.
Estrutura básica de um documento de folha de cálculoML
A estrutura de documentos básica de um SpreadsheetML
documento consiste nos Sheets elementos e Sheet , que referenciam as folhas de cálculo no livro. Um arquivo XML separado é criado para cada planilha. Por exemplo, o SpreadsheetML
para um Workbook que tem duas folhas de cálculo com o nome MySheet1 e MySheet2 está localizado no ficheiro Workbook.xml e é apresentado no seguinte exemplo de código.
<?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>
Os ficheiros XML da folha de cálculo contêm um ou mais elementos de nível de bloco, como SheetData representa a tabela de células e contém um ou mais Row elementos. A row
contém um ou mais Cell elementos. Cada célula contém um CellValue elemento que representa o valor da célula. Por exemplo, o para a SpreadsheetML
primeira folha de cálculo num livro, que tem apenas o valor 100 na célula A1, está localizado no ficheiro Sheet1.xml e é apresentado no seguinte exemplo de código.
<?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>
Com o SDK Open XML, pode criar a estrutura do documento e o conteúdo que utiliza classes com tipos fortes que correspondem a SpreadsheetML
elementos. Pode encontrar estas classes no DocumentFormat.OpenXML.Spreadsheet
espaço de nomes. A tabela seguinte lista os nomes das classes que correspondem aos workbook
elementos , sheets
, sheet
, worksheet
e sheetData
.
Elemento SpreadsheetML | Abrir Classe SDK XML | Descrição |
---|---|---|
<workbook/> |
DocumentFormat.OpenXML.Spreadsheet.Workbook | O elemento raiz para a parte do documento principal. |
<sheets/> |
DocumentFormat.OpenXML.Spreadsheet.Sheets | O contêiner para as estruturas de nível de bloco, como sheet, fileVersion e outras indicadas na especificação ISO/IEC 29500. |
<sheet/> |
DocumentFormat.OpenXml.Spreadsheet.Sheet | Uma planilha que aponta para um arquivo de definição de planilha. |
<worksheet/> |
DocumentFormat.OpenXML.Spreadsheet. Planilha | Um arquivo de definição de planilha que contém os dados de planilha. |
<sheetData/> |
DocumentFormat.OpenXML.Spreadsheet.SheetData | A tabela de células, agrupadas por linhas. |
<row/> |
DocumentFormat.OpenXml.Spreadsheet.Row | Uma linha na tabela de células. |
<c/> |
DocumentFormat.OpenXml.Spreadsheet.Cell | Uma célula em uma linha. |
<v/> |
DocumentFormat.OpenXml.Spreadsheet.CellValue | O valor de uma célula. |
Como funciona o código de exemplo
Depois de abrir o ficheiro para acesso só de leitura, instancia a Sheets
classe .
Sheets? sheets = mySpreadsheet.WorkbookPart?.Workbook?.Sheets;
Em seguida, itera através da coleção e apresentação Sheets
OpenXmlElement e do OpenXmlAttribute em cada elemento.
foreach (OpenXmlElement sheet in sheets)
{
foreach (OpenXmlAttribute attr in sheet.GetAttributes())
{
Console.WriteLine("{0}: {1}", attr.LocalName, attr.Value);
}
}
Ao apresentar as informações de atributo, obtém o nome e o ID de cada folha de cálculo no ficheiro de folha de cálculo.
Código de exemplo
A seguir está um exemplo de código completo em C# e 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);
}
}
}
}
}