@PK_64 przerobiłem plik .xslt, bodajże kolegi Dżyszla, ale nie pamiętam skąd dokładnie go pobrałem.
Wzorowałem się na tym link
Mój kod, a piszę to w VBA wygląda tak:
Sub TransformXMLToHTML()
Dim xmlDoc As Object
Dim xslDoc As Object
Dim result As String
Dim xmlFilePath As String
Dim xslFilePath As String
Dim htmlFilePath As String
Dim sFileName As String
On Error GoTo TransformXMLToHTML_Error
' Ścieżki do plików XML i XSL
xmlFilePath = ThisWorkbook.Path & "\UPO_XML\UPO_dla_Fa_2_1.xml"
xslFilePath = ThisWorkbook.Path & "\wizualizacja\UPO_v11dobre.xsl"
sFileName = VBA.Mid$(xmlFilePath, VBA.InStrRev(xmlFilePath, "\") + 1)
sFileName = VBA.Left$(sFileName, VBA.Len(sFileName) - 4)
htmlFilePath = ThisWorkbook.Path & "\" & sFileName & ".html"
' Inicjalizacja obiektów MSXML
Set xmlDoc = CreateObject("MSXML2.DOMDocument.6.0")
Set xslDoc = CreateObject("MSXML2.DOMDocument.6.0")
' Załadowanie plików XML i XSL
xmlDoc.async = False
xmlDoc.resolveExternals = False
xmlDoc.validateOnParse = False
xmlDoc.Load xmlFilePath
xslDoc.async = False
xslDoc.resolveExternals = False
xslDoc.validateOnParse = False
xslDoc.Load xslFilePath
' Sprawdzenie, czy pliki zostały poprawnie załadowane
If xmlDoc.parseError.ErrorCode <> 0 Then
MsgBox "Błąd podczas ładowania pliku XML: " & xmlDoc.parseError.reason
Exit Sub
End If
If xslDoc.parseError.ErrorCode <> 0 Then
MsgBox "Błąd podczas ładowania pliku XSL: " & xslDoc.parseError.reason
Exit Sub
End If
' Transformacja XML przy użyciu XSLT
result = xmlDoc.transformNode(xslDoc)
' Zapisanie wyniku do pliku HTML z kodowaniem UTF-8
WriteStringToFileUTF8 htmlFilePath, result
Debug.Print "Transformacja zakończona sukcesem. Plik HTML zapisany jako " & htmlFilePath
' Otworzenie pliku HTML w domyślnej przeglądarce
Shell "cmd /c start """" """ & htmlFilePath & """", vbNormalFocus
On Error GoTo 0
Exit Sub
TransformXMLToHTML_Error:
Debug.Print "Error " & Err.Number & " " & Err.Description & " w procedurze TransformXMLToHTML"
End Sub
Sub WriteStringToFileUTF8(filePath As String, content As String)
Dim stream As Object
Set stream = CreateObject("ADODB.Stream")
stream.Type = 2 ' adTypeText
stream.Charset = "utf-8"
stream.Open
stream.WriteText content
stream.SaveToFile filePath, 2 ' adSaveCreateOverWrite
stream.Close
End Sub
Po uruchomieniu otrzymuje plik HTML, który później już możesz sobie przerobić do PDF-a.
W załączniku pliki xsl i UPO pobrane z Ksefu.UPO_to_html.rar
Wiem że temat stary, ale może komuś się przyda.UPO_KSeF.rar