Export nach Excel

18. November 2008 12:41

Hallo liebe User

Ich habe ein Problem mit meiner *.xslt Datei für das erstellen einer Formatvorlage für Excel.

Habe das Dokument soweit fertig, aber ich möchte das unser Firmenlogo oben rechts angezeigt wird sobald die Datei im Excel aufgeht.

Wie kann ich das machen? Habe etwa 2 Tage probiert, aber funktionieren tut es nicht.

Vielen Dank schon im voraus.

Gruss Rabit

Re: Export nach Excel

18. November 2008 12:50

Woher nimmst Du das Logo? Aus den Mandantendaten? Hast Du darangedacht, daß blob-Felder erst kalkuliert werden müssen?

Re: Export nach Excel

18. November 2008 14:14

Aus der Tabelle "Company Information". Dort habe ich ein Feld Bild wo das Logo ist.

Das mit den blob-Felder verstehe ich aber nicht wirklich :?:

Re: Export nach Excel

18. November 2008 16:46

Und das ist eben ein BLOB. BLOBs müssen bevor man mit ihnen etwas anfangen kann kalkuliert werden. Setz doch mal ein CALCFIELDS("BLOB-Feld"). Wenn das nichts hilft, schau dir mal im C/SIDE-Reference Guide den Eintrag BLOB an.

Re: Export nach Excel

18. November 2008 17:47

Ist es das was du meinst:

CompInfo.GET
CompInfo.CALCFIELDS(Pictures);
??

Aber wie muss ich das jetzt in meinem XSLT File schreiben?

Sry wenn ich euch auf die nerven gehe aber habe Null Ahnung von XSLT programmieren.

Nochmals vielen Dank für eure Hilfe.

Re: Export nach Excel

18. November 2008 19:31

rabit18 hat geschrieben:Ist es das was du meinst:

CompInfo.GET
CompInfo.CALCFIELDS(Pictures);
??


Genau das mein ich. Nur von XSLT hab ich auch keine Ahnung.

Re: Export nach Excel

19. November 2008 01:09

Hi rabit18!

rabit18 hat geschrieben:Aber wie muss ich das jetzt in meinem XSLT File schreiben?

Such mal hier im Forum hier nach style sheet tool, das ist ein Tool, um Formatvorlagen recht konfortabel zu erstellen.

Gruß, Marc

Re: Export nach Excel

19. November 2008 10:16

Hi rabit18!

rabit18 hat geschrieben:Aber wie muss ich das jetzt in meinem XSLT File schreiben?

Marc Teuber hat geschrieben:Such mal hier im Forum hier nach style sheet tool, das ist ein Tool, um Formatvorlagen recht konfortabel zu erstellen.


Hallo Marc. Mit diesem Tool habe ich die WORD Vorlage schon erstellt, aber für EXCEL gibt es kein solches Tool soviel ich weis :cry:

Re: Export nach Excel

19. November 2008 10:33

Wie sieht denn die fragliche Passage in deinem XSLT-File derzeit aus?

Re: Export nach Excel

19. November 2008 11:15

Also das File ist soweit sogut. Nur brauche ich den Code, damit das Logo noch angezeigt wird. Habe keine Ahnung wie ich das schrieben muss.

Das XSLT-File habe ich von der Default Vorlage übernommen und habe einfach die Schriftart verändert und das Logo sollte jetzt noch rein, aber weis leider nicht wie.

Re: Export nach Excel

19. November 2008 11:40

Du schreibst doch irgendwelche Werte in eine Excel-Tabelle?
Hast Du schonmal versucht einer Zelle den Wert des 'Bild'-Feldes zuzuweisen?
Also:
CompInfo.GET
CompInfo.CALCFIELDS(Pictures);
a1 := compinfo.pictures;
(a1: aktuelle Excel-Zelle)

Re: Export nach Excel

19. November 2008 11:58

Ich weis eben nicht wie ich das tun kann.

Das ist mein Xslt-File:

