Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   XML-File die zweite, Kindeskinder? (https://www.delphipraxis.net/185621-xml-file-die-zweite-kindeskinder.html)

khh 25. Jun 2015 07:59

XML-File die zweite, Kindeskinder?
 
Hallo zusammen,
mit
Delphi-Quellcode:
 doc := TXMLDocument.Create;
      try
         doc.XMLVersion := '1.0';
         doc.AppendChild(doc.CreateProcessingInstruction('mso-application', 'progid="Excel.Sheet"'));

         nRoot := doc.CreateElement('Workbook');
         TDOMElement(nRoot).SetAttribute('xmlns', 'urn:schemas-microsoft-com:office:spreadsheet');
         TDOMElement(nRoot).SetAttribute('xmlns:o', 'urn:schemas-microsoft-com:office:office');
         TDOMElement(nRoot).SetAttribute('xmlns:x', 'urn:schemas-microsoft-com:office:excel');
         TDOMElement(nRoot).SetAttribute('xmlns:ss', 'urn:schemas-microsoft-com:office:spreadsheet');
         TDOMElement(nRoot).SetAttribute('xmlns:html', 'http://www.w3.org/TR/REC-html40');
         doc.AppendChild(nRoot);

         nDocProperties := doc.CreateElement('DocumentProperties');
         TDOMElement(nDocProperties).SetAttribute('xmlns', 'urn:schemas-microsoft-com:office:office');
         nRoot.AppendChild(nDocProperties);

         AddTextNode(nDocProperties, 'Author', 'ich');
         AddTextNode(nDocProperties, 'LastAuthor', 'ich');
         AddTextNode(nDocProperties, 'Created', FormatDateTime('yyyy-mm-dd', Now) + 'T' +       FormatDateTime('hh:nn:ss', Now) + 'Z');
         AddTextNode(nDocProperties, 'Version', '15.0');

         nDocSettings := doc.CreateElement('OfficeDocumentSettings');
         TDOMElement(nDocSettings).SetAttribute('xmlns', 'urn:schemas-microsoft-com:office:office');
         nRoot.AppendChild(nDocSettings);

         nDocSettings.AppendChild(doc.CreateElement('AllowPNG'));
         //////////////////////////
         nDocSettings := doc.CreateElement('ExcelWorkbook');
         TDOMElement(nDocSettings).SetAttribute('xmlns', 'urn:schemas-microsoft-com:office:excel');
         nRoot.AppendChild(nDocSettings);
         AddTextNode(nDocSettings, 'WindowHeight', '12435');
         AddTextNode(nDocSettings, 'WindowWidth', '2880');
         AddTextNode(nDocSettings, 'WindowTopX', '0');
         AddTextNode(nDocSettings, 'WindowTopY', '0');
         AddTextNode(nDocSettings, 'ProtectStructure', 'False');
         AddTextNode(nDocSettings, 'ProtectWindows', 'False');
         ////////////////////////////
         nDocSettings := doc.CreateElement('Styles');

         nChild:=   nDocSettings.AppendChild(doc.CreateElement('Style'));
         TDOMElement(nChild).SetAttribute('ss:ID', 'Default');
         TDOMElement(nChild).SetAttribute('ss:Name', 'Normal');

         nRoot.AppendChild(nDocSettings);    
...
...
erstelle ich folgendes Fragment:

Delphi-Quellcode:
<?xml version="1.0" encoding="utf-8"?>
<?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 xmlns="urn:schemas-microsoft-com:office:office">
    <Author>ich</Author>
    <LastAuthor>ich</LastAuthor>
    <Created>2015-06-25T08:50:13Z</Created>
    <Version>15.0</Version>
  </DocumentProperties>
  <OfficeDocumentSettings xmlns="urn:schemas-microsoft-com:office:office">
    <AllowPNG/>
  </OfficeDocumentSettings>
  <ExcelWorkbook xmlns="urn:schemas-microsoft-com:office:excel">
    <WindowHeight>12435</WindowHeight>
    <WindowWidth>2880</WindowWidth>
    <WindowTopX>0</WindowTopX>
    <WindowTopY>0</WindowTopY>
    <ProtectStructure>False</ProtectStructure>
    <ProtectWindows>False</ProtectWindows>
  </ExcelWorkbook>
  <Styles>
    <Style ss:ID="Default" ss:Name="Normal"/>
  </Styles>
</Workbook>
dafür vielen Dank an CCRDude

inner halb des Style-Nodes benötige ich weiter Kind-Notes, wie krieg ich das hin?
Ich verzweifle gerade, wenn ich mir dazu das ganze XML DOM-Tutorial durcharbeiten muss :-(

so soll das Style-Fragment werden:

Delphi-Quellcode:
<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>
    <Style ss:ID="s62">
      <Font ss:FontName="Calibri" x:Family="Swiss" ss:Size="20" ss:Color="#000000" ss:Bold="1" />
    </Style>
</Styles>
ich danke euch gewaltig für eure Hilfen

BUG 25. Jun 2015 09:08

AW: XML-File die zweite, Kindeskinder?
 
Die Lösung steht quasi in deinem Quellcode :gruebel:
Du hast doch schon Kindeskinder (Workbook>Styles>Style). Wie hast du denn Style zu Styles hinzugefügt?

khh 25. Jun 2015 09:34

AW: XML-File die zweite, Kindeskinder?
 
Hallo Robert,
Style hab ich per

Delphi-Quellcode:
  nChild:= nDocSettings.AppendChild(doc.CreateElement('Style'));
hinzugefügt, aber jetzt steh ich irgendwie auf dem Schlauch :-(

nDocSettings.AppendChild(nchild.CreateElement('Fon t'));

funktioniert nicht

BUG 25. Jun 2015 09:40

AW: XML-File die zweite, Kindeskinder?
 
Zitat:

Zitat von khh (Beitrag 1306527)
Delphi-Quellcode:
nDocSettings.AppendChild(nchild.CreateElement('Font'));
funktioniert nicht

Lass mich raten ... das fügt das "Font"-Element dem "Styles"-Element hinzu? :mrgreen:
Du must das Kind schon an den richtigen Knoten anhängen. Vermutlich steht das Element schon in einer Variable ... nur in welcher?
Tipp: Du hast schon Attribute zu dem Element hinzugefügt.

khh 25. Jun 2015 10:39

AW: XML-File die zweite, Kindeskinder?
 
tut mir leid, ich blicks gerade nicht :-(

khh 27. Jun 2015 15:25

AW: XML-File die zweite, Kindeskinder?
 
Hallo zusammen, hallo BUG,
danke für den Denkanstoss. Man muss manchmal nur richtig wach sein :oops:

so funktionierts:

Delphi-Quellcode:
 doc.XMLVersion := '1.0';
         doc.AppendChild(doc.CreateProcessingInstruction('mso-application', 'progid="Excel.Sheet"'));

         nRoot := doc.CreateElement('Workbook');
         TDOMElement(nRoot).SetAttribute('xmlns', 'urn:schemas-microsoft-com:office:spreadsheet');
         TDOMElement(nRoot).SetAttribute('xmlns:o', 'urn:schemas-microsoft-com:office:office');
         TDOMElement(nRoot).SetAttribute('xmlns:x', 'urn:schemas-microsoft-com:office:excel');
         TDOMElement(nRoot).SetAttribute('xmlns:ss', 'urn:schemas-microsoft-com:office:spreadsheet');
         TDOMElement(nRoot).SetAttribute('xmlns:html', 'http://www.w3.org/TR/REC-html40');
         doc.AppendChild(nRoot);

         nDocProperties := doc.CreateElement('DocumentProperties');
         TDOMElement(nDocProperties).SetAttribute('xmlns', 'urn:schemas-microsoft-com:office:office');
         nRoot.AppendChild(nDocProperties);

         AddTextNode(nDocProperties, 'Author', 'ich');
         AddTextNode(nDocProperties, 'LastAuthor', 'ich');
         AddTextNode(nDocProperties, 'Created', FormatDateTime('yyyy-mm-dd', Now) + 'T' + FormatDateTime('hh:nn:ss', Now) + 'Z');
         AddTextNode(nDocProperties, 'Version', '15.0');

         nDocSettings := doc.CreateElement('OfficeDocumentSettings');
         TDOMElement(nDocSettings).SetAttribute('xmlns', 'urn:schemas-microsoft-com:office:office');
         nRoot.AppendChild(nDocSettings);

         nDocSettings.AppendChild(doc.CreateElement('AllowPNG'));
         //////////////////////////
         nDocSettings := doc.CreateElement('ExcelWorkbook');
         TDOMElement(nDocSettings).SetAttribute('xmlns', 'urn:schemas-microsoft-com:office:excel');
         nRoot.AppendChild(nDocSettings);
         AddTextNode(nDocSettings, 'WindowHeight', '12435');
         AddTextNode(nDocSettings, 'WindowWidth', '2880');
         AddTextNode(nDocSettings, 'WindowTopX', '0');
         AddTextNode(nDocSettings, 'WindowTopY', '0');
         AddTextNode(nDocSettings, 'ProtectStructure', 'False');
         AddTextNode(nDocSettings, 'ProtectWindows', 'False');
         ////////////////////////////
         nDocSettings := doc.CreateElement('Styles');

         nChild:= nDocSettings.AppendChild(doc.CreateElement('Style'));
         TDOMElement(nChild).SetAttribute('ss:ID', 'Default');
         TDOMElement(nChild).SetAttribute('ss:Name', 'Normal');

          nRoot.AppendChild(nDocSettings);
          nChildChild:= nChild.AppendChild(doc.CreateElement('Alignment'));
          TDOMElement(nChildChild).SetAttribute('ss:Vertical', 'Bottom');
          nChildChild:= nChild.AppendChild(doc.CreateElement('Borders'));
          nChildChild:= nChild.AppendChild(doc.CreateElement('Font'));
          TDOMElement(nChildChild).SetAttribute('ss:FontName', 'Calibri');
          TDOMElement(nChildChild).SetAttribute('ss:Family', 'Swiss');
          TDOMElement(nChildChild).SetAttribute('ss:Size', '11');
          TDOMElement(nChildChild).SetAttribute('ss:Color', '#000000');

          nChildChild:= nChild.AppendChild(doc.CreateElement('Interior'));
          nChildChild:= nChild.AppendChild(doc.CreateElement('NumberFormat'));
          nChildChild:= nChild.AppendChild(doc.CreateElement('Protection'));
mit diesem Ergebnis:

Delphi-Quellcode:
<?xml version="1.0" encoding="utf-8"?>
<?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 xmlns="urn:schemas-microsoft-com:office:office">
    <Author>ich</Author>
    <LastAuthor>ich</LastAuthor>
    <Created>2015-06-27T16:21:35Z</Created>
    <Version>15.0</Version>
  </DocumentProperties>
  <OfficeDocumentSettings xmlns="urn:schemas-microsoft-com:office:office">
    <AllowPNG/>
  </OfficeDocumentSettings>
  <ExcelWorkbook xmlns="urn:schemas-microsoft-com:office:excel">
    <WindowHeight>12435</WindowHeight>
    <WindowWidth>2880</WindowWidth>
    <WindowTopX>0</WindowTopX>
    <WindowTopY>0</WindowTopY>
    <ProtectStructure>False</ProtectStructure>
    <ProtectWindows>False</ProtectWindows>
  </ExcelWorkbook>
  <Styles>
    <Style ss:ID="Default" ss:Name="Normal">
      <Alignment ss:Vertical="Bottom"/>
      <Borders/>
      <Font ss:Size="11" ss:Color="#000000" ss:Family="Swiss" ss:FontName="Calibri"/>
      <Interior/>
      <NumberFormat/>
      <Protection/>
    </Style>
  </Styles>
</Workbook>

Bernhard Geyer 27. Jun 2015 15:46

AW: XML-File die zweite, Kindeskinder?
 
schemas-microsoft-com:office:spreadsheet? Willst du die xte "Ich kann xlsx-Dateien selbst schreiben"-Klasse entwickeln?

khh 27. Jun 2015 15:53

AW: XML-File die zweite, Kindeskinder?
 
Zitat:

Zitat von Bernhard Geyer (Beitrag 1306858)
schemas-microsoft-com:office:spreadsheet? Willst du die xte "Ich kann xlsx-Dateien selbst schreiben"-Klasse entwickeln?

wenns nicht sein muss, natürlich nicht.
Ich hab aber keine "fertige" Lösung gefunden :-(

Hast du eine ?

Gruss KHH

Bernhard Geyer 27. Jun 2015 16:04

AW: XML-File die zweite, Kindeskinder?
 
Zitat:

Zitat von khh (Beitrag 1306860)
Zitat:

Zitat von Bernhard Geyer (Beitrag 1306858)
schemas-microsoft-com:office:spreadsheet? Willst du die xte "Ich kann xlsx-Dateien selbst schreiben"-Klasse entwickeln?

wenns nicht sein muss, natürlich nicht.
Ich hab aber keine "fertige" Lösung gefunden :-(

Hast du eine ?

Gruss KHH

Mehrere. Die Frage ist

Darf was Kosten?
Darf Excel installiert sein?
Delphi und/oder Lazarus?

mkinzler 27. Jun 2015 16:06

AW: XML-File die zweite, Kindeskinder?
 
Nach ein paar Sekunden Websuche bin ich schon auf folgende Produkte gestoßen:

http://libxl.com/home.html
www.kluug.net/xlsx-ods-delphi.php
http://bytescout.com/products/develo...dsheetsdk.html


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:30 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz