投稿

ブログの説明

学校に通わないで学んだことを記しています。間違っているところが何かありましたらご指摘下さると幸いです。コメントに対する返信が遅れる可能性があります。その場合は申し訳ございません。

このブログでは広告を表示しています。このブログ内の投稿記事を検索するには右上の拡大鏡のアイコンを、アーカイブやラベル付けから投稿記事を閲覧するには左上の三重線のアイコンをクリックして下さい。

数式の表示にはMathJaxを利用させていただいています。数式の表示のためにJavaScriptが有効である必要があります。そうでない場合、訳の分からないLaTeXのコードが表示されます。幾何学図形やチャートの表示にはHTML5 CanvasやGoogle Chartを使用しています。その表示のためにもJavaScriptが有効である必要があります。

LibreOffice Calcのダイアログ(ユーザーフォーム)のタブオーダー設定法

イメージ
LibreOffice Calc 6.1では、スプレッドシート上とダイアログ上にコントロールまたはフォームコントロールを配置することができる。ダイアログというのはエクセルでいうところのユーザーフォームのこと。 操作中のコントロールはアクティブになる。コントロールがアクティブな状態にあることは、キーボードからの入力などの操作をそのコントロールが受け付ける状態になっていることを意味している。 キーボードのTabキーを用いてアクティブな状態にあるコントロールを遷移させることができる。遷移させていくときの順番はタブの順序またはタブオーダーと呼ばれている。 コントロールには「タブの順序」と名付けられた属性を持っているものがあり、この値である数値によってアクティブな状態のコントロールが遷移していく順番を決定することができる。 LibreOffice 6.1 Calcには、スプレッドシート上に配置するフォーム・コントロールのタブオーダーを一括で管理することができるダイアログ・ボックスが用意されている。各コントロールの属性一覧を表示するダイアログ・ボックスを開けば「タブの順序」という項目があり、その右端のボタンを押せばタブの順序を一括管理するダイアログ・ボックスが開く。 しかし、ダイアログ上に配置するコントロールに関してはこの機能がどうやらないようだ。そのため、タブの順序を設定するのに手間取ることがある。ダイアログ上に配置したコントロールの数が多くなるとやっかい。 ここではこの問題に対するちょっとした対処方法を書き留めておく。 シート上のコントロールとダイアログ上のコントロール LibreOffice 6.1 Calcでは、スプレッドシート上のコントロールとダイアログ上のコントロールとでは、タブの順序を決める属性値の挙動が異なる。 スプレッドシート上のコントロールにおけるタブの順序を示す属性値では、コントロール間の同一値が受け入れられる。数値は0から始まるが、同じ番号が重複していても問題は起こらない。 例えば5つのコントロールがスプレッドシート上に配置されている場合、各々の属性値を0, 0, 1, 1, 2と設定することが可能。0, 0, 1, 1, 2という順番でアクティブなコントロールが遷移する。 しかし、ダイアログ上のコントロールの場合、コントロー...

LibreOffice Calcでダイアログ上のテキストフィールドからセルへの転記

イメージ
先回 は、LibreOffice Calcのスプレッドシート上に置いたプッシュ・ボタンを押すとダイアログ(フォーム)が開き、そのダイアログ上のコマンド・ボタンを押すとそのダイアログが閉じるマクロをLibreOffice Basicによって作った。 今回は、このダイアログを用いてスプレッドシート上のセルに文字列を入力・転記するコードを書くのが目的。その手順を以下に書き留める。 ここで前提とするLibreOfficeのバージョン LibreOffice 6.1 Calc マクロ作成に使用する言語 LibreOffice Basic (Apache OpenOffice Basic) スプレッドシート・ドキュメントの前提条件 Sheet1という名のシートを1つだけ用意 実装したい機能 今回実現したい機能はおおよそ次のとおり。 LibreOffice Calcのスプレッドシート上に設けたプッシュ・ボタンを押すとダイアログが表示される。 そのダイアログが表示される際、スプレッドシート上のA5というセルに入力されている文字列が、ダイアログ上にあるテキスト・フィールドにも反映される。 ダイアログのテキスト・フィールドに全角または半角の文字列を入力して特定のコマンド・ボタンを押すと、その文字列が10文字以内(11文字未満)であるかどうかを検証し、10文字以内であればその文字列をスプレッドシート上のA5というセルに転記する。 テキスト・フィールドに入力された文字列が11文字以上である場合はその旨を表示して処理を中止する。 ダイアログ上の特定のコマンド・ボタンを押すと、テキスト・フィールドに入力された文字列が削除される。 ダイアログ上の特定のコマンド・ボタンを押すとそのダイアログが非表示になる。 ダイアログとはダイアログ・ボックスのこと。Microsoft Excelではユーザーフォームと呼ばれているものに当たる。 ダイアログ上へ各種コントロールを追加 まずは、前回作成したダイアログ上に各種コントロールを追加する。例えば次のように配置する。 いちばん上にあるのがラベルフィールドと呼ばれるコントロール。上から2番目にあるのがテキスト・フィールドと呼ばれるコントロール。その下にコマンド・ボタンと呼ばれる3つのコントロールが配置されてい...

