none
Componente para exportar datos a EXCEL en .NET 2.0, .NET 1.1 y COM RRS feed

  • Pregunta

  • Hola a todos,

     

    estoy desarrollando un componente que se pueda utilizar tanto en entornos COM (VB 6.0 y VC++), como en .NET 1.1 y .NET 2.0. Tengo varias preguntas:

     

    ¿Cuál es la mejor opción de desarrollo? ¿en .NET 2.0, .NET 1.1 o VC++? Lo digo por la interoperabilidad...

     

    Una vez elegida la tecnología, me encuentro con el siguiente problema. Es necesario que el componente a desarrollar permita recibir una plantilla dependiendo de la aplicación en donde se use el compomente. Habia pensado en plantillas XSL para transformar los datos a mostrar en el Excel, que vendrán en XML por eso de tener un formato común a todos los entornos. Dicho XML formateado será el enviado a Excel, que traga con él. Las plantillas que proporcionará la aplicación cliente serán en realidad ficheros Excel con un formato. Necesito obtener el fichero XSL correspondiente a un fichero Excel. Se que Excel puede guardar en formato XLT, pero creo que ese formato no me vale para pasárselo a mi fichero XML inicial de datos y transformarlo. No sé si me explico correctamente...

     

    ¿cómo puedo hacer esto?

     

    Muchas gracias de antemano.

    miércoles, 11 de junio de 2008 8:14

