Keine Werbeeinblendungen für registrierte User

❤ SPENDEN Sie jetzt für das ❤
🙏 LibreOffice Forum 🙏



  🌹 Danke für Ihre Unterstützung 🌹


Makro: xml-Datei in UTF-8 erstellen?

Alles zur Programmierung im LibreOffice.
Heart1010
Beiträge: 7
Registriert: Mi 28. Nov 2018, 14:27

Makro: xml-Datei in UTF-8 erstellen?

Beitrag von Heart1010 » Di 24. Mai 2022, 15:55

Hallo,

ich habe hier eine LibreOffice Calc Datei gefunden, die eine XML Datei (für SEPA Lastschriften) generiert.

Die erstellte XML-Datei ist aber "Western (Windows 1252)" kodiert.
Was müsste im Makro der Datei verändert werden, damit diese xml Datei nicht mehr im Dateiformat "Western (Windows 1252)" erstellt wird, sondern mit UTF-8?

Das ist der relevante Teil für xml-Generierung (hoffe ich)?

Code: Alles auswählen

'------------------------------------------------------------------------------
' Write all xml snippets into xml file
'------------------------------------------------------------------------------
Sub WriteXmlFiles ()

  Dim iFileNum As Integer
  Dim sXmlBase As String
  Dim sXmlFile As String
  Dim sPathAndFile As String

  Dim sFrstMsg As String
  Dim sRcurMsg As String
  Dim sFnalMsg As String
  Dim sOoffMsg As String
  Dim iNum As String
  Dim sExportDay As String
  Dim sExportMon As String
  Dim sDS As String
  Dim sFL As String

  sExportDay = InterDate2(DateValue(sToday))
  sExportMon = Left(sExportDay,Len(sExportDay)-3)

  'number of all found data records
  iNum = iFrstNum + iRcurNum + iFnalNum + iOoffNum

  If sTabLang = "DE" Then
    sDS = " Datensätze"
    sFL = " in der Datei "
    sXmlBase = sExportMon + "_SEPA-Lastschrift"
  Else
    sDS = " data records"
    sFL = " in the file "
    sXmlBase = sExportMon + "_SEPA-DirectDebit"
  End If

  'create URL of file for SeqType=FRST
  If (iFrstNum > 0) Then
    sXmlFile = sXmlBase & "_frst_" & sExportDay & ".xml"
    sPathAndFile = sFullPath & "/" & sXmlFile

    'delete file if exist
    If FileExists (sPathAndFile) Then
      Kill (sPathAndFile)
    End If

    'open binary file (without LF after each write access)
    iFileNum = Freefile
    Open sPathAndFile For Binary As #iFileNum
    'write all data into binary file
    Put #iFileNum,,SEPA_A_Header
    Put #iFileNum,,SEPA_B_FRST_Group   + SEPA_C_FRST_Header
    Put #iFileNum,,SEPA_D_FRST_Collect + SEPA_E_FRST_Footer
    Put #iFileNum,,SEPA_F_Footer
    'close binary file
    Close #iFileNum
    sFrstMsg = iFrstNum & sDS & sFL & sXmlFile & sLineEnd
  End If

  'create URL of file for SeqType=RCUR
  If (iRcurNum > 0) Then
    sXmlFile = sXmlBase & "_rcur_" & sExportDay & ".xml"
    sPathAndFile = sFullPath & "/" & sXmlFile

    'delete file if exist
    If FileExists (sPathAndFile) Then
      Kill (sPathAndFile)
    End If

    'open binary file (without LF after each write access)
    iFileNum = Freefile
    Open sPathAndFile For Binary As #iFileNum
    'write all data into binary file
    Put #iFileNum,,SEPA_A_Header
    Put #iFileNum,,SEPA_B_RCUR_Group   + SEPA_C_RCUR_Header
    Put #iFileNum,,SEPA_D_RCUR_Collect + SEPA_E_RCUR_Footer
    Put #iFileNum,,SEPA_F_Footer
    'close binary file
    Close #iFileNum
    sRcurMsg = iRcurNum & sDS & sFL & sXmlFile & sLineEnd
  End If

  'create URL of file for SeqType=FNAL
  If (iFnalNum > 0) Then
    sXmlFile = sXmlBase & "_fnal_" & sExportDay & ".xml"
    sPathAndFile = sFullPath & "/" & sXmlFile

    'delete file if exist
    If FileExists (sPathAndFile) Then
      Kill (sPathAndFile)
    End If

    'open binary file (without LF after each write access)
    iFileNum = Freefile
    Open sPathAndFile For Binary As #iFileNum
    'write all data into binary file
    Put #iFileNum,,SEPA_A_Header
    Put #iFileNum,,SEPA_B_FNAL_Group   + SEPA_C_FNAL_Header
    Put #iFileNum,,SEPA_D_FNAL_Collect + SEPA_E_FNAL_Footer
    Put #iFileNum,,SEPA_F_Footer
    'close binary file
    Close #iFileNum
    sFnalMsg = iFnalNum & sDS & sFL & sXmlFile & sLineEnd
  End If

  'create file for SeqType=OOFF
  If (iOoffNum > 0) Then
    sXmlFile = sXmlBase & "_ooff_" & sExportDay & ".xml"
    sPathAndFile = sFullPath & "/" & sXmlFile

    'delete file if exist
    If FileExists (sPathAndFile) Then
      Kill (sPathAndFile)
    End If

    'open binary file (without LF after each write access)
    iFileNum = Freefile
    Open sPathAndFile For Binary As #iFileNum
    'write all data into binary file
    Put #iFileNum,,SEPA_A_Header
    Put #iFileNum,,SEPA_B_OOFF_Group   + SEPA_C_OOFF_Header
    Put #iFileNum,,SEPA_D_OOFF_Collect + SEPA_E_OOFF_Footer
    Put #iFileNum,,SEPA_F_Footer
    'close binary file
    Close #iFileNum
    sOoffMsg = iOoffNum & sDS & sFL & sXmlFile & sLineEnd
  End If

  If iNum > 0 Then
    If sTabLang = "DE" Then
      sMsgString = "Verarbeitete Datensaetze wurden " &_
          "in den folgenden Dateien" & sLineEnd & "gespeichert: " & sLineEnd
      sMsgHeader = "Hinweis"
    Else
      sMsgString = "Processed data records were " &_
          "stored in the following" & sLineEnd & "files: " & sLineEnd
      sMsgHeader = "Info"
    End If
    MsgBox (sMsgString & sFrstMsg & sRcurMsg & sFnalMsg & sOoffMsg, 0, sMsgHeader)
  End If

