Excelexport Problem mit leerem Datumsfeld

5. Januar 2011 16:21

Hallo zusammen,

ich habe ein kleines Problem mit dem Excelexport. Das Problem besteht bei den beiden Buttons oben in der Menüleiste "An Microsoft Excel senden" und Sendeoptionen.
Wir verwenden das Sylesheet der build 31781
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:variable name="nbsp">&#160;</xsl:variable>
   <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>
         <Style ss:ID="Dateformat">
            <NumberFormat ss:Format="Short Date"/>
         </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:call-template name="GetWorksheetName"/>
         </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:call-template name="GetWorksheetName"/>
         </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:choose>
                <xsl:when test="@type='PictureBox'">TextBox</xsl:when>
                <xsl:otherwise><xsl:value-of select="@type"/></xsl:otherwise>
              </xsl:choose>
                  </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="(@datatype = 'Date')">
               <xsl:attribute name="ss:StyleID">Dateformat</xsl:attribute>
            </xsl:when>
            <xsl:when test="(@datatype != 'Integer')and(@datatype != 'Decimal')and(@datatype != 'BigInteger')and(@datatype != 'Date')">
               <xsl:attribute name="ss:StyleID">TextBox</xsl:attribute>
            </xsl:when>
         </xsl:choose>
         <Data>
            <xsl:choose>
               <xsl:when test="(@datatype = 'Date')">
                  <xsl:attribute name="ss:Type">DateTime</xsl:attribute>
                  <xsl:value-of select="@data"/>
               </xsl:when>
               <xsl:when test="(@datatype = 'Integer')or(@datatype = 'Decimal')or(@datatype = 'BigInteger')">
                  <xsl:attribute name="ss:Type">Number</xsl:attribute>
                  <xsl:value-of select="@value"/>
               </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:template match="Control[@type='PictureBox']">
    <Cell xmlns="urn:schemas-microsoft-com:office:spreadsheet" ss:StyleID="TextBox">
      <Data ss:Type="String">
        <xsl:value-of select="@name"/>
      </Data>
    </Cell>
  </xsl:template>
   <xsl:template name="GetWorksheetName">
       <xsl:value-of select="@caption"/>
       <xsl:if test="not(@caption) or @caption = ''">
         <xsl:variable name="TableBoxCaption">
           <xsl:value-of select="translate(//Object/@caption, '\/?*[]', '------')"/>
         </xsl:variable>
         <xsl:value-of select="substring($TableBoxCaption,1,27)"/>
         <xsl:value-of select="position()"/>
       </xsl:if>
     </xsl:template>
</xsl:stylesheet>
 


Es funktioniert eigentlich alles wunderbar, Zahlenwerte werden vernünftig übergben und auch Datumsfelder sind ordentlich lesbar.
Ein Problem bekomme ich aber, wenn in meiner Ausgangsübersicht ein leeres Datumsfeld vorhanden ist, dann bekomme ich eine Fehlermeldung in Excel.

Kennt jemand das Problem und kann mir eine Lösung bieten?

Danke.

Gruß
Alexander

Re: Excelexport Problem mit leerem Datumsfeld

5. Januar 2011 16:39

wie lautet denn die fehlermeldung???

wenn ein leeres datumsfeld probleme macht, warum soll es dann daran liegen?

"Das Problem besteht bei den beiden Buttons oben in der Menüleiste "An Microsoft Excel senden" und Sendeoptionen."

Re: Excelexport Problem mit leerem Datumsfeld

5. Januar 2011 17:11

Die Fehlermeldung lautet:
"Während des Ladens sind in folgenden Bereichen Probleme aufgetreten:
Tabelle

Die Tabelle konnte nicht geöffnet werden, weil Fehler aufgetreten sind."

Wir konnten den Fehler auf ein leeres Datumsfeld eingrenzen. Wenn wir die Übersicht so filtern, dass keine leeres Datumsfeld vorhanden ist, klappt der Export, nehmen wir den Filter raus, klappt es nicht und oben genannte Fehlermeldung erscheint.

Re: Excelexport Problem mit leerem Datumsfeld

5. Januar 2011 18:17

so, also ich hab mir grad nen excelexport umgeschrieben. dieser trägt auch ohne probleme leere datumsfelder ein.

mit den buttons arbeite ich nicht, weshalb ich da wenig helfen kann. an excel sollte es aber nicht liegen, wenn's bei mir funkioniert.

was ist das fürn codeschnippsel, den du noch gepostet hast?

Re: Excelexport Problem mit leerem Datumsfeld

5. Januar 2011 20:27

Dieser Codeschnipsel müsste das default XML-Stylesheet sein, welches unter CSide Client/ Stylesheets liegt. Benutzt wird hierfür u.a. die Codeunit 1, 403 usw.

Re: Excelexport Problem mit leerem Datumsfeld

6. Januar 2011 09:23

Hallo BlackJack,

Du hast recht, das ist das Standard-Stylesheet.
Der Fehler liegt irgendwo in diesem Stylesheet. An Excel liegt es nicht, da ich die Übersicht, die ich mittels der Button nicht exportieren kann, mittels Copy+Paste ins Excel bekomme.
Trotzdem sollte die Exportfunktion auch mittels Button funktionieren.

Gruß
Alexander