CSV ファイルをLibreOfficeCalcのスプレッドシートにバッチファイルで転記する

2025年1月9日

LibreOfficeCalc

LibreOffice CalcでCSVをインポートするマクロの使い方をご紹介します。

ステップ1: マクロを追加する

  1. LibreOffice Calcを開きます。
  2. 任意のスプレッドシートを開きます。
  3. 上部メニューの「ツール」から「マクロ」>「マクロを管理」>「LibreOffice Basic」を選択します。
  4. 新しいマクロを作成するために「マクロの保存先」を選択します。たとえば、「標準」内の「My Macros」や現在のドキュメントの「標準」を選びます。
  5. 新しいモジュールを作成し、適当な名前を付けます。
  6. モジュールを開き、以下のコードを貼り付けます。

Sub ImportCSVFalse()
ImportCSV(False)
End Sub
Sub ImportCSVTrue()
ImportCSV(True)
End Sub

Sub ImportCSV(f As Boolean)
    Dim oDoc As Object
    Dim oSheet As Object
    Dim sFilePath As String
    Dim mArgs(2) As New com.sun.star.beans.PropertyValue
    
    sFilePath = "Y:\ticker.csv"
    oDoc = ThisComponent
    oSheet = oDoc.Sheets(0)
    Dim oRange As Object

    ' アクティブなシートを取得
    oSheet = ThisComponent.CurrentController.ActiveSheet
    
    ' 全セルを選択
    oRange = oSheet.getCellRangeByPosition(0, 0, oSheet.Columns.Count-1, oSheet.Rows.Count-1)
    ThisComponent.CurrentController.Select(oRange)
    
    ' 全てのセルのデータをクリア(フォーマットを残す)
    oRange.clearContents(7) ' 7 = 数値、テキスト、数式をクリア
    
    ' Define the properties for the CSV import with Shift_JIS encoding and comma delimiter
    mArgs(0).Name = "FilterName"
    mArgs(0).Value = "Text - txt - csv (StarCalc)"
    mArgs(1).Name = "FilterOptions"
    mArgs(1).Value = "44,34,64,1,1/2" ' Ensure the encoding is set to Shift_JIS
    mArgs(2).Name = "Hidden"
    mArgs(2).Value = True ' Hide the import settings dialog
    
    ' Load the CSV file into a new document
    Dim oCSVDoc As Object
    oCSVDoc = StarDesktop.loadComponentFromURL(ConvertToURL(sFilePath), "_blank", 0, mArgs())
    
    If Not IsNull(oCSVDoc) Then
        Dim oCSVSheet As Object
        oCSVSheet = oCSVDoc.Sheets(0)
        
        ' Adjust the range as needed

        oRange = oSheet.getCellRangeByName("A1:Z1000") ' Change the range based on your data
        Dim oDataArray() As Variant
        oDataArray = oCSVSheet.getCellRangeByName("A1:Z1000").getDataArray()
        
        ' Set the data in the current sheet
        oRange.setDataArray(oDataArray)
        
        ' Close the temporary CSV document
        oCSVDoc.close(True)
    Else
        MsgBox "Failed to load the CSV file."
    End If
    
    ' Store and close the document if f is True
    If f Then
        ThisComponent.store()
        ThisComponent.close(True)
    End If
 
End Sub

フィルターオプションの詳細