End Sub
Dateianhänge
lo-sepa-lastschrift-v40.ods
(154.87 KiB) 18-mal heruntergeladen

Benutzeravatar
Ferdinand
Beiträge: 60
Registriert: Di 14. Mai 2019, 19:42

Re: Makro: xml-Datei in UTF-8 erstellen?

Beitrag von Ferdinand » Mi 25. Mai 2022, 19:08

Hallo,

ich verstehe nichts von der LO-Programmierung, daher habe ich gezögert zu antworten. Da mich das Thema SEPA-Lastschrift aber interessiert, habe ich mir die Datei runtergeladen und eine xml-Datei mit den Spieldaten erzeugt. Wenn ich diese dann in notepad++ öffne, zeigt notepad in der Statusleiste an, dass sie durchaus in UTF-8 codiert ist.

Außerdem ist laut Wikipedia (https://de.wikipedia.org/wiki/Windows-1252) der Unterschied zwischen Windows-1252 und UTF-8 gering, er betrifft nur Zeichen, die in den SEPA-Spezifikationen ohnehin nicht erlaubt sind (siehe z. B. https://www.ex-sepa.de/?Einleitung___SE ... eichensatz).

Ich schlage vor, teste einfach mal eine Datei mit Deiner Bank.

Gruß
Ferdinand
Win 10 Pro (x64), LO 6.2.8.2 (x64)

Heart1010
Beiträge: 7
Registriert: Mi 28. Nov 2018, 14:27

Re: Makro: xml-Datei in UTF-8 erstellen?

Beitrag von Heart1010 » Mi 25. Mai 2022, 19:33

Habe ich... und bin quasi vom (Bank)Fach ;)