LibreOffice 6 Calcでフォーム(ダイアログ)を作成してマクロで表示

イメージ
ここで用いたLibreOfficeのバージョンと設定 LibreOffice 6.1 LibreOfficeの「ツール」-「オプション」-「LibreOffice」の「詳細」で「Java実行環境を使用」にチェックが入っていること。「インストール済みのJava実行環境(JRE)」が表示されていること。 LibreOffice 6.1 Calcにはデータを入力したり表示したりするのに使うことができるフォームが用意されている。そしてそのフォームはダイアログと呼ばれている。今回はそのダイアログを作成し、それを表示させたり閉じたりするマクロをLibreOffice Basicを使って実装してみる。 フォームコントロールの作成 LibreOffice Calcを起動。 トップメニューで「表示」-「ツールバー」-「フォームコントロール」という順に選び、フォームコントロールのツールバーを表示させる。 フォームコントロールのツールバーの中から「ボタン」(プッシュ・ボタン)を選び、スプレッドシートの適当な場所にプッシュ・ボタンを作成して配置する。 作成されたプッシュ・ボタンの上でマウスの右クリックメニューを表示させ、その中から「コントロール」を選ぶ。 「属性 プッシュボタン」というダイアログが表示されるので、「全般」タブ内にある「タイトル」の項目を「ダイアログ表示」に変える。 トップメニューで「ファイル」-「保存」を選んで変更内容を保存する。 スプレッドシート上でのプッシュ・ボタンの作成とその属性の設定はこれで終わり。 ダイアログを作成 「閉じる」というコマンド・ボタンだけを持つ単純なダイアログを作成する。 LibreOffice Calcのトップメニューで「ツール」-「マクロ」-「ダイアログの管理」を選ぶ。 そうすると「LibreOffice Basicマクロの管理」というダイアログが開く。「ダイアログ」というタブを選び、ダイアログに表示されている.odsファイル(今開いているスプレッドシート名)を選ぶ。 「新規作成」ボタンを押して「Dialog1」を作成し、「編集」ボタンを押す。 そうすると統合開発環境(IDE)が起動し、ダイアログの雛形が表示されるはず。 ツールバーの中から「ボタン」(コマンド・ボタン)を選び、ダイアログの雛...

Debian GNU/Linux 10でLibreOffice 6 BaseをPostgreSQL 11に接続するには?

イメージ
今回の目標は、LibreOffice BaseとPostgreSQLを接続し、LibreOffice BaseをPostgreSQLデータベース・サーバーのクライアントとして使うこと。その準備をすること。 LibreOffice Baseはデータベース・クライアントのひとつ。標準ではHSQLDBまたはFireBirdというデータベースのクライアントとして働く。LibreOffice Baseは外部のデータベースとも接続することができる。 結論から先に書くと、Debian GNU/Linux 10ではlibreoffice-sdbc-postgresqlというdebパッケージをインストールし、PostogreSQLサーバーが稼動している状態でLibreOffice Baseを起動し、データベース・ウィザードでもってhost=localhost dbname=postogresを対象にして接続すればいい。PostgreSQLのデフォルトのデータベース名はpostgresで、スーパーユーザー名はpostgres。 以下、ここではPostgreSQLとの接続の手順を書き留める。 ここで前提となるソフトウェア構成は次のとおり。 $ lsb_release -a No LSB modules are available. Distributor ID: Debian Description: Debian GNU/Linux 10 (buster) Release: 10 Codename: buster PostgreSQLのバージョンは次のとおり。 $ psql --version psql (PostgreSQL) 11.7 (Debian 11.7-0+deb10u1) LibreOfficeのバージョンは次のとおり。 $ libreoffice --version LibreOffice 6.1.5.2 10(Build:2) PostgreSQLのインストール Debian GNU/Linux 10 (buster)では公式のリポジトリからpostgresqlというdebパッケージをインストールする。これによってPostgreSQLのクライアント用debパッケージも同時にインストールされるはず。 $ su # ...

DockerとTensorFlowをDebian GNU/Linux 10にインストール