Todas las respuestas

  •  

    1) Podrías usar .Net sin problemas, ya que a traves de Interop puedes acceder al componente que desarrolles sin ningún problema desde VB6, VC++ o cualquier otro lenguaje que soporte COM.

     

    2) No entiendo muy bien ese flujo de XMLs, XSLs y que quieres sacar a partir de que ¿?

    XLT es un formato binario que no tiene nada que ver con XML, por lo que no podrás transformarlo con nada parecido a XSL. Este formato es bastante oscuro y dificil de crear (lo normal es usar alguna librería de terceros o usar las clases Microsoft.Office.Interop.Excel si no es un escenario de servidor)  

    Excel también puede leer/grabar en XML, usa un esquema que podrás ver si creas una Excel y le das a guardar como XML. Es una cosa del estilo a:

     

    Code Snippet

    <?xml version="1.0"?>
    <?mso-application progid="Excel.Sheet"?>
    <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'>http://www.w3.org/TR/REC-html40">http://www.w3.org/TR/REC-html40">
     <DocumentProperties xmlns="urn:schemas-microsoft-com:office:office">
      <Author>David Hernández Díez</Author>
      <LastAuthor>David Hernández Díez</LastAuthor>
      <Created>2008-06-16T21:09:52Z</Created>
      <Company>Microsoft</Company>
      <Version>12.00</Version>
     </DocumentProperties>
     <ExcelWorkbook xmlns="urn:schemas-microsoft-com:office:excel">
      <WindowHeight>11475</WindowHeight>
      <WindowWidth>13335</WindowWidth>
      <WindowTopX>480</WindowTopX>
      <WindowTopY>45</WindowTopY>
      <ProtectStructure>False</ProtectStructure>
      <ProtectWindows>False</ProtectWindows>
     </ExcelWorkbook>
     <Styles>
      <Style ss:ID="Default" ss:Name="Normal">
       <Alignment ss:Vertical="Bottom"/>
       <Borders/>
       <Font ss:FontName="Calibri" x:Family="Swiss" ss:Size="11" ss:Color="#000000"/>
       <Interior/>
       <NumberFormat/>
       <Protection/>
      </Style>
     </Styles>
     <Worksheet ss:Name="Sheet1">
      <Table ss:ExpandedColumnCount="9" ss:ExpandedRowCount="22" x:FullColumns="1"
       x:FullRows="1" ss:DefaultRowHeight="15">
       <Row ss:Index="4">
        <Cell ss:Index="2"><Data ss:Type="String">asdasd</Data></Cell>
       </Row>
       <Row>
        <Cell ss:Index="5"><Data ss:Type="String">asdasd</Data></Cell>
       </Row>
       <Row ss:Index="7">
        <Cell ss:Index="9"><Data ss:Type="String">asdasd</Data></Cell>
       </Row>
       <Row ss:Index="12">
        <Cell ss:Index="5"><Data ss:Type="String">sadasd</Data></Cell>
       </Row>
       <Row ss:Index="14">
        <Cell ss:Index="3"><Data ss:Type="String">asdasd</Data></Cell>
       </Row>
       <Row ss:Index="16">
        <Cell ss:Index="8"><Data ss:Type="String">asdasd</Data></Cell>
       </Row>
       <Row ss:Index="22">
        <Cell ss:Index="5"><Data ss:Type="String">asdasd</Data></Cell>
       </Row>
      </Table>
      <WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel">
       <PageSetup>
        <Header x:Margin="0.3"/>
        <Footer x:Margin="0.3"/>
        <PageMargins x:Bottom="0.75" x:Left="0.7" x:Right="0.7" x:Top="0.75"/>
       </PageSetup>
       <Selected/>
       <Panes>
        <Pane>
         <Number>3</Number>
         <ActiveRow>21</ActiveRow>
         <ActiveCol>4</ActiveCol>
        </Pane>
       </Panes>
       <ProtectObjects>False</ProtectObjects>
       <ProtectScenarios>False</ProtectScenarios>
      </WorksheetOptions>
     </Worksheet>
     <Worksheet ss:Name="Sheet2">
      <Table ss:ExpandedColumnCount="1" ss:ExpandedRowCount="1" x:FullColumns="1"
       x:FullRows="1" ss:DefaultRowHeight="15">
      </Table>
      <WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel">
       <PageSetup>
        <Header x:Margin="0.3"/>
        <Footer x:Margin="0.3"/>
        <PageMargins x:Bottom="0.75" x:Left="0.7" x:Right="0.7" x:Top="0.75"/>
       </PageSetup>
       <ProtectObjects>False</ProtectObjects>
       <ProtectScenarios>False</ProtectScenarios>
      </WorksheetOptions>
     </Worksheet>
     <Worksheet ss:Name="Sheet3">
      <Table ss:ExpandedColumnCount="1" ss:ExpandedRowCount="1" x:FullColumns="1"
       x:FullRows="1" ss:DefaultRowHeight="15">
      </Table>
      <WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel">
       <PageSetup>
        <Header x:Margin="0.3"/>
        <Footer x:Margin="0.3"/>
        <PageMargins x:Bottom="0.75" x:Left="0.7" x:Right="0.7" x:Top="0.75"/>
       </PageSetup>
       <ProtectObjects>False</ProtectObjects>
       <ProtectScenarios>False</ProtectScenarios>
      </WorksheetOptions>
     </Worksheet>
    </Workbook>

     

     

    lunes, 16 de junio de 2008 21:24
  • Gracias por la respuesta.

     

    Te cuento:

     

    1) Entre el mundo .NET y COM no hay problema, pero ¿entre .NET 1.1 y .NET 2.0? Sé que en .NET 2.0 se puede usar un ensamblado de .NET 1.1, pero ¿se puede usar en .NET 1.1 un ensamblado de .NET 2.0?

     

    2) Quería, porque he visto que se puede, obtener de alguna forma el XSL de la plantilla XLT, pero como dices, es algo complicado y oscuro.

    Lo malo, es que es requisito imprescindible partir de un Excel (ya sea un fichero normal XLS o una plantilla XLT). Por tanto, he optado finalmente en partir de una XLT, y mapearla un XML con la misma estructura que el XML con el que quiero cargar dicho Excel.

    Esto lo he conseguido desde el menú Datos/XML/Origen XML (estoy con la versión 2003). De esta forma, ya por código, se puede hacer el import (con books[1].XmlImportXml()) de los datos XML siguiendo un determinado esquema y dándole a la plantilla Excel el formato que queramos.

    Así lo he hecho finalmente y parece que funciona.

    martes, 17 de junio de 2008 7:13
  • Desde .Net 1.1 NO podrás usar assemblies escritas en .Net 2.0

     

    martes, 17 de junio de 2008 20:06