Die per default erzeugte Datei hat eine falsche/alte pain Version. Diese konnte ich im Makro Editor schon ändern.

Aber die falsche Kodierung führt sofort zur Nichtannahme der xml bei der Bank bzw jeglicher Sepa- Formatprüfer bricht wg 'unbekanntem Format' ab.

Wenn ich die Datei nur kurz in SublimeText öffne u. in utf8 speichere klappt alles (Formatprüfer u. Bank Upload), deswegen soll einfach gleich die per Makro erzeugte Datei mit korrekter Kodierung erstellt werden, dann kann der zusätzliche Umweg über einen Editor eingespart werden.
Ferdinand hat geschrieben:
Mi 25. Mai 2022, 19:08
... in notepad++ öffne, zeigt notepad in der Statusleiste an, dass sie durchaus in UTF-8 codiert ist.
Das würde ja passen... komisch, warum ich in SublimeText Western angezeigt bekomme :| - ich werde es auch noch zusätzlich mit N++ prüfen/testen, Danke!

mikele
Beiträge: 1406
Registriert: Mo 1. Aug 2011, 20:51

Re: Makro: xml-Datei in UTF-8 erstellen?

Beitrag von mikele » Mo 30. Mai 2022, 11:57

Hallo,
ich bin mir nicht sicher, aber ich glaube, dass im Zugriff via

Code: Alles auswählen

Open sPathAndFile For Binary As #iFileNum
die Systemeinstellung zum Zeichensatz genutzt wird (und auch nicht geändert werden kann).
Mehr Optionen bietet das Interface XSimpleFileAccess
Ich empfehle dir Andrew Pitonyak's BASIC-Makros für OpenOffice und LibreOffice in der Bearbeitung von Volker Lenhardt
https://www.uni-due.de/~abi070/ooo.html
und dabei speziell das Kapitel 15.12.2. Export einer XML-Datei
Gruß,
mikele

Heart1010
Beiträge: 7
Registriert: Mi 28. Nov 2018, 14:27

Re: Makro: xml-Datei in UTF-8 erstellen?

Beitrag von Heart1010 » Mo 30. Mai 2022, 12:08

mikele hat geschrieben:
Mo 30. Mai 2022, 11:57
Hallo,
ich bin mir nicht sicher, aber ich glaube, dass im Zugriff via

Code: Alles auswählen

Open sPathAndFile For Binary As #iFileNum
die Systemeinstellung zum Zeichensatz genutzt wird (und auch nicht geändert werden kann).
und dabei speziell das Kapitel 15.12.2. Export einer XML-Datei
Interessant, d.h. welches Systemsetting wäre dann bei mir hier verantwortlich? Wo müsste ich das auf UTF-8 abändern?

mikele
Beiträge: 1406
Registriert: Mo 1. Aug 2011, 20:51

Re: Makro: xml-Datei in UTF-8 erstellen?

Beitrag von mikele » Di 31. Mai 2022, 18:57

Hallo,
hier hat google vielleicht etwas passendes ausgespuckt
https://www.gservon.de/zeichensatz-der- ... e-aendern/
Ich bin mir aber nicht sicher, ob du dir dadurch nicht an anderer Stelle größere Probleme herbeizauberst.
Gruß,
mikele

Wanderer
Beiträge: 754
Registriert: Di 11. Feb 2014, 20:03
Wohnort: Berlin

Re: Makro: xml-Datei in UTF-8 erstellen?

Beitrag von Wanderer » Mi 1. Jun 2022, 09:19

