Help us understand the problem. What is going on with this article?

LibreOffice Calcでドキュメント保存と同時にCSV形式でも保存する

More than 3 years have passed since last update.

LinuxMint18.1
LibreOffice5.1.6.2
で確認。

ドキュメントに名前をつける

ここではmacro_test.odsという名前で保存しました。

マクロセキュリティレベル設定

マクロを使用するのでセキュリティレベルを変更します。

メニューのツール->オプションを選択して、LibreOfficeのセキュリティマクロセキュリティをクリックします。
スクリーンショット_2017-04-03_18-00-15.png

セキュリティレベルが高になっていると思うので中に変更しOKをクリック。
スクリーンショット_2017-04-03_18-00-30.png

マクロを作成

メニューのツール->マクロ->マクロの管理->LibreOffice basicをクリックします。

マクロの記録先でmacro_test.ods(現在のドキュメント)を選択し新規作成をクリック。
モジュール名はそのままでも良いのでOKをクリック。
スクリーンショット_2017-04-03_17-46-46.png

マクロ編集画面になるので下のマクロを上書きでコピペして編集画面は閉じます。

Sub ExportCSV

Dim oSheet as object
Dim args(1) as new com.sun.star.beans.PropertyValue

oSheet = ThisComponent.getSheets().getByIndex(0)
ThisComponent.CurrentController.setActiveSheet(oSheet)

args(0).Name = "FilterName"
args(0).Value = "Text - txt - csv (StarCalc)"
args(1).Name = "FilterOptions"
args(1).Value = "44,34,76,1,,0,false,true,true,false"

oURL = ThisComponent.getURL()
path = Left(oURL, Len(oURL) - 4) + ".csv"

ThisComponent.storeToURL(path, args())

End Sub

スクリーンショット_2017-04-03_17-54-14.png

CSV保存時のオプション

FilterOptionsパラメータに保存時のオプションを設定しています。
1番目の44は区切り文字をカンマに。
2番目の34はクォート文字をダブルクォートに。
3番目の76は文字コードをUTF-8に。
4番目の1はエクスポート開始行。
5番目はセルタイプの指定ですが省略してます。

オプションの詳細は下のリンクから確認してください。
http://hermione.s41.xrea.com/pukiwiki/index.php?OOoBasic%2FCalc%2FCSV
https://wiki.openoffice.org/wiki/Documentation/DevGuide/Spreadsheets/Filter_Options

イベントにマクロを割り当てる

メニューのツール->カスタマイズをクリックします。

イベントタブを開き、イベントの中から文書を保存した時を選び右のマクロをクリックします。
スクリーンショット_2017-04-03_19-33-36.png

macro_test.odsに先ほど作成したModule1を選択しExportCSVを選択しOKをクリックします。
スクリーンショット_2017-04-03_19-33-48.png

保存先は現在のドキュメントになっていると思うのでそのままにしてOKをクリックします。
スクリーンショット_2017-04-03_19-34-05.png

保存されるか確認

Ctrl+Sやファイル->保存時をしてmacro_test.odsと同じ場所に同名のCSVファイルが作成されていれば成功です。
スクリーンショット_2017-04-03_19-35-56.png

このマクロではシートは1枚だけエクスポートされます。

takeopy
ホビープログラマ。主にPython、Go言語で遊んでます。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away