FilterOptionsプロパティは、CSVファイルをインポートする際の設定をカンマ区切りの文字列で指定します。各フィールドの意味は次の通りです:

  1. 44: フィールド区切り文字のASCIIコードです。ここではカンマ(,)を示します。
    • 例: カンマは44、タブは9、セミコロンは59、スペースは32。
  2. 34: テキスト区切り文字のASCIIコードです。ここではダブルクォート(")を示します。
    • 例: ダブルクォートは34、シングルクォートは39。
  3. 64: 文字コードセットの指定です。Shift-JIS (64) コードページを使用します。
    • 例: Unicode(UTF-16)は65535、UTF-7は75、UTF-8は76、EUC-JPは69、ISO-2022-JPは72、Shift_JISは64。Windows-932 (日本語) 60
  4. 1: データの読み込みを開始する行番号です。ここでは1行目から開始します。
  5. 1/2: 各列の書式を指定します。列番号/書式の組み合わせをスラッシュ区切りで指定します。
    • 1/2: 1列目は標準の書式、2列目は文字列としてインポート。
    • 書式のオプション:
      • 1: 標準。
      • 2: 文字列。
      • 3: MDY形式の日付。
      • 4: DMY形式の日付。
      • 5: YMD形式の日付。
      • 9: 無視(読み込まない)。

CSV Filter parameters

さまざまなフィルターオプションの例

  1. カンマ区切り、ダブルクォートで囲まれたShift-JISエンコードされたCSVファイル mArgs(1).Value = "44,34,64,1,1/2"
  2. タブ区切り、テキスト区切りなし、UTF-8エンコード mArgs(1).Value = "9,,76,1,1/1/2"
  3. セミコロン区切り、シングルクォートで囲まれたEUC-JPエンコードされたCSVファイル mArgs(1).Value = "59,39,69,1,1/1/1/1/9"
  4. スペース区切り、ダブルクォートで囲まれたISO-2022-JPエンコード mArgs(1).Value = "32,34,72,1,1/2/3/4"
  5. カンマ区切り、テキスト区切りなし、Unicode (UTF-16)エンコード
    mArgs(1).Value = "44,,65535,1,1/1/1/2/5"

1. テキストファイル(CSVファイル)を開く | 鴎来堂ブログ

フィルターオプションのトークンポジション定義

トークンの意味と例

  1. フィールドセパレータ
    • ASCII 値としてのフィールド区切り文字。複数の値はスラッシュ記号 (“/") で区切られます。つまり、値がセミコロンと水平タビュレータで区切られている場合、トークンは 59/9 になります。複数の連続する区切り記号を 1 つとして扱うには、トークンに /MRG を追加します。ファイルに固定幅のフィールドが含まれている場合は、「FIX」を使用します。
    • 例: 44(,)
  2. テキスト区切り文字
    • ASCII 値としてのテキスト区切り記号 (二重引用符の場合は 34、一重引用符の場合は 39)。
    • 例: 34 ("")
  3. 文字セット
    • ファイルで使用されている文字セットコード。具体的なコードは次の表で説明します。
    • 例: 0 (システム)
  4. 読み取りを開始する行番号 (CSVインポート)
    • 読み取りを開始する行番号。
    • 例: 3 (3行目から開始)
  5. 各列のセル形式コード (CSVインポート)
    • 列/書式設定コードのシーケンス。書式設定コードは次の表に記載されています。
    • 例: "1/5/2/1/3/1/4/1"
  6. 言語識別子
    • 10進表記で表される文字列。CSV インポートのユーザー インターフェイスの [言語] リストボックスに相当します。値が 0 または省略された場合、ユーザー・インターフェースの言語 ID が使用されます。言語識別子は、Microsoft 言語識別子に基づいています。
  7. テキストとして引用されたフィールド
    • 文字列 (false または true)。デフォルト値は false
  8. 特殊番号の検出
    • Import: 文字列 (false または true)。デフォルト値は false
    • Export: 文字列 (false または true)。デフォルト値は true
  9. セルの内容を次のように保存 (CSVエクスポート)
    • 文字列 (false または true)。デフォルト値は true
  10. セルの数式のエクスポート (CSVエクスポート)
    • 文字列 (false または true)。デフォルト値は false
  11. スペースの削除 (CSVインポート)
    • 文字列 (false または true)。デフォルト値は false
  12. シートのエクスポート (CSVエクスポート)
    • ドキュメント全体を個々のシート .csv ファイルまたは指定したシートにエクスポートします。
      • 0 または不在: デフォルトの動作
      • -1: すべてのシートについて、各シートは、ベースファイル名とシート名を連結した個別のファイルにエクスポート
      • N: シート数の範囲内で N 番目のシートをエクスポート
  13. 数式としてインポート (CSVインポート)
    • 文字列 (false または true)。デフォルト値は false
  14. バイトオーダーマーク (BOM) を含める (CSVエクスポート)
    • 文字列 (false または true)。デフォルト値は false
  15. 科学的記数法での数値の検出 (CSVインポート)
    • 文字列 (false または true)。デフォルト値は true

ステップ2: マクロを実行する

  1. コードを貼り付けた後、LibreOffice Basicのエディタを閉じます。
  2. マクロを実行するために「ツール」>「マクロ」>「マクロの管理」>「LibreOffice Basic」を開きます。
  3. 作成したマクロを選択し、「実行」ボタンをクリックします。

バッチファイルで動かす

"D:\app2\LibreOfficePortablePrevious\App\libreoffice\program\soffice.exe" D:\data2\ticker.ods --norestore --nolockcheck "macro://ticker/Standard.Module1.ImportCSV(False)"

マクロを実行した後自分で閉じて終了する

"D:\app2\LibreOfficePortablePrevious\App\libreoffice\program\soffice.exe" D:\data2\ticker.ods --norestore --nolockcheck "macro://ticker/Standard.Module1.ImportCSV(True)"

コード一覧

トークン 5 のコードの書式設定

意味

コード内容
1標準
2テキスト
3MM/DD/YYの
4DD/MM/YYの
5YY/MM/DD
6
7
8
9フィールドを無視(インポートしない)
10米国-英語

トークン 3 の文字セット コード

文字セットインデックス
不明0
Windows-1252/WinLatin 1 (西洋)1
Apple Macintosh (西洋)2
DOS/OS2-437/US (ウエスタン)3
DOS/OS2-850/インターナショナル(ウエスタン)4
DOS/OS2-860/ポルトガル語(西洋)5
DOS/OS2-861/アイスランド語(西洋)6
DOS/OS2-863/カナダ-フランス語(西洋)7
DOS/OS2-865/ノルディック(西洋)8
システムデフォルト9
記号10
ASCII/US (西洋)11
ISO-8859-1(西洋)12
ISO-8859-2 (中央ヨーロッパ)13
ISO-8859-3 (ラテン語 3)14
ISO-8859-4 (バルト海)15
ISO-8859-5 (キリル文字)16
ISO-8859-6 (アラビア語)17
ISO-8859-7 (ギリシャ語)18
ISO-8859-8 (ヘブライ語)19
ISO-8859-9 (トルコ語)20
ISO-8859-14 (西洋)21
ISO-8859-15/EURO(西洋)22
DOS/OS2-737 (ギリシャ語)23
DOS/OS2-775 (バルト海)24
DOS/OS2-852 (中央ヨーロッパ)25
DOS/OS2-855 (キリル文字)26
DOS/OS2-857 (トルコ語)27
DOS/OS2-862 (ヘブライ語)28
DOS/OS2-864 (アラビア語)29
DOS/OS2-866/ロシア語(キリル文字)30
DOS/OS2-869/Modern (ギリシャ語)31
DOS/Windows-874 (タイ語)32
Windows-1250/WinLatin 2 (中央ヨーロッパ)33
Windows-1251 (キリル文字)34
Windows-1253 (ギリシャ語)35
Windows-1254 (トルコ語)36
Windows-1255 (ヘブライ語)37
Windows-1256 (アラビア語)38
Windows-1257 (バルト海)39
Windows-1258 (ベトナム語)40
Apple Macintosh (アラビア語)41
Apple Macintosh (中央ヨーロッパ)42
Apple Macintosh/クロアチア語 (中央ヨーロッパ)43
Apple Macintosh (キリル文字)44
サポート対象外: Apple Macintosh (Devanagari)45
サポート対象外: Apple Macintosh (ペルシア語)46
Apple Macintosh (ギリシャ語)47
サポート対象外: Apple Macintosh (グジャラート語)48
サポート対象外: Apple Macintosh (Gurmukhi)49
Apple Macintosh (ヘブライ語)50
Apple Macintosh/アイスランド語(西洋)51
Apple Macintosh/ルーマニア語 (中央ヨーロッパ)52
Apple Macintosh (タイ語)53
Apple Macintosh (トルコ語)54
Apple Macintosh/ウクライナ語 (キリル文字)55
Apple Macintosh (簡体字中国語)56
Apple Macintosh (繁体字中国語)57
Apple Macintosh (日本語)58
Apple Macintosh (韓国語)59
Windows-932 (日本語)60
Windows-936 (簡体字中国語)61
Windows-Wansung-949(韓国語)62
Windows-950 (繁体字中国語)63
Shift-JIS (日本語)64
GB-2312 (簡体字中国語)65
GBT-12345 (繁体字中国語)66
GBK/GB-2312-80 (簡体字中国語)67
BIG5(繁体字中国語)68
EUC-JP (日本語)69
EUC-CN (簡体字中国語)70
EUC-TW (繁体字中国語)71
ISO-2022-JP (日本語)72
ISO-2022-CN (簡体字中国語)73
KOI8-R (キリル文字)74
ユニコード(UTF-7)75
ユニコード (UTF-8)76
ISO-8859-10 (中央ヨーロッパ)77
ISO-8859-13 (中央ヨーロッパ)78
EUC-KR(韓国語)79
ISO-2022-KR(韓国語)80
JIS 0201 (日本語)81
JIS 0208 (日本語)82
JIS 0212 (日本語)83
Windows-Johab-1361 (韓国語)84
GB-18030 (簡体字中国語)85
BIG5-HKSCS (繁体字中国語)86
TIS 620 (タイ語)87
KOI8-U (キリル文字)88
ISCII Devanagari (インド)89
Unicode(Javaの修正UTF-8)90
アドビスタンダード91
アドビシンボル92
PT 154 (ParaType で開発された Windows キリル文字のアジア言語コードページ)93
ユニコードUCS465534
ユニコードUCS265535

bat,LibreOffice

Posted by eightban