Cómo convertir un documento XML en una hoja de cálculo de Excel

George Bernard Shaw una vez describió a los británicos y a los estadounidenses como dos personas separadas por un idioma en común. Curiosamente, lo mismo se puede decir de los desarrolladores de aplicaciones y las personas que utilizan aplicaciones. Lo peor es que no solo un grupo no entiende al otro, sino que ambos grupos generalmente desconocen por completo que el otro grupo no tiene idea de lo que el otro está tratando de decir. Si no me crees, intenta explicarle a algún amigo o pariente no técnico qué haces durante un día promedio y observa cómo se les nublan los ojos mientras intentan entender tu descripción.

Como desarrolladores, tenemos la tendencia a lidiar con información que no es amigable para el usuario sin realmente pensar en cómo nuestros familiares la manejarían. Por ejemplo, prefiero no pensar en cómo mi medio hermano mayor se las arreglaría con el documento XML que se muestra en el Listado A. Si me dieran la tarea de darle información que tal vez tenga que editar, me aseguraría de que esté en un formato que no requiera ButterflyXML o XMLSpy. Reconozcámoslo, como desarrolladores tenemos juguetes que los no desarrolladores no tienen, lo que se necesita es algún tipo de punto en común, digamos algo que ambos tengamos instalado en nuestras respectivas máquinas.

Índice de Contenido
  1. Listado A - Un documento XML para mi medio hermano
  2. Listado B - Una hoja de cálculo XML
  3. Desglose de la hoja de cálculo XML
    1. Listado C - Hoja de estilos XSL anotada para crear una hoja de cálculo XML
    2. Listado D - El resultado como XML
  4. Encontrando comodidad

Listado A - Un documento XML para mi medio hermano


<?xml version=”1.0” ?>
<root>
<row>
<column>Columna 1 Fila 1</column>
<column>Columna 2 Fila 1</column>
<column>Columna 3 Fila 1</column>
</row>
<row>
<column>Columna 1 Fila 2</column>
<column>Columna 2 Fila 2</column>
<column>Columna 3 Fila 2</column>
</row>
<row>
<column>Columna 1 Fila 3</column>
<column>Columna 2 Fila 3</column>
<column>Columna 3 Fila 3</column>
</row>
<row>
<column>Columna 1 Fila 4</column>
<column>Columna 2 Fila 4</column>
<column>Columna 3 Fila 4</column>
</row>
</root>

Dado que mi medio hermano mayor trabaja para una correduría, estaría dispuesto a apostar que tiene una suite de Microsoft Office relativamente reciente. Esto significa que tendría Excel y, como yo también tengo Excel, hemos encontrado un punto en común entre un desarrollador y un no desarrollador. Sin embargo, también significa que soy yo quien tiene que descubrir cómo insertar un documento XML en Excel. ¿Quizás usar una cuchara funcionaría?

Sin embargo, existe un truco poco conocido con Excel 2002 que no es exactamente una cuchara, pero definitivamente cumple el objetivo. La Figura A ofrece una pequeña pista sobre el truco que pienso utilizar.

Cómo eliminar los códigos de campo en Word y ahorrar tiempo

Figura A

Guardar un documento de Excel

Ahora que sabemos que Excel puede trabajar con XML, todavía existe el problema menor de cómo pasar del punto X al punto E. Sin embargo, hay un mapa de ruta que podemos seguir, y es la creación de una hoja de cálculo simple y guardarla como un documento XML. El resultado es un documento que se parece al que se muestra en la Figura B y en el Listado B, uno de esos documentos extraños, no escritos por humanos.

Figura B

Una hoja de cálculo de Excel

Las 5 mejores herramientas para reparar archivos PST de Outlook

Listado B - Una hoja de cálculo XML