ここではDebian GNU/Linux 10 (buster)のユーザーがTensorFlowをインストールして深層学習(ディープ・ラーニング)の準備をする手順を書き留める。 TensorFlowをインストールして管理する方法には色々あるが、ここでは開発者が使用中のマシンの環境から開発環境を分離して個別に管理することができるDockerと呼ばれるコンテナ化ツールを用いる。 CPUのアーキテクチャ x86_64 uname -mで分かる。 GPUの有無 なし $ lspci | grep nvidia -i --colorで有無を確認できる。 Linuxディストロ Debian GNU/Linux 10 (buster) lsb_release -dで分かる。 カーネルとそのリリース番号 Linux 4.19.0-10-amd64 uname -srで分かる。 Pythonのバージョン Python 3.7.3 python3 -Vで分かる。 Dockerのバージョン 19.03.12 インストール後にdocker -vで分かる。 TensorFlowのバージョン 2.1.0 インストール後に import tensorflow as teflo print(teflo.__version__) で分かる。 Dockerをインストール Debian GNU/Linux 10の環境でDockerをインストールするために必要なパッケージをあらかじめインストールしておく。ウェブ・ブラウザを使う場合にはcurlは不要。 $ su # apt update; apt install apt-transport-https ca-certificates curl gnupg-agent software-properties-common PGP公開鍵が記されたgpgというファイルをcurlを用いて取得する。 $ curl -SL https://download.docker.com/linux/debian/gpg -O gpg % Total % Received % Xferd Average Speed Time Time Time Current ...

Debian GNU/Linux 10でLibreOffice 6 BaseをSQLite 3に接続するには?

イメージ
今回の目的は、LibreOffice 6のデータベース・アプリであるBaseを簡易データベースであるSQLite 3に接続し、SQLite 3のクライアントとしてBaseを利用するための準備をすること。この課題を実現する過程で若干の壁にぶちあたったので、そのひとつの解決法をまとめてみた。 前提となるソフトウェア環境 Linuxディストリビューション Debian GNU/Linux 10 (buster) 自分がどのLinuxディストロを使っているかはlsb_release -aで分かる。 インストールするもの LibreOffice 6.1.5 Base OracleかOpenJDKのJavaランタイム環境(JRE) SQLite 3.27.2 libsqlite3odbc.so DB Browser for SQLite 3.10.1(必須ではない) LibreOffice 6 Baseが標準で利用するデータベースはHSQLDBというもの。これはJavaランタイム環境上で動くので、Javaのランタイム環境(JRE)をインストールして環境変数を設定しておく必要がある。 Debian GNU/Linux 10では、公式のリポジトリからopenjdk-11-jreというdebパッケージをインストールすればいいが、libreoffice-baseというdebパッケージをインストールすればおそらく依存関係のために自動的にインストールされるはず。 SQLiteはバージョン3をここでは利用する。Debian GNU/Linux 10の公式リポジトリからsqlite3というdebパッケージをインストールする。 SQLite 3とLibreOffice 6 Baseを繋ぐにはODBCを利用する。そのためにはlibsqliteodbcというdebパッケージをDebian GNU/Linux 10の公式リポジトリからインストールする。 DB Browser for SQLiteはSQLiteにアクセスしてそれを操作することができるグラフィカルなインターフェイスを持った専用のブラウザ。これによってデータベース、テーブル、フィールドを新たに作成し、データを追加・変更・削除することなどができる。インストールしておくと便利な場合があるかもしれないが、必須...

LibreOffice BasicでCalcのセルに値を入力するには?

イメージ
LibreOffice バージョン6.1 Calc LibreOffice Basicを用いてCalcのセルにデータを入力するためには、まず次のようなオブジェクト型の変数を宣言しておく。 Dim Doc As Object Dim Sheet As Object Dim Cell As Object DocはCalcのドキュメントを参照するための変数。Sheetはそのドキュメントの中のシートを参照するための変数。Cellはセルを参照するための変数。オブジェクト型の変数なのでo-という接頭辞を付け、oDoc、oSheet、oCellと名づける流儀もある。 現在のアクティブなドキュメントを得てオブジェクト型変数に代入。 Doc = StarDesktop.CurrentComponent このようにStarDesktop.CurrentComponentを利用してもいいが、これだとLibreOffice Basicの統合開発環境(IDE)上で実行したときにランタイムエラーが生じてしまう。この問題を避けるためにはStarDesktop.CurrentComponentの代わりにThisComponentを使う。 Doc = ThisComponent Sheetsオブジェクトの中から特定のシートを得るためにSheetsの番号を指定し、それをオブジェクト型変数に代入。Sheetsの番号は0から始まる。 Sheet = Doc.getSheets.getByIndex(0) 番号ではなくシートに付けられた固有の名前を指定する方法もある。それにはgetByName()メソッドを次のように用いる。 Sheet = Doc.Sheets.getByName("Sheet1") 特定のシートの特定のセルを得るためには、そのセルを座標系で指定する方法、または、列名と行番号との組み合わせから成るセル名で指定する方法がある。座標系によって指定する場合はgetCellByPosition()メソッドを用いる。そしてそれをオブジェクト型変数に代入。 Cell = Sheet.getCellByPosition(0, 0) セル名で特定のセルを指定する場合にはgetCellRangeByName()メソッドを次のように用いる。 Cell = ...