LibreOffice:XLS/XLSX内のすべてのシートを一度にCSVに変換
XLSなりXLSXなりについて、シートごとにCSVファイルを作成することはできるのだが、多数のシートがある場合にはこれではやってられない。一度にCSV出力する方法は無いものかと思い、探してみると以下を発見した。
この手順をためしてみる。
マクロの登録
メニューの以下を選択。
以下のような表示になってるので、「編集」。
空のマクロが登録されてるので、
次のマクロを上書きする。上書きしたら☓ボタンで閉じてしまってよい。
REM ***** BASIC *****
Sub ExportToCsv
document = ThisComponent
' Use the global string tools library to generate a path to save each CSV
GlobalScope.BasicLibraries.loadLibrary("Tools")
FileDirectory = Tools.Strings.DirectoryNameoutofPath(document.getURL(), "/")
' Work out number of sheets for looping over them later.
Sheets = document.Sheets
NumSheets = Sheets.Count - 1
' Set up a propval object to store the filter properties
Dim Propval(1) as New com.sun.star.beans.PropertyValue
Propval(0).Name = "FilterName"
Propval(0).Value = "Text - txt - csv (StarCalc)"
Propval(1).Name = "FilterOptions"
Propval(1).Value ="59,34,0,1,1" 'ASCII 59 = ; 34 = "
For I = 0 to NumSheets
' For each sheet, assemble a filename and save using the filter
document.getCurrentController.setActiveSheet(Sheets(I))
Filename = FileDirectory + "/" + Sheets(I).Name + ".csv"
FileURL = convertToURL(Filename)
document.StoreToURL(FileURL, Propval())
Next I
End Sub
マクロの実行
これは簡単だ。メニューでマクロの実行を選択。
ExportToCsvを探し、「実行」
元のXLS/XLSXと同じフォルダにシート名でCSVが出力される。
ただし、列区切りはカンマではなくセミコロンになっている。別にこれでも構わないが、マクロをいじるとカンマになってくれるのだろうか???
ディスカッション
コメント一覧
まだ、コメントがありません