<?xml version=”1.0"?>
<Workbook xmlns=”urn:schemas-microsoft-com:office:spreadsheet”
xmlns:o=”urn:schemas-microsoft-com:office:office”
xmlns:x=”urn:schemas-microsoft-com:office:excel”
xmlns:ss=”urn:schemas-microsoft-com:office:spreadsheet”
xmlns:html=”http://www.w3.org/TR/REC-html40”>
<DocumentProperties xmlns=”urn:schemas-microsoft-com:office:office”>
<Author>ed woychowsky</Author>
<LastAuthor>Edmond Woychowsky</LastAuthor>
<Created>2007-01-26T16:54:15Z</Created>
<LastSaved>2007-01-27T05:18:54Z</LastSaved>
<Company>None</Company>
<Version>10.3501</Version>
</DocumentProperties>
<OfficeDocumentSettings xmlns=”urn:schemas-microsoft-com:office:office”>
<DownloadComponents/>
<LocationOfComponents HRef=”file:///D:\”/>
</OfficeDocumentSettings>
<ExcelWorkbook xmlns=”urn:schemas-microsoft-com:office:excel”>
<WindowHeight>8700</WindowHeight>
<WindowWidth>11355</WindowWidth>
<WindowTopX>480</WindowTopX>
<WindowTopY>120</WindowTopY>
<ProtectStructure>False</ProtectStructure>
<ProtectWindows>False</ProtectWindows>
</ExcelWorkbook>
<Styles>
<Style ss:ID=”Default” ss:Name=”Normal”>
<Alignment ss:Vertical=”Bottom”/>
<Borders/>
<Font/>
<Interior/>
<NumberFormat/>
<Protection/>
</Style>
</Styles>
<Worksheet ss:Name=”Sheet1″>
<Table ss:ExpandedColumnCount=”2″ ss:ExpandedRowCount=”2″ x:FullColumns=”1″
x:FullRows=”1″>
<Row>
<Cell><Data ss:Type=”String”>celda a1</Data></Cell>
<Cell><Data ss:Type=”String”>celda b2</Data></Cell>
</Row>
<Row>
<Cell><Data ss:Type=”String”>celda a2</Data></Cell>
<Cell><Data ss:Type=”String”>celda b3</Data></Cell>
</Row>
</Table>
<WorksheetOptions xmlns=”urn:schemas-microsoft-com:office:excel”>
<Print>
<ValidPrinterInfo/>
<HorizontalResolution>600</HorizontalResolution>
<VerticalResolution>0</VerticalResolution>
</Print>
<Selected/>
<Panes>
<Pane>
<Number>3</Number>
<ActiveRow>2</ActiveRow>
</Pane>
</Panes>
<ProtectObjects>False</ProtectObjects>
<ProtectScenarios>False</ProtectScenarios>
</WorksheetOptions>
</Worksheet>
<Worksheet ss:Name=”Sheet2″>
<WorksheetOptions xmlns=”urn:schemas-microsoft-com:office:excel”>
<ProtectObjects>False</ProtectObjects>
<ProtectScenarios>False</ProtectScenarios>
</WorksheetOptions>
</Worksheet>
<Worksheet ss:Name=”Sheet3″>
<WorksheetOptions xmlns=”urn:schemas-microsoft-com:office:excel”>
<ProtectObjects>False</ProtectObjects>
<ProtectScenarios>False</ProtectScenarios>
</WorksheetOptions>
</Worksheet>
</Workbook>

Desglose de la hoja de cálculo XML

Aunque el documento parezca extraño, en realidad tiene una especie de estructura peculiar. Por ejemplo, se puede desglosar en la siguiente jerarquía de elementos XML:

Workbook

DocumentProperties

ExcelWorkbook

Styles

Las mejores aplicaciones de calendario para tu escritorio

Style

Worksheet

Tables

Row

Cell

Data

Cómo desinstalar aplicaciones en Windows 10: Guía paso a paso

WorksheetOptions

Print

ValidPrinterInfo

HorizontalResolution

VerticalResolution

Selected

Cómo mostrar la ruta y el nombre de archivo en un documento de Word o barra de título

Panes

Pane

Number

ActiveRow

ProtectObjects

ProtectScenarios

Cómo programar y modificar citas y eventos en Outlook para mantenerse organizado

A simple vista, no parece tan formidable desglosado de esta manera, ¿verdad? De hecho, al analizarlo desde esta perspectiva, resulta bastante fácil diseñar una hoja de estilos XSL 1.0 para transformar el documento XML del Listado A en algo con lo que mi medio hermano se sentirá cómodo. De hecho, la hoja de estilos anotada se puede encontrar en el Listado C y los resultados se muestran en la Figura C y en el Listado D.