mikele hat geschrieben:
Di 31. Mai 2022, 18:57
...
Ich bin mir aber nicht sicher, ob du dir dadurch nicht an anderer Stelle größere Probleme herbeizauberst.
Mit dieser Variante eher nicht, da nur die Einstellung der "aktuellen Eingabeaufforderung" geändert wird, was aber auch Bedeutet, dass es nur ein LibreOffice betrifft, das danach aus genau dieser Eingabeaufforderung gestartet wird.

Man könnte also eine kleine Batch-Datei verwenden, die erst die Codepage setzt, dann LibreOffice startet...

J.
LO 6.0.7 (32Bit) Win8.1 Pro 32 Bit/ LO 6.3.2 Win10 64Bit / LO 6.0.7 Win7 Pro 64 Bit

Wanderer
Beiträge: 754
Registriert: Di 11. Feb 2014, 20:03
Wohnort: Berlin

Re: Makro: xml-Datei in UTF-8 erstellen?

Beitrag von Wanderer » Mi 1. Jun 2022, 09:28

Heart1010 hat geschrieben:
Mi 25. Mai 2022, 19:33
...
Wenn ich die Datei nur kurz in SublimeText öffne u. in utf8 speichere klappt alles (Formatprüfer u. Bank Upload), ...
Kannst Du mal beide Dateien "vor" und "nach" Sublime hier zum Vergleichen hochladen. Wenn ich raten soll, würde ich auf etwas wie die BOM-Kennzeichnung tippen, die Sublime evtl. automatisch einfügt.
(Zip-Archive sind wohl nicht direkt als Upload möglich, da musst Du dann noch die Endung auf .odt oder ähnliches ändern.)

Jörn
LO 6.0.7 (32Bit) Win8.1 Pro 32 Bit/ LO 6.3.2 Win10 64Bit / LO 6.0.7 Win7 Pro 64 Bit

Heart1010
Beiträge: 7
Registriert: Mi 28. Nov 2018, 14:27

Re: Makro: xml-Datei in UTF-8 erstellen?

Beitrag von Heart1010 » Mi 1. Jun 2022, 10:41

Es ist wie geschrieben... die von LibreCalc erstellte Datei ist ISO-8859 (das darf für eine Sepa xml Datei grundsätzlich nicht sein afaik) - siehe Screenshot 1

Ein simples (Neu)Speichern der Datei in UTF8 (ohne BOM) und alles wäre gut - Prüfer/Bank nimmt diese Datei (die Fehler im Prüfer - siehe Screenshot 2 - sind wg. der erwähnten falschen pain-Version, was ich aber selber fixen kann).
Dateianhänge
xml-Dateien-in-zip-umbenennen-vorher.odt
Datei nach Download in .zip umbenennen
(2.35 KiB) 8-mal heruntergeladen
Screenshot 2
Screenshot 2
2022-06-01_Screenshot_2044.png (92.7 KiB) 269 mal betrachtet
Screenshot 1
Screenshot 1
2022-06-01_Screenshot_2042.png (78.67 KiB) 270 mal betrachtet

Benutzeravatar
karolus
Beiträge: 1644
Registriert: Fr 10. Dez 2010, 10:01

Re: Makro: xml-Datei in UTF-8 erstellen?

Beitrag von karolus » Mi 1. Jun 2022, 13:14

Hallo

natives Basic kann nicht wirklich utf-8 kodierte Dateien schreiben, du musst da eben entsprechende API-services nutzen:

Code: Alles auswählen

sfa = createUnoService("com.sun.star.ucb.SimpleFileAccess")
output = createUnoService("com.sun.star.io.TextOutputStream")
output.Encoding = "UTF-8"
path = "/home/pi/aaxmltest"
if sfa.exists(path) then
    sfa.kill(path)
end if
stream = sfa.openFileWrite(path)
output.setOutputStream(stream)

output.writeString("haste nich gesehen klöäü@€")
output.writeString("haste nich gesehen klöäü@€")
output.writeString("haste nich gesehen klöäü@€")
output.closeOutput()
Davon abgesehen… xml sollte man nicht mit "handgestricktem" Text erzeugen, sondern mit einer Bibliothek die das richtig macht…
LO6.1 Rasbian OS (on ARMHF)

Antworten