シートの列に添付する必要がある .txt ファイルがあり、このファイルへのパスがあります。したがって、このパスを読み取り、プログラムで別の列にファイルを添付する必要があります。それを行う方法はありますか?
前もって感謝します。
シートの列に添付する必要がある .txt ファイルがあり、このファイルへのパスがあります。したがって、このパスを読み取り、プログラムで別の列にファイルを添付する必要があります。それを行う方法はありますか?
前もって感謝します。
確かにあります!また、マクロを使用して使用するのは非常に簡単です。
マクロを有効にする
[ツール] > [オプション] メニューに移動し、 OpenOffice.orgの下の [セキュリティ]セクションをクリックします。そこに移動したら、[マクロ セキュリティ] ボタンをクリックします。[セキュリティ レベル] タブで、設定でマクロの実行が許可されていることを確認します。
私が実行するすべてのマクロの作成者であるため、私の設定は低く設定されています。これがあなたのケースになるかどうかわからない場合は、より高い設定を使用することをお勧めします。
注:運が悪い場合や 90 年代に住んでいる場合は、邪悪なマクロが深刻な被害をもたらす可能性があるので注意してください。
新しいマクロの作成
それらを実行できるようになったので、新しいマクロを作成する必要があります。OpenOffice は Python を含む幅広い言語を受け入れますが、何も指定しなかったので、ここでは OO のバージョンの basic を使用します。
Tools > Macros > Organize Macros > OpenOffice.org Basicに移動し、ファイルのツリーの下に新しいモジュールを追加します。意味のある名前を付けます。
実際のマクロ
新しいモジュールを作成すると、エディター画面がポップアップします。以下のコードを記述します。
Sub DataFromFile
Dim FileNo As Integer
Dim CurrentLine As String
Dim File As String
Dim Msg as String
Dim I as Integer
' Get the filename from the cell, in this case B1.
currentSheet=ThisComponent.CurrentController.ActiveSheet
fileName = currentSheet.getCellRangeByName("B1").getString
' Create a new file handler and open it for reading
FileNo = FreeFile
Open fileName For Input As #FileNo
I = 0
' Read file until EOF is reached
Do While not eof(FileNo)
' Read line
Line Input #FileNo, CurrentLine
' Define the range to put the data in as A4:A999 '
curentCell = currentSheet.getCellRangeByName("A4:A999").getCellByPosition(0,I)
' Select the I-th cell on the defined range and put a line of the file there
curentCell.String = CurrentLine
'Increase I by one
I = I + 1
Loop
Close #FileNo
End Sub
それをテストするには、テキスト ファイルを作成して何かを入れ、そのパスをセル B1 に入れ、マクロを実行します。マクロはさまざまな方法で実行できます。テスト目的の場合は、モジュールの作成に使用したのと同じウィンドウで [実行] ボタンを使用するだけです。これは期待される結果です:
注: Linux に慣れていない場合でも、そのファイル パスに惑わされないでください。これは Windows でも同じように機能し、ファイル パス構造です。
マクロのさらなる改良
上記のコードは、できるだけ理解しやすくすることを目的として作成したため、マクロには次のように改善の余地がたくさんあります。
ファイルからデータを取得したら、ほぼ任意の方法でスプレッドシートに表示できます。最初に意図した方法が対処されていない場合はお知らせください。回答を編集します。
これは簡単に修正できます。マクロの実行を自動化する方法はたくさんありますが、私が最もよく知っている方法は、たとえば 5 秒の遅延と組み合わせてループで実行し、ファイルがロードされるとすぐに開始することです。
Sub Main
Do While True
DataFromFile()
Wait(5000)
Loop
End Sub
そしてこれからは、DataFromFile の代わりに Main サブを呼び出す必要があります。
起動時にマクロを実行するには、 [イベント] タブの [ツール] > [カスタマイズ] に移動し、リストから [ドキュメントを開く] を選択して、[マクロ] ボタンをクリックします。マクロを選択するダイアログで、Mainを選択します。ドキュメントを閉じて、もう一度開いてください。
セル範囲に名前を付け、絶対アドレスの代わりにその名前を使用すると、コードを保持して変更する方が簡単です。範囲 (または単一のセル) に名前を付けるには、最初にそれを選択し、[データ] > [範囲の定義] をクリックして名前を付ける必要があります。たとえば、B1 は'FilePath'と呼ばれ、A4:A999 は'DataRange'と呼ばれます。このようにして、それらを変更する必要がある場合、マクロを変更する必要はなく、定義された範囲名だけを変更する必要があります。
アドレスの代わりに範囲を探すようにコードを更新することを忘れないでください。たとえば、次のコードです。
getCellRangeByName("A4:A999")
に書き換えられます
getCellRangeByName("DataRange")
エラーや予期しないイベントを確認して対処することをお勧めします。ファイルが存在しない場合はどうなりますか? 定義された範囲よりも大きい場合はどうなりますか?
参考文献