Linux上のLibreOfficeCalcでマクロを作成して実行する方法

LibreOfficeは、主流で独自仕様のMicrosoft OfficeSuiteに対するFOSSの世界の答えです。主要なOfficeProductivityソフトウェア開発者および寄稿者によって開発され、複数のオペレーティングシステム上のMicrosoftOfficeの完全な代替品を提供します。

Microsoft Excelに相当するLibreOfficeアプリは、LibreOfficeCalcと呼ばれます。それはExcelに似た多くの機能とインターフェースが付属しています。自動化のためのマクロを開発および実行するためのマクロエンジンが組み込まれています。ただし、Visual Basicはサポートしていませんが、独自の言語をサポートしています。 LibreOffice Basic、マクロのプログラミング用。

LibreOfficeスイートは、Ubuntu、Debian、Fedora、CentOSなどのほとんどのLinuxディストリビューションにプリインストールされています。

LibreOfficeCalcでマクロを作成して実行する

まず、サンプルデータを使用してワークシートを作成しましょう。

Macrosオーガナイザーを開くには、次のURLにアクセスしてください。 ツール»マクロ»マクロの整理»LibreOfficeの基本。それは開きます LibreOffice基本マクロ 下のスクリーンショットに示すようなウィンドウ。

マクロの新しい名前を入力し、ウィンドウの右下にある[新規]ボタンをクリックします。

これで、LibreOfficeBasicのマクロエディタ画面が表示されます。

ご覧のとおり、手動で作成されたマクロは、デフォルトで「マイマクロとダイアログ->標準->モジュール1」の下に作成されます。

現在、2つのマクロが存在します。1つは 主要、これはデフォルトの空のマクロであり、その他は テスト、上記で作成したマクロ。次に、テストマクロを拡張します。

マクロは次のタスクを実行します。

  • すべての人が職業作家を持っているかどうかを確認してください
  • 新しいシートを作成する
  • ライターのすべてのエントリを新しいシートに移動します

以下は私たちのマクロです:

サブテストremprofessionWriterを使用してエントリを新しいシートに移動しますdimcrs(8)as object dim j as Integer dim prof as object dim i as Integer dim sh as object dim sh2 as object sh = ThisComponent.Sheets(0)crs(0) = sh.getCellRangeByPosition(0、0、3、0)j = 1 for i = 1〜5 x = 1 prof = sh.GetCellByPosition(3、i)rem完全な行を変数に格納するIf prof.string = "Writer" Then crs(j)= sh.getCellRangeByPosition(0、i、3、i)j = j + 1 End If next i remここで、新しいシートを作成し、このデータをそこに書き込みますThisComponent.Sheets.insertNewByName( "Writers"、1)sh2 = ThisComponent.Sheets(1)i = 0 Do While not IsNull(crs(i))sh2range = sh2.getCellRangeByPosition(0、i、3、i)sh2range.setDataArray(crs(i).getDataArray)i = i + 1ループエンドサブ

上記のマクロをセクションごとに説明します。

サブテスト。 。 。サブ終了

テスト はマクロの名前であるため、コードでは次のように示されます。 サブテスト (sub =サブルーチン)。同様に、このマクロコードをステートメントで終了します サブ終了。メニューからマクロを作成すると、これらのステートメントが自動的に追加されることに注意してください。ただし、ユーザーはここにマクロコードを直接記述でき、サブルーチン名はマクロ名と見なされます。

レム 

LibreOffice Basicのすべてのコメントは、キーワードで始まります レム。 remで始まる完全な行はコメントと見なされます。別の方法は使用することです ' (単一引用符)行頭。

dim crs(8)as object dim j as Integer dim prof as object dim i as Integer dim sh as object dim sh2 as object

これはLibreOfficeBasicの変数宣言です。一般的な構文は 薄暗い 。配列を宣言するには、変数crsと同様の構文を使用します。ここで、8は配列の長さです。

sh = ThisComponent.Sheets(0)crs(0)= sh.getCellRangeByPosition(0、0、3、0)j = 1

ThisComponent 現在のドキュメントを参照します。この場合、それはCalcワークシートです。変数shに、インデックス0、つまり最初のシートを持つSheetをロードします。名前を使用してシートをロードする機能もあります。

次に、関数を呼び出します getCellRangeByPosition オブジェクトshを作成し、配列crsにロードします。セル範囲とは、位置に基づいたシート内のセルのグループを指します。

引数に注意してください、 0, 0 (列0、行0)は、範囲の開始セルを示し、および 3, 0 (列3、行0)は、範囲の終了セルを示しています。したがって 0, 0, 3, 0 サンプルシートの最初の(見出し)行を指します。

for i = 1〜5 x = 1 prof = sh.GetCellByPosition(3、i)rem完全な行を変数に格納するIf prof.string = "Writer" Then crs(j)= sh.getCellRangeByPosition(0、i、3、i )j = j + 1 End If next i

私たちは使用します にとって 行をループするステートメント。 The にとって ブロックはで終わります ステートメント。各反復の終わりに変数iをインクリメントします。

次に、関数を呼び出します GetCellByPosition オブジェクトshの。パラメータを渡します (3、i)つまり、反復ごとに、列3と行iのセルのオブジェクトが変数profで取得されます。

次に、 もしも cellprofの値が「Writer」であるかどうかを確認するステートメント。そうである場合は、関数を再度呼び出します getCellRangeByPosition、今回は 開始行番号と終了行番号の代わりに。ここでも、配列に格納します crs.

ThisComponent.Sheets.insertNewByName( "Writers"、1)sh2 = ThisComponent.Sheets(1)

まず、名前の付いた新しいシートを作成します 作家、位置で 1、インデックスが0から始まるため、2番目の位置です。次に、この新しく作成されたシートのオブジェクトを取得して、このシートにライターのデータを入力できるようにします。

i = 0 Do While not IsNull(crs(i))sh2range = sh2.getCellRangeByPosition(0、i、3、i)sh2range.setDataArray(crs(i).getDataArray)i = i +1ループ

The 一方を行います loopステートメントは、整数値の範囲でループするのではなく、条件に基づいてループする場合に使用されます。 にとって 前に示したように。ここでは、 crs(i) nullではありません。

次に、もう一度電話します getCellRangeByPosition 以前と同様の方法で、新しいシートに範囲オブジェクトを取得します。

最後に、2つの関数を呼び出します。 getDataArray からのデータを返します crs(i)つまり、最初のシートからの1行のデータ(ライターに関する)。このデータを使用して新しいシートのセル範囲に書き込みます setDataArray.

最後に、からマクロを保存します ファイル»すべて保存 オプション。

マクロを実行するには、に移動します ツール»マクロ»マクロの実行 マクロセレクタライブラリの「マイマクロ」ディレクトリからマクロを選択します。クリック 走る マクロ名を選択した後のボタン。

サンプルスプレッドシートで上記のマクロを実行すると、次の結果が得られます。

これは、LibreOfficeでマクロを作成する方法です。詳細とオプションについては、公式ドキュメントを参照してください。

? 乾杯!