Code:
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 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">
   <xsl:output method="xml" encoding="UTF-8" standalone="yes" />
   <xsl:template match="/">
      <xsl:processing-instruction name="mso-application">
         <xsl:text>progid="Excel.Sheet"</xsl:text>
      </xsl:processing-instruction>
      <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">
         <xsl:call-template name="output-ExcelWorkbook"/>
         <xsl:call-template name="output-Styles"/>
         <xsl:call-template name="output-Worksheet"/>
      </Workbook>
   </xsl:template>
  <xsl:variable name="DecimalSeparator" select="Object/DecimalSeparator"/>
   <xsl:template name="output-ExcelWorkbook">
      <ExcelWorkbook xmlns="urn:schemas-microsoft-com:office:excel">
         <WindowHeight>9300</WindowHeight>
         <WindowWidth>15135</WindowWidth>
         <WindowTopX>120</WindowTopX>
         <WindowTopY>120</WindowTopY>
         <AcceptLabelsInFormulas/>
         <ProtectStructure>False</ProtectStructure>
         <ProtectWindows>False</ProtectWindows>
      </ExcelWorkbook>
   </xsl:template>
   <xsl:template name="output-Styles">
      <Styles xmlns="urn:schemas-microsoft-com:office:spreadsheet">
         <Style ss:ID="Default" ss:Name="Normal">
            <Alignment ss:Vertical="Bottom"/>
            <Borders/>
            <Font/>
            <Interior/>
            <NumberFormat/>
            <Protection/>
         </Style>
         <Style ss:ID="normalSheet" ss:Name="Normal_Sheet1">
            <Interior/>
            <NumberFormat ss:Format="#,##0_);[Red]\(#,##0\)"/>
         </Style>
         <Style ss:ID="formCaption">
            <Font x:Family="Swiss" ss:Size="12" ss:Bold="1"/>   
         </Style>
         <Style ss:ID="tabCaption">
            <Font x:Family="Swiss" ss:Size="11" ss:Color="#333399" ss:Bold="1"/>
         </Style>
         <Style ss:ID="Label">
            <Alignment ss:Horizontal="Left" ss:Vertical="Bottom" ss:WrapText="1"/>
            <Font ss:FontName="Verdana" x:Family="Swiss" ss:Size="8" ss:Bold="1"/>
            <Interior ss:Color="#C0C0C0" ss:Pattern="Solid"/>
         </Style>
         <Style ss:ID="TextBox">
            <Alignment ss:Horizontal="Left" ss:Vertical="Bottom"/>
            <Font ss:FontName="Verdana" x:Family="Swiss"/>
         </Style>
         <Style ss:ID="TextBoxNumber">
            <Alignment ss:Horizontal="Right" ss:Vertical="Bottom"/>
            <Font ss:FontName="Verdana" x:Family="Swiss"/>
            <NumberFormat ss:Format="Standard"/>
         </Style>

         <Style ss:ID="CheckBox">
            <Alignment ss:Horizontal="Left" ss:Vertical="Bottom"/>
            <Font ss:FontName="Verdana" x:Family="Swiss"/>
         </Style>
         <Style ss:ID="rowheading">
            <Font x:Family="Swiss" ss:Bold="1"/>
            <Interior ss:Color="#C0C0C0" ss:Pattern="Solid"/>
         </Style>
      </Styles>
   </xsl:template>
   <xsl:template name="output-Worksheet">
      <xsl:apply-templates select="Object/Control"/>
   </xsl:template>
   <xsl:template match="Control[@type='TabControl']">
      <xsl:apply-templates select="./Control"/>
   </xsl:template>
   <xsl:template match="Control[@type='TabPage']">
      <Worksheet xmlns="urn:schemas-microsoft-com:office:spreadsheet">
         <xsl:attribute name="ss:Name">
            <xsl:value-of select="@caption"/>
         </xsl:attribute>
         <Table>
            <xsl:attribute name="ss:ExpandedColumnCount">100</xsl:attribute>
            <xsl:attribute name="ss:ExpandedRowCount">100</xsl:attribute>
            <Column ss:AutoFitWidth="0" ss:Width="123.75" ss:Span="1"/>
            <Column ss:Index="3" ss:AutoFitWidth="0" ss:Width="111.75"/>
            <Column ss:AutoFitWidth="0" ss:Width="98.25"/>
            <Row>
               <Cell ss:StyleID="formCaption">
                  <!--<xsl:attribute name="ss:HRef">
                     <xsl:value-of select="//Object/@url"/>
                  </xsl:attribute>-->
                  <Data ss:Type="String">
                     <xsl:value-of select="//Object/@caption"/>
                  </Data>
               </Cell>
            </Row>
            <Row>
               <Cell ss:StyleID="tabCaption">
                  <Data ss:Type="String">
                     <xsl:value-of select="@caption"/>
                  </Data>
               </Cell>
            </Row>
            <xsl:apply-templates select="Row" mode="TabPage"/>
         </Table>
         <WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel">
            <Selected/>
            <Panes>
               <Pane>
                  <Number>3</Number>
                  <ActiveRow>6</ActiveRow>
                  <ActiveCol>1</ActiveCol>
               </Pane>
            </Panes>
            <ProtectObjects>False</ProtectObjects>
            <ProtectScenarios>False</ProtectScenarios>
         </WorksheetOptions>
      </Worksheet>
   </xsl:template>
   <xsl:template match="Control[@type='TableBox']">
      <Worksheet xmlns="urn:schemas-microsoft-com:office:spreadsheet">
         <xsl:attribute name="ss:Name">
            <xsl:variable name="TableBoxCaption">
               <xsl:value-of select="//Object/@caption"/>   
            </xsl:variable>
            <xsl:value-of select="substring($TableBoxCaption,1,30)"/>
         </xsl:attribute>
         <Table>
            <xsl:attribute name="ss:ExpandedColumnCount"><xsl:value-of select="count(Row[1]/Control)"/></xsl:attribute>
            <xsl:attribute name="ss:ExpandedRowCount"><xsl:value-of select="count(Row) + 2"/></xsl:attribute>

            <xsl:for-each select="Row[1]/Control">
               <Column ss:AutoFitWidth="0">
                  <xsl:attribute name="ss:Width">
                     <xsl:value-of select="@width * 0.02857"/>
                  </xsl:attribute>
               </Column>
            </xsl:for-each>
            <Row>
               <Cell ss:StyleID="formCaption">
                  <Data ss:Type="String">
                     <xsl:value-of select="//Object/@caption"/>
                  </Data>
               </Cell>
            </Row>
            <xsl:apply-templates select="Row" mode="TableBox"/>
         </Table>
         <WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel">
            <Selected/>
            <Panes>
               <Pane>
                  <Number>3</Number>
                  <ActiveRow>6</ActiveRow>
                  <ActiveCol>1</ActiveCol>
               </Pane>
            </Panes>
            <ProtectObjects>False</ProtectObjects>
            <ProtectScenarios>False</ProtectScenarios>
         </WorksheetOptions>
      </Worksheet>
   </xsl:template>
   <xsl:template match="Control[@type='Frame']">
      <Worksheet xmlns="urn:schemas-microsoft-com:office:spreadsheet">
         <xsl:attribute name="ss:Name">
            <xsl:value-of select="@caption"/>
            <xsl:if test="@caption = ''">
               <xsl:variable name="TableBoxCaption">
                  <xsl:value-of select="//Object/@caption"/>
               </xsl:variable>
               <xsl:value-of select="substring($TableBoxCaption,1,27)"/><xsl:value-of select="position()"/>
            </xsl:if>
         </xsl:attribute>
         <Table>
            <xsl:attribute name="ss:ExpandedColumnCount">100</xsl:attribute>
            <xsl:attribute name="ss:ExpandedRowCount">100</xsl:attribute>

            <xsl:for-each select="Row[1]/Control">
               <Column ss:AutoFitWidth="0">
                  <xsl:attribute name="ss:Width">
                     <xsl:value-of select="@width * 0.02857"/>
                  </xsl:attribute>
               </Column>
            </xsl:for-each>
            <Row>
               <Cell ss:StyleID="formCaption">
                  <Data ss:Type="String">
                     <xsl:value-of select="//Object/@caption"/>
                  </Data>
               </Cell>
            </Row>
            <xsl:apply-templates select="Row" mode="Frame"/>
         </Table>
         <WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel">
            <Selected/>
            <Panes>
               <Pane>
                  <Number>3</Number>
                  <ActiveRow>6</ActiveRow>
                  <ActiveCol>1</ActiveCol>
               </Pane>
            </Panes>
            <ProtectObjects>False</ProtectObjects>
            <ProtectScenarios>False</ProtectScenarios>
         </WorksheetOptions>
      </Worksheet>
   </xsl:template>
   <xsl:template match="Row" mode="TabPage">
      <Row xmlns="urn:schemas-microsoft-com:office:spreadsheet">
         <xsl:apply-templates select="Control"/>
      </Row>
      <xsl:if test="position()!=last()">
         <Row xmlns="urn:schemas-microsoft-com:office:spreadsheet">
            <xsl:for-each select="./Control">
               <Cell>
                  <xsl:attribute name="ss:StyleID">
                     <xsl:value-of select="@type"/>
                  </xsl:attribute>
               </Cell>
            </xsl:for-each>
         </Row>
      </xsl:if>
   </xsl:template>
   <xsl:template match="Row" mode="TableBox">
      <Row xmlns="urn:schemas-microsoft-com:office:spreadsheet">
         <xsl:apply-templates select="Control"/>
      </Row>
   </xsl:template>
   <xsl:template match="Row" mode="Frame">
      <Row xmlns="urn:schemas-microsoft-com:office:spreadsheet">
         <xsl:apply-templates select="Control"/>
      </Row>
   </xsl:template>
   <xsl:template match="Control[@type='Label']">
      <Cell xmlns="urn:schemas-microsoft-com:office:spreadsheet">
         <xsl:attribute name="ss:StyleID">Label</xsl:attribute>
         <Data>
            <xsl:attribute name="ss:Type">String</xsl:attribute>
            <xsl:value-of select="@value"/>
         </Data>
      </Cell>
   </xsl:template>
   <xsl:template match="Control[@type='TextBox']">
      <Cell xmlns="urn:schemas-microsoft-com:office:spreadsheet">
         <xsl:choose>
            <xsl:when test="contains(@value,'..')">
               <xsl:attribute name="ss:StyleID">TextBox</xsl:attribute>
            </xsl:when>
            <xsl:when test="@value = translate(@value,',.','')">
               <xsl:attribute name="ss:StyleID">TextBox</xsl:attribute>
            </xsl:when>
            <xsl:when test="string(number(translate(@value,',.','11')))!='NaN'">
               <xsl:attribute name="ss:StyleID">TextBoxNumber</xsl:attribute>
            </xsl:when>
            <xsl:otherwise>
               <xsl:attribute name="ss:StyleID">TextBox</xsl:attribute>
            </xsl:otherwise>
         </xsl:choose>
         <Data>
            <xsl:choose>
               <xsl:when test="string(number(translate(@value,',','1')))!='NaN'">
                  <xsl:choose>
                     <xsl:when test="contains(@value,'..')">
                        <xsl:attribute name="ss:Type">String</xsl:attribute>
                        <xsl:value-of select="@value"/>
                     </xsl:when>
                     <xsl:when test="@value = translate(@value,',.','')">
                        <xsl:attribute name="ss:Type">Number</xsl:attribute>
                        <xsl:value-of select="@value"/>
                     </xsl:when>
              <xsl:when test="$DecimalSeparator = '.'">
                <xsl:attribute name="ss:Type">Number</xsl:attribute>
                <xsl:value-of select="translate(@value,',','')"/>
              </xsl:when>
              <xsl:when test="$DecimalSeparator = ','">
                <xsl:attribute name="ss:Type">Number</xsl:attribute>
                <xsl:value-of select="translate(translate(@value,'.',''),',','.')"/>
              </xsl:when>
              <xsl:otherwise>
                        <xsl:attribute name="ss:Type">Number</xsl:attribute>
                        <xsl:value-of select="translate(translate(@value,'.',''),',','.')"/>
                     </xsl:otherwise>
                  </xsl:choose>
               </xsl:when>
               <xsl:otherwise>
                  <xsl:attribute name="ss:Type">String</xsl:attribute>
                  <xsl:value-of select="@value"/>
               </xsl:otherwise>
            </xsl:choose>
         </Data>
      </Cell>
   </xsl:template>
   <xsl:template match="Control[@type='CheckBox']">
      <Cell xmlns="urn:schemas-microsoft-com:office:spreadsheet">
         <xsl:attribute name="ss:StyleID">CheckBox</xsl:attribute>
         <Data>
            <xsl:attribute name="ss:Type">String</xsl:attribute>
            <xsl:value-of select="@value"/>
         </Data>
      </Cell>
   </xsl:template>
