Problem mit der Zahlenformatieren nach XML Import

Das Tabellenkalkulationsprogramm

Moderator: Moderatoren

frozen
**
Beiträge: 29
Registriert: Fr, 16.04.2004 10:37

Problem mit der Zahlenformatieren nach XML Import

Beitrag von frozen »

Hey, ich hab jetzt schon alles mögliche abgesucht im Netzt, aber so ganz fündig bin ich nicht geworden, da dacht ich mir besuchst doch mal das forum und fragst ob hier jemand bescheid weiss.

Also zum Problem. Ich habe eine XML datei die ich per XSLT filter importiere. Soweit alles kein Problem.
Die Sache ist nun die das ich dann eine Tabelle habe in der ziemliche viele Zahlen stehen, die aber irgenwie nicht als Zahlen formatiert sind. Die Zelleneigenschaft ist schon Zahl aber ich kann mit den Werten nicht rechnen. Sie sind alle linksbündig ausgerichtet und haben einen kleinen Strich (z.B. '1234) davor. Wenn ich den bei einem Wert entferne dann ist es eine ganz normale Zahl die rechtsbündig steht und mit der ich auch rechnen kann. Da es aber unheimlich viele Zahlen sind kann ich den Strich nicht überall manuell weg machen, mit "Suchen und Ersetzen" geht es auch nicht da findet er den Strich nicht.
Bevor ich jetzt ein Makro schreibe mal die Frage ob man das irgendwie einfach abstellen kann weil ich vermute, dass es nur eine Formatierung von Calc ist. Bin aber leider nicht fündig geworden.

Hoffe das reicht erstmal, wollte das xml und xslt jetzt nicht unbedingt posten, falls es doch gewünscht wird kann ich es aber noch nachholen.

Gruß
Frozen
Karolus
********
Beiträge: 7532
Registriert: Mo, 02.01.2006 19:48

Re: Problem mit der Zahlenformatieren nach XML Import

Beitrag von Karolus »

Hallo
Das geht schon mit suchen und ersetzen:
'suche nach'
^.*
'ersetzen durch'
&

[x]regulärer Ausdruck


Gruß Karo
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
Gert Seler
*******
Beiträge: 1763
Registriert: Di, 03.10.2006 18:05

Re: Problem mit der Zahlenformatieren nach XML Import

Beitrag von Gert Seler »

Hallo frozen,
Die Zahlen sind als "Text" formatiert. Das Hochkomma ( ' ) und die linksbündige Ausrichtung zeigen dies.
Entferne das Hochkomma,dann sollten Berechnungen möglich sein.
Die Funktion =WERT() wandelt "Textzahlen" in berechenbare "Zahlen" um (siehe Formelassistent) & "OOo_Hilfe".

mfg
Gert
Es gibt nichts gutes, außer man tut es.
Win7_64 / LO_4.4.5.2
hol.sten
******
Beiträge: 871
Registriert: Fr, 18.11.2005 21:21

Re: Problem mit der Zahlenformatieren nach XML Import

Beitrag von hol.sten »

frozen hat geschrieben:Die Sache ist nun die das ich dann eine Tabelle habe in der ziemliche viele Zahlen stehen, die aber irgenwie nicht als Zahlen formatiert sind.
Also wenn du diesen Thread viewtopic.php?t=11065&highlight=xsl gefunden hättest, könntest du dein Problem selbst gelöst haben. Für das Formatieren als Zahl findest du dort nämlich folgendes:

Code: Alles auswählen

        <table:table-cell office:value-type="float">
         <xsl:attribute name="office:value"><xsl:value-of select="year"/></xsl:attribute>
         <text:p><xsl:value-of select="year"/></text:p>
        </table:table-cell>
Und als Erläuterung findet sich dort:
hol.sten hat geschrieben:Bei Zahlen arbeitet OOo mit den XML-Attributen 'office:value-type="float" office:value="1"' wobei "office:value" den tatsächlichen Wert enthält, der anschließend im <text:p>-Tag zu wiederholen ist.
frozen hat geschrieben:Hoffe das reicht erstmal, wollte das xml und xslt jetzt nicht unbedingt posten,
Warum nicht? Sowas hilft ungemein beim Helfen.
frozen hat geschrieben:falls es doch gewünscht wird kann ich es aber noch nachholen.
Wenn sich dein Problem mit obigem Ratschlag lösen läßt, reicht es mir, wenn du in diesem Thread als Beispiel deinen funktionierenden XSLT-Filter samt Beispiel-XML-Datei posten könntest. Ansonsten solltest du natürlich deinen nicht wunschgemäß arbeitenden XSLT-Filter samt Beispiel-XML-Datei in jedem Fall posten.
frozen
**
Beiträge: 29
Registriert: Fr, 16.04.2004 10:37

Re: Problem mit der Zahlenformatieren nach XML Import

Beitrag von frozen »

Wow das ging ja schnell mit den Antworten.

@Karolus: Das mit dem Suchen und Ersetzten geht ja wirklich, man sollte sich das Fenster mal genauer anschauen und die erweiterte Optionen auch benutzen ;) Danke so gehts schomal.

@Gert Seler: Das hatte ich auch schon probiert, war aber keine wirklich schöne Lösung für mich weil ich dann nochmal die Werte kopieren musste. Danke trotzdem.

@hol.sten: Das ist natürlich das beste, leider nicht nutzbar bzw. ich weiss nicht wie. Bin nicht so top in xslt, vielleicht weiss es ja einer. Es ist halt so das im ersten "Run" in den "Fight"-Tags keine Zahlen sondern Text steht, daher kann ich das so nicht verwenden von dir.

Das mit den XML und XSLT Dateien wollt ich mir schenken die erst umzuformatieren zum posten. Habs aber mal gemacht jetzt weil es wohl wirklich hilft eine optimale Lösung zu finden.

XML Datei. Die Struktur ist leider so vorgegeben, sonst würd ich da wohl auch das ein oder andere ändern. Ist hier aber nicht möglich weil die nicht von mir stammt ;(

Code: Alles auswählen

<?xml version="1.0"?>
<Report>
	<Row>
		<Heading>Damage/sec</Heading>
		<Fight2>Enemy 1</Fight2>
		<Fight3>Enemy 2</Fight3>
	</Row>
	<Row>
		<Heading>Char 1</Heading>
		<Fight2>179</Fight2>
		<Fight3>303</Fight3>
	</Row>
	<Row>
		<Heading>Char 2</Heading>
		<Fight2>258</Fight2>
		<Fight3>429</Fight3>
	</Row>
</Report>
Und die XSLT Datei für den Import

Code: Alles auswählen

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
	<xsl:template match="/">
		<office:document-content xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0" xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0" xmlns:ooo="http://openoffice.org/2004/office" xmlns:ooow="http://openoffice.org/2004/writer" xmlns:oooc="http://openoffice.org/2004/calc" xmlns:dom="http://www.w3.org/2001/xml-events" xmlns:xforms="http://www.w3.org/2002/xforms" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" office:version="1.0">
			<office:body>
				<office:spreadsheet>
					<table:table>
						<table:table-row>
							<table:table-cell>
								<text:p>
									<xsl:value-of select="Heading"/>
								</text:p>
							</table:table-cell>
						</table:table-row>
						<xsl:for-each select="Report/Row">
							<table:table-row>
								<table:table-cell>
									<text:p>
										<xsl:value-of select="Heading"/>
									</text:p>
								</table:table-cell>
								<table:table-cell>
									<text:p>
										<xsl:value-of select="Fight2"/>
									</text:p>
								</table:table-cell> 
								<table:table-cell>
									<text:p>
										<xsl:value-of select="Fight3"/>
									</text:p>
								</table:table-cell> 		
							</table:table-row>
						</xsl:for-each>
					</table:table>
				</office:spreadsheet>
			</office:body>
		</office:document-content>
	</xsl:template>
</xsl:stylesheet>
hol.sten
******
Beiträge: 871
Registriert: Fr, 18.11.2005 21:21

Re: Problem mit der Zahlenformatieren nach XML Import

Beitrag von hol.sten »

frozen hat geschrieben:Habs aber mal gemacht
Geht doch.

Die XSLT Datei für den Import mit Zahlen:

Code: Alles auswählen

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:template match="/">
  <office:document-content xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0" xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0" xmlns:ooo="http://openoffice.org/2004/office" xmlns:ooow="http://openoffice.org/2004/writer" xmlns:oooc="http://openoffice.org/2004/calc" xmlns:dom="http://www.w3.org/2001/xml-events" xmlns:xforms="http://www.w3.org/2002/xforms" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" office:version="1.0">
   <office:body>
    <office:spreadsheet>
     <table:table>
      <table:table-row>
       <table:table-cell>
        <text:p>
         <xsl:value-of select="Heading"/>
        </text:p>
       </table:table-cell>
      </table:table-row>
      <xsl:for-each select="Report/Row">
       <table:table-row>
        <table:table-cell>
         <text:p>
          <xsl:value-of select="Heading"/>
         </text:p>
        </table:table-cell>
        <table:table-cell office:value-type="float">
         <xsl:attribute name="office:value"><xsl:value-of select="Fight2"/></xsl:attribute>
         <text:p><xsl:value-of select="Fight2"/></text:p>
        </table:table-cell>
        <table:table-cell office:value-type="float">
         <xsl:attribute name="office:value"><xsl:value-of select="Fight3"/></xsl:attribute>
         <text:p><xsl:value-of select="Fight3"/></text:p>
        </table:table-cell>
       </table:table-row>
      </xsl:for-each>
     </table:table>
    </office:spreadsheet>
   </office:body>
  </office:document-content>
 </xsl:template>
</xsl:stylesheet>
frozen
**
Beiträge: 29
Registriert: Fr, 16.04.2004 10:37

Re: Problem mit der Zahlenformatieren nach XML Import

Beitrag von frozen »

Die XSLT Datei geht leider nicht, wie oben schon geschrieben ersetzt sie die SpaltenTitel durch 0.

Ich habe ja folgendes

Code: Alles auswählen

   <Row>
	  <Heading>Damage/sec</Heading>
	  <Fight2>Enemy 1</Fight2>
	  <Fight3>Enemy 2</Fight3>
   </Row>
Hier ist halt Fight2 und Fight3 text und nicht Zahl. Daher funktioniert die XSLT nicht. Was gehen würde ist wenn man fürs erste Row das als text macht und für alle weiteren so wie du es gepostest hast. Aber da hab ich in den xslt documentationen nichts zu gefunden.
hol.sten
******
Beiträge: 871
Registriert: Fr, 18.11.2005 21:21

Re: Problem mit der Zahlenformatieren nach XML Import

Beitrag von hol.sten »

frozen hat geschrieben:Die XSLT Datei geht leider nicht, wie oben schon geschrieben ersetzt sie die SpaltenTitel durch 0.
Du hast Recht. Ist mir gestern beim Ausprobieren gar nicht aufgefallen.
frozen hat geschrieben:Was gehen würde ist wenn man fürs erste Row das als text macht und für alle weiteren so wie du es gepostest hast. Aber da hab ich in den xslt documentationen nichts zu gefunden.
Jetzt habe ich kapiert, was du brauchst. Warum schreibst du das nicht gleich so ;-)

Und wie gefällt dir dieser XSLF-Filter?

Code: Alles auswählen

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:template match="/">
  <office:document-content xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0" xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0" xmlns:ooo="http://openoffice.org/2004/office" xmlns:ooow="http://openoffice.org/2004/writer" xmlns:oooc="http://openoffice.org/2004/calc" xmlns:dom="http://www.w3.org/2001/xml-events" xmlns:xforms="http://www.w3.org/2002/xforms" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" office:version="1.0">
   <office:body>
    <office:spreadsheet>
     <table:table>
      <xsl:for-each select="Report/Row">

       <xsl:choose>

        <xsl:when test="position()=1">

         <table:table-row>
          <table:table-cell>
           <text:p>
            <xsl:value-of select="Heading"/>
           </text:p>
          </table:table-cell>
          <table:table-cell>
           <text:p>
            <xsl:value-of select="Fight2"/>
           </text:p>
          </table:table-cell>
          <table:table-cell>
           <text:p>
            <xsl:value-of select="Fight3"/>
           </text:p>
          </table:table-cell>
         </table:table-row>

        </xsl:when>

        <xsl:otherwise>

         <table:table-row>
          <table:table-cell>
           <text:p>
            <xsl:value-of select="Heading"/>
           </text:p>
          </table:table-cell>
          <table:table-cell office:value-type="float">
           <xsl:attribute name="office:value"><xsl:value-of select="Fight2"/></xsl:attribute>
           <text:p><xsl:value-of select="Fight2"/></text:p>
          </table:table-cell>
          <table:table-cell office:value-type="float">
           <xsl:attribute name="office:value"><xsl:value-of select="Fight3"/></xsl:attribute>
           <text:p><xsl:value-of select="Fight3"/></text:p>
          </table:table-cell>
         </table:table-row>

        </xsl:otherwise>

       </xsl:choose>

      </xsl:for-each>
     </table:table>
    </office:spreadsheet>
   </office:body>
  </office:document-content>
 </xsl:template>
</xsl:stylesheet>
Ich habe diesmal ein paar Leerzeilen eingebaut, damit du siehst, was geändert wurde. Die Unterscheidung in Text und Zahlenzeilen kann man über ein <xsl:choose> in Verbindung mit einem Test auf die erste Zeile in "<xsl:for-each select="Report/Row">" mit "test="position()=1"" vornehmen. Es geht also mit XSL :-)
frozen
**
Beiträge: 29
Registriert: Fr, 16.04.2004 10:37