Listado C - Hoja de estilos XSL anotada para crear una hoja de cálculo XML


<?xml version=”1.0” ?>
<xsl:stylesheet version=”1.0” xmlns:xsl=”http://www.w3.org/1999/XSL/Transform”
xmlns=”urn:schemas-microsoft-com:office:spreadsheet”
xmlns:o=”urn:schemas-microsoft-com:office:office”
xmlns:x=”urn:schemas-microsoft-com:office:excel”
xmlns:ss=”urn:schemas-microsoft-com:office:spreadsheet”
xmlns:html=”http://www.w3.org/TR/REC-html40″>
<!—- : /: Edmond Woychowsky: 25 de julio de 2005: El objetivo de esta plantilla es crear una hoja de cálculo Excel/XML a partir de un documento XML simple. —>
<xsl:template match=”/”>
<Workbook>
<xsl:call-template name=”DocumentProperties”/>
<xsl:call-template name=”OfficeDocumentSettings”/>
<xsl:call-template name=”ExcelWorkbook”/>
<xsl:call-template name=”Styles”/>
<xsl:apply-templates select=”/*” mode=”worksheet”/>
</Workbook>
</xsl:template>
<!—- : * worksheet: This template builds the spreadsheets individual worksheets, commonly know as tabs. —>
<xsl:template match=”*” mode=”worksheet”>
<xsl:variable name=”position” select=”position()”/>
<Worksheet ss:Name=”{concat(‘Sheet’, $position)}”>
<Table ss:ExpandedColumnCount=”{count(./*[1]/*)}” ss:ExpandedRowCount=”{count(./*) + 2}” x:FullColumns=”1″ x:FullRows=”1″>
<xsl:apply-templates select=”*” mode=”row”/>
</Table>
<xsl:call-template name=”WorksheetOptions”/>
</Worksheet>
</xsl:template>
<!—- : * row: This template builds the worksheet’s rows. —>
<xsl:template match=”*” mode=”row”>
<Row>
<xsl:apply-templates select=”*” mode=”cell”/>
</Row>
</xsl:template>
<!—- : * cells: This template builds the row’s cells. —>
<xsl:template match=”*” mode=”cell”>
<xsl:variable name=”type”>
<xsl:choose>
<xsl:when test=”number(.) = .”>Number</xsl:when>
<xsl:otherwise>String</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<Cell>
<Data ss:Type=”{$type}”>
<xsl:value-of select=”.”/>
</Data>
</Cell>
</xsl:template>
<!—- : * column: This template describes a worksheet’s individual columns. —>
<xsl:template match=”*” mode=”column”>
<xsl:variable name=”name” select=”name(.)”/>
<xsl:variable name=”length”>
<xsl:call-template name=”length”>
<xsl:with-param name=”nodeset” select=”//parent::*/parent::*/*/*[name(.) = $name]”/>
</xsl:call-template>
</xsl:variable>
<xsl:variable name=”width”>
<xsl:choose>
<xsl:when test=”($length * 5.75) &lt; 56.25″>56.25</xsl:when>
<xsl:otherwise>
<xsl:value-of select=”$length * 5.75″/>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:variable name=”style”>
<xsl:choose>
<xsl:when test=”parent::*/parent::*/*/*[name(.) = $name] = number(parent::*/parent::*/*[1]/*[name(.) = $name])”>
<xsl:choose>
<xsl:when test=”string-length(parent::*/parent::*/*/*[name(.) = $name][contains(.,’.’)]) = 0″>s23</xsl:when>
<xsl:otherwise>s24</xsl:otherwise>
</xsl:choose>
</xsl:when>
<xsl:otherwise>s22</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<Column ss:StyleID=”{$style}” ss:AutoFitWidth=”0″ ss:Width=”{$width}”/>
</xsl:template>
<!—- : DocumentProperties: This template describes the document to Excel. —>
<xsl:template name=”DocumentProperties”>
<DocumentProperties xmlns=”urn:schemas-microsoft-com:office:office”>
<Author>ewoychowsky</Author>
<Company>EAW</Company>
<Version>10.4219</Version>
</DocumentProperties>
</xsl:template>
<!—- : OfficeDocumentSettings: This template describes the Office document to Excel. —>
<xsl:template name=”OfficeDocumentSettings”>
<OfficeDocumentSettings xmlns=”urn:schemas-microsoft-com:office:office”>
<DownloadComponents/>
<LocationOfComponents HRef=”file:///\\phlfsnt01\DOWNLOAD\OfficeXPSrc\”/>
</OfficeDocumentSettings>
</xsl:template>
<!—- : ExcelWorkbook: This template describes the characteristics of the wookbook to Excel. —>
<xsl:template name=”ExcelWorkbook”>
<ExcelWorkbook xmlns=”urn:schemas-microsoft-com:office:excel”>
<WindowHeight>9210</WindowHeight>
<WindowWidth>15195</WindowWidth>
<WindowTopX>0</WindowTopX>
<WindowTopY>60</WindowTopY>
<ProtectStructure>False</ProtectStructure>
<ProtectWindows>False</ProtectWindows>
</ExcelWorkbook>
</xsl:template>
<!—- : Styles: This template describes the display styles to Excel. —>
<xsl:template name=”Styles”>
<Styles>
<Style ss:ID=”Default” ss:Name=”Normal”>
<Alignment ss:Vertical=”Bottom”/>
<Borders/>
<Font/>
<Interior/>
<NumberFormat/>
<Protection/>
</Style>
</Styles>
</xsl:template>
<!—- : WorksheetOptions: This template describes the worksheet options to Excel. —>
<xsl:template name=”WorksheetOptions”>
<WorksheetOptions xmlns=”urn:schemas-microsoft-com:office:excel”>
<Print>
<ValidPrinterInfo/>
<HorizontalResolution>1200</HorizontalResolution>
<VerticalResolution>1200</VerticalResolution>
</Print>
<ProtectObjects>False</ProtectObjects>
<ProtectScenarios>False</ProtectScenarios>
</WorksheetOptions>
</xsl:template>
<!—- : length: Determine either the length of the node name or the longest node(s), which ever is longer. —>
<xsl:template name=”length”>
<xsl:param name=”nodeset”/>
<xsl:variable name=”longest”>
<xsl:call-template name=”longest”>
<xsl:with-param name=”nodeset” select=”$nodeset”/>
</xsl:call-template>
</xsl:variable>
<xsl:choose>
<xsl:when test=”string-length(name($nodeset[1])) &gt; string-length($longest)”>
<xsl:value-of select=”string-length(name($nodeset[1]))”/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select=”string-length($longest)”/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<!—- : longest: This recursive template transverses a nodeset to find the nodes with the longest string-length. Please note that the result of this template may itself be a nodeset. —>
<xsl:template name=”longest”>
<xsl:param name=”nodeset”/>
<xsl:param name=”length” select=”0″/>
<xsl:choose>
<xsl:when test=”count($nodeset[string-length(.) &gt; $length]) &gt; 0″>
<xsl:call-template name=”longest”>
<xsl:with-param name=”nodeset” select=”$nodeset[string-length(.) &gt; $length]”/>
<xsl:with-param name=”length” select=”string-length($nodeset[string-length(.) &gt; $length][1])”/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select=”$nodeset”/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>

Figura C

El resultado en Excel

Listado D - El resultado como XML


<?xml version=”1.0” encoding=”UTF-8″?>
<Workbook xmlns=”urn:schemas-microsoft-com:office:spreadsheet” xmlns:html=”http://www.w3.org/TR/REC-html40″ xmlns:o=”urn:schemas-microsoft-com:office:office” xmlns:ss=”urn:schemas-microsoft-com:office:spreadsheet” xmlns:x=”urn:schemas-microsoft-com:office:excel”>
<DocumentProperties xmlns=”urn:schemas-microsoft-com:office:office”>
<Author xmlns=”urn:schemas-microsoft-com:office:office”>ewoychowsky</Author>
<Company xmlns=”urn:schemas-microsoft-com:office:office”>EAW</Company>
<Version xmlns=”urn:schemas-microsoft-com:office:office”>10.4219</Version>
</DocumentProperties>
<OfficeDocumentSettings xmlns=”urn:schemas-microsoft-com:office:office”>
<DownloadComponents xmlns=”urn:schemas-microsoft-com:office:office” />
<LocationOfComponents xmlns=”urn:schemas-microsoft-com:office:office” HRef=”file:///\\phlfsnt01\DOWNLOAD\OfficeXPSrc\” />
</OfficeDocumentSettings>
<ExcelWorkbook xmlns=”urn:schemas-microsoft-com:office:excel”>
<WindowHeight xmlns=”urn:schemas-microsoft-com:office:excel”>9210</WindowHeight>
<WindowWidth xmlns=”urn:schemas-microsoft-com:office:excel”>15195</WindowWidth>
<WindowTopX xmlns=”urn:schemas-microsoft-com:office:excel”>0</WindowTopX>
<WindowTopY xmlns=”urn:schemas-microsoft-com:office:excel”>60</WindowTopY>
<ProtectStructure xmlns=”urn:schemas-microsoft-com:office:excel”>False</ProtectStructure>
<ProtectWindows xmlns=”urn:schemas-microsoft-com:office:excel”>False</ProtectWindows>
</ExcelWorkbook>
<Styles>
<Style ss:ID=”Default” ss:Name=”Normal”>
<Alignment ss:Vertical=”Bottom” />
<Borders />
<Font />
<Interior />
<NumberFormat />
<Protection />
</Style>
</Styles>
<Worksheet ss:Name=”Sheet1″>
<Table ss:ExpandedColumnCount=”3″ ss:ExpandedRowCount=”6″ x:FullColumns=”1″ x:FullRows=”1″>
<Row>
<Cell>
<Data ss:Type=”String”>Columna 1 Fila 1</Data>
</Cell>
<Cell>
<Data ss:Type=”String”>Columna 2 Fila 1</Data>
</Cell>
<Cell>
<Data ss:Type=”String”>Columna 3 Fila 1</Data>
</Cell>
</Row>
<Row>
<Cell>
<Data ss:Type=”String”>Columna 1 Fila 2</Data>
</Cell>
<Cell>
<Data ss:Type=”String”>Columna 2 Fila 2</Data>
</Cell>
<Cell>
<Data ss:Type=”String”>Columna 3 Fila 2</Data>
</Cell>
</Row>
</Table>
<WorksheetOptions xmlns=”urn:schemas-microsoft-com:office:excel”>
<Print xmlns=”urn:schemas-microsoft-com:office:excel”>
<ValidPrinterInfo xmlns=”urn:schemas-microsoft-com:office:excel” />
<HorizontalResolution xmlns=”urn:schemas-microsoft-com:office:excel”>1200</HorizontalResolution>
<VerticalResolution xmlns=”urn:schemas-microsoft-com:office:excel”>1200</VerticalResolution>
</Print>
<ProtectObjects xmlns=”urn:schemas-microsoft-com:office:excel”>False</ProtectObjects>
<ProtectScenarios xmlns=”urn:schemas-microsoft-com:office:excel”>False</ProtectScenarios>
</WorksheetOptions>
</Worksheet>
</Workbook>

Cómo agregar una aplicación empresarial común a MDT

Encontrando comodidad

Por extraños que parezcan estos ejemplos y por extraño que parezca el escenario de presentarle a mi medio hermano mayor un documento XML, este esfuerzo realmente tiene una aplicación en el mundo real. Imagina que te asignan una tarea en la que la comunidad de usuarios de tu empresa necesita poder revisar el contenido de una tabla de la base de datos y les gustaría verla en Excel. Después de todo, están acostumbrados a Excel y, con suerte, ahora también tú lo estarás.

En Newsmatic nos especializamos en tecnología de vanguardia, contamos con los artículos mas novedosos sobre Software, allí encontraras muchos artículos similares a Cómo convertir un documento XML en una hoja de cálculo de Excel , tenemos lo ultimo en tecnología 2023.

Artículos Relacionados

Subir

Utilizamos cookies para mejorar su experiencia de navegación, mostrarle anuncios o contenidos personalizados y analizar nuestro tráfico. Al hacer clic en “Aceptar todo” usted da su consentimiento a nuestro uso de las cookies.