</xsl:stylesheet>

Wie und wo füge ich das Bild ein?

Re: Export nach Excel

19. November 2008 15:20

Hast du schonmal versucht, ein Excel-Dokument, welches eine Grafik enthält im XML-Format zu speichern? Es wird dir vermutlich nicht gelingen, mir gelang es jedenfalls nicht.

Daraus ist zu schließen, dass es nicht möglich ist, Bilddaten aus Navision in ein XML-Dokument einzubinden, also ist es auch unmöglich, das XSLT-Stylesheet so anzupassen, dass das Bild angezeigt wird.

Was du tun müsstest ist folgendes:

1.) Bild exportieren.
2.) Pfad in das XML-Dokument schreiben
3.) Nach dem Verarbeiten des XML-Dokuments anhand des XSLT-Stylesheets (was in Excel passiert) ein Makro anschieben, um den Bild-Pfad zu verarbeiten und das Bild in Excel auszugeben.

Im Ergebnis hast du einen ganzen Haufen Probleme, die zu lösen wären.

Die ersten beiden Probleme bekommt man noch recht einfach über die Codeunit 403 gelöst, aber beim dritten sieht's braun aus.

Re: Export nach Excel

19. November 2008 17:11

Mein Chef hat jetzt auch eingesehen das es sich nicht wirklich lohnt und hat deshalb entschieden die Standartvorlage zu benützen und das Logo dann manuell einzufügen.

Ich Danke allen vielmals für die Hilfe.