伊田生活ブログのロゴ
HOME  >  勉強
カテゴリー : 勉強 - メモ
•VBA •LibreOffice •生成AI
公開日:

LibreOfficeでVBAでUTF-8のファイルを書き出したかった話


私は、自宅のパソコンで LibreOffice を使用しています。Microsoft のオフィスソフトを本来は使いたいのですが、私は購入していません。私は自宅では無料で使えるLibreOfficeを利用しています。

以前、VBAで、ファイルをUTF-8で書き出す方法として、以下の記事*を書きました。


上記記事の方法だと、私がこの記事を書いているパソコンにはExcelが入っていないので今 確かめられませんが、たぶん、UTF-8のBOMありで書き出されるのではないかと、思います。

BOMなしで書き込む方法をChatGPT(またはCopilot)に聞いてみようと思いました。

その前に、以下のコードを、私のパソコンのLibreOffice Calc で実行してみることにしました。

Option VBASupport 1

Sub a()
writeToFile ("<meta charset=""UTF-8"">こんにちは")
End Sub


Private Sub writeToFile(htmlTxt)
    currentDir = ActiveWorkbook.Path
    targetFilePath = currentDir + "\" + "test.html"
    
    Open targetFilePath For Output As #1
        Print #1, htmlTxt
    Close #1  
End Sub

このコードが正常に動作する前提で、UTF-8のBOMなしで書いてもらうようにChatGPTに依頼しようと思っていました。

しかし、このコードを私のパソコンで実行すると、以下のエラーが出てしまうことが分かりました。

img_1

まずはこのエラーが出ないようにする必要が、ありました。

そこで、Copilotに、LibreOfficeでUTF-8で書き込めるようにコードを修正するよう頼みました。Copilotは以下のコードを書いてくれました。

Option VBASupport 1

Sub a()
    writeToFile ("<meta charset=""UTF-8"">こんにちは")
End Sub

Private Sub writeToFile(htmlTxt)
    Dim oDoc As Object
    Dim currentDir As String
    Dim targetFilePath As String
    Dim bytes() As Byte
    
    oDoc = ThisComponent
    currentDir = oDoc.URL
    currentDir = Left(currentDir, InStrRev(currentDir, "/") - 1)
    targetFilePath = currentDir + "/" + "test.html"
    
    bytes = StrConv(htmlTxt, vbFromUnicode)
    
    Open targetFilePath For Binary As #1
        Put #1, , bytes
    Close #1
End Sub

上記のコードは、私の環境では、エラーにはならないで実行できますが、UTF-8ではなくShift-JISで出力されます。UTF-8になるように Copilot に頼んで書き直してもらいました。しかし、書き直してもらったコードではエラーが出てしまって、うまくいきませんでした。

#まとめ

LibreOffice の VBA で UTF-8 でファイルに書き込むコードを生成AIに書いてもらおうと思いましたが、今回はうまくいきませんでした。VBAを本格的に使いたいなら、Excel を使ったほうがいいのかもしれません。それでも、無料で使えるのはLibreOffice の利点です。私はプライベートでは、VBAをほとんど使わないので、今後も LibreOffice を使用するつもりです。