Re: Problem mit der Zahlenformatieren nach XML Import

Beitrag von frozen »

Die XSL gefällt mir gut, funktioniert genau so wie ich es haben wollte. Das es irgenwie gehen musste mit xslt war mir schon klar, sonst wäre die Sprache ja gar nicht zu gebrauchen ;) Nur ich kenn mich damit nicht wirklich aus. Naja so jetzt gehts ja wie gewollt

Danke

Ach so eine Frage hätt ich noch, kann man das mit ner for schleife irgenwie lösen das man nicht für jeden fight Eintrag das explicit angeben muss? weil es sind teilweise 50 oder mehr fights drin und da wäre ne for Schleife scho nett so in folgender Art. Nur leider geht es so nicht. Werd nochmal bischen probieren aber wenns jemand spontan weiss wär ich sehr dankbar für ne Lösung ;)

Code: Alles auswählen

...
        <xsl:otherwise>

         <table:table-row>
          <table:table-cell>
           <text:p>
            <xsl:value-of select="Heading"/>
           </text:p>
          </table:table-cell>
          <table:table-cell office:value-type="float">

           <for-each select=".">
             <xsl:attribute name="office:value"><xsl:value-of select="."/></xsl:attribute>
               <text:p><xsl:value-of select="."/></text:p>
              </table:table-cell>
           </for-each>
         </table:table-row>

        </xsl:otherwise>
...
Antworten