LibreOfficeCalcのVBでドキュメントの新規追加・編集・保存・閉じる

Dim document As Object

document = StarDesktop.loadComponentFromURL("private:factory/scalc", "_blank", 0, Array())
'document = StarDesktop.loadComponentFromURL(ConvertToUrl("C:\Users\user\Desktop\test1.ods"), "_blank", 0, Array())

Dim sheet As Object
sheet = document.CurrentController.ActiveSheet
sheet.getCellByPosition(4, 4).setValue 2

document.storeAsURL(ConvertToUrl("C:\Users\user\Desktop\test2.ods"), Array())

document.dispose

LibreOfficeCalcのVBでシートやセルを操作する

選択中のセル情報を取得する。

ThisComponent.CurrentSelection.RangeAddress.StartRow
ThisComponent.CurrentSelection.RangeAddress.EndRow
ThisComponent.CurrentSelection.RangeAddress.StartColumn
ThisComponent.CurrentSelection.RangeAddress.EndColumn

セルを選択する。

Dim dispatcher As Object
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
Dim args(0) as new com.sun.star.beans.PropertyValue
args(0).Name = "ToPoint"
args(0).Value = "$A$4"
dispatcher.executeDispatch(ThisComponent.CurrentController.Frame, ".uno:GoToCell", "", 0, args())

セルを選択する。

ThisComponent.CurrentController.Select(ThisComponent.Sheets.getByIndex(0).getCellByPosition(0, 5))
ThisComponent.CurrentController.Select(ThisComponent.Sheets.getByName("シート名").getCellRangeByName("A2:C2"))

セルから数値の取得と、セルに数値をセットする。

ThisComponent.Sheets.getByIndex(0).getCellByPosition(0, 5).getValue()
ThisComponent.Sheets.getByName("シート名").getCellRangeByName("A2").setValue(1234)

セルから文字列の取得と、セルに文字列をセットする。

ThisComponent.CurrentController.ActiveSheet.getCellByPosition(3, 0).getString()
ThisComponent.CurrentController.ActiveSheet.getCellRangeByName("B1").setString("test1")

セルに関数をセットする。

ThisComponent.CurrentController.ActiveSheet.getCellRangeByName("B5").setFormula("=SUM(B1:B4)")

セルの行と列番号を取得する。

ThisComponent.Sheets.getByIndex(0).getCellByPosition(4, 0).CellAddress.Column
ThisComponent.Sheets.getByName("シート名").getCellByPosition(3, 0).CellAddress.Row

セルの文字に色付けする。

ThisComponent.Sheets.getByIndex(0).getCellByPosition(4, 0).CharColor = rgb(255,0,0)
ThisComponent.Sheets.getByName("シート名").getCellRangeByName("A1:A2").CharColor = rgb(255,0,0)

セルの背景に色付けする。

ThisComponent.Sheets.getByIndex(0).getCellByPosition(4, 0).CellBackColor = rgb(0,255,0)   
ThisComponent.Sheets.getByName("シート名").getCellRangeByName("A1:A2").CellBackColor = rgb(0,255,0)

範囲を指定してセルをコピーする。

Dim sheet As Object
sheet = ThisComponent.Sheets.getByIndex(0)
'選択範囲をコピーする
sheet.copyRange(sheet.getCellRangeByName("コピー先").getCellAddress(), sheet.getCellRangeByName("コピー元").getRangeAddress())
'行をコピーする
sheet.copyRange(sheet.getCellRangeByName("A1").getCellAddress(), sheet.Rows(1).getRangeAddress())

指定範囲の内容や書式をすべてクリアする。

ThisComponent.Sheets.getByIndex(0).getRows.getByIndex(4).clearContents(511)

指定範囲の値のみをクリアする。

ThisComponent.Sheets.getByName("シート名").getRows.getByIndex(6).clearContents(7)

指定範囲を削除する。
(第二引数:1=UP、2=LEFT)

Dim sheet As Object
sheet = ThisComponent.Sheets.getByName("シート名")
sheet.removeRange(sheet.getCellRangeByName("A3:D10").RangeAddress, 1)

行を選択する。

ThisComponent.CurrentController.Select(ThisComponent.Sheets.getByIndex(0).getRows.getByIndex(0))

行を追加する。

ThisComponent.Sheets.getByName("シート名").getRows.insertByIndex(3, 1) '挿入位置/追加行数

行を削除する。

ThisComponent.Sheets.getByIndex(0).getRows.removeByIndex(3, 1) '削除位置/削除行数

列を選択する。

ThisComponent.CurrentController.Select(ThisComponent.Sheets.getByIndex(0).getColumns.getByIndex(0))

列を追加する。

ThisComponent.Sheets.getByName("シート名").getColumns.insertByIndex(3, 1) '挿入位置/追加列数

列を削除する。

ThisComponent.Sheets.getByIndex(0).getColumns.removeByIndex(3, 1) '削除位置/削除列数

入力規則を削除する。

ThisComponent.Sheets.getByIndex(0).getColumns.getByIndex(5).Validation.Type = 0

印刷範囲を設定する。

ThisComponent.CurrentController.ActiveSheet.setPrintAreas(Array(sheet.getCellRangeByName("A1:E30").getRangeAddress()))

現在のシートを取得する。

ThisComponent.CurrentController.ActiveSheet

シートの存在を確認する。

ThisComponent.Sheets.hasByName("シート名")

シートを選択する。

ThisComponent.CurrentController.Select(ThisComponent.Sheets.getByName("シート名").getCellRangeByName("A1"))

シートを追加する。

ThisComponent.Sheets.insertNewByName("新規シート名", 0)

シートを削除する。

ThisComponent.Sheets.removeByName("シート名")

シートをコピーする。

ThisComponent.Sheets.copyByName("コピー元", "新しいシート名", 0) '先頭に追加
ThisComponent.Sheets.copyByName("コピー元", "新しいシート名", ThisComponent.Sheets.getCount()) '末尾に追加

シートを保護、解除する。

sheet.Protect("password")
sheet.Unprotect("password")

自動再計算を無効にする。

ThisComponent.enableautomaticCalculation(False)

Ubuntu上でLet’sEncrypt証明書のマニュアル発行

さくらレンタルサーバーに「Let’s Encrypt」の無料SSL証明書をインストールするために、Ubuntuでマニュアル発行する手順。

gitをインストール。

# apt-get install git

ローカルにコピーする。

$ git clone https://github.com/letsencrypt/letsencrypt

コピーしたディレクトリに移動。

$ cd letsencrypt/

実行環境を最新にするため、Helpを表示する。

$ ./letsencrypt-auto --help

SSL証明書の発行要求。

$ ./letsencrypt-auto certonly --manual -d [ドメイン名]

なんか色々質問されたりするので適宜入力していく。
Press ENTER to continueと出たら出た結果に記載あるファイルを作成し、本番サーバーのwwwルートに/.well-known/acme-challenge/を作成してその中に配置、Enterキーを押下する。

成功するとCongratulation…と表示され、下記場所に証明書が作成される。
※Rootじゃないと読めない

/etc/letsencrypt/live/[ドメイン名]

CentOS7でDHCPサーバーを構築する

DHCPをインストールする。

# yum -y install dhcp

/etc/dhcp/dhcpd.confに下記を追記する。

option domain-name "local.example.com";
subnet 10.0.2.0 netmask 255.255.255.0 {
    range dynamic-bootp 10.0.2.110 10.0.2.119;
    option routers 10.0.2.2;
    option domain-name-servers 10.0.2.101,10.0.2.102;
    default-lease-time 288000;
    max-lease-time 576000;
}

ファイアウォールに例外を追加する。

# firewall-cmd --permanent --add-service=dhcp
# firewall-cmd --reload

サービスを有効にして起動する。

# systemctl enable dhcpd
# systemctl start dhcpd

パスワード間違いでアカウントロックさせる

各設定ファイルを編集する。編集後に再起動する必要はない。
ローカル認証 /etc/pam.d/system-auth
リモート認証 /etc/pam.d/password-auth

# auth句の2行目に追記
auth required pam_tally2.so deny=5 unlock_time=900 even_deny_root
# account句の1行目に追記
account required pam_tally2.so

※denyが試行許容値 ※unlock_timeはロックされる秒数
※even_deny_rootはRootにも適用するという記述

Webコンテンツ操作用のSFTP専用ユーザーを作成する

ユーザーを追加する。

# useradd ftp-user

パスワードを設定する。

# passwd ftp-user

Webサービスが作成したファイルの操作を行うため作成したユーザーをApacheグループに追加する。

# usermod -G apache ftp-user

sshの設定ファイルを編集する。

# vi /etc/ssh/sshd_config

元々あるSubsystem…の構文はコメントブロックする。

Subsystem    sftp    internal-sftp

Chrootでアクセスさせるディレクトリを限定する。

Match User ftp-user
    ChrootDirectory /var/www/
    ForceCommand internal-sftp

CentOS7でのLet’sEncrypt証明書のインストール

Apache、OpenSSL、ModSSLがインストールされている前提です。

インストールするディレクトリに移動。

$ cd /opt/

gitでプログラムを取得する。

# git clone https://github.com/letsencrypt/letsencrypt

ヘルプを表示すると必要コンポーネントをインストールしてくれる。

# cd letsencrypt
# ./letsencrypt-auto --help

証明書の作成。
※事前にapacheのサービスを停止しておく

# ./letsencrypt-auto certonly --standalone -d www.example.com

ApacheのSSL設定。
/etc/httpd/conf.d/ssl.conf の最下部に下記を追記する。

<VirtualHost *:443>
    ServerName www.example.com
    DocumentRoot "/var/www/html/"
    <Directory "/var/www/html/">
        AllowOverride All
    </Directory>
    SSLEngine on
    SSLProtocol -All +TLSv1.2
    SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5:!SEED:!IDEA:!3DES:!RC4:!DH
    SSLHonorCipherOrder On
    SSLCertificateFile /etc/letsencrypt/live/www.example.com/cert.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/www.example.com/privkey.pem
    SSLCertificateChainFile /etc/letsencrypt/live/www.example.com/chain.pem
</VirtualHost>

証明書の自動更新設定。
更新するコマンドは下記の3行。
※ちなみにcertbot-autoに–dry-runオプションを付けるとテストが可能

# /bin/systemctl stop httpd
# /usr/local/letsencrypt/certbot-auto renew --force-renew
# /bin/systemctl start httpd

なのでcrontabで毎月1日の朝4時に更新を行うよう設定。

00 04 01 * * /bin/systemctl stop httpd; /usr/local/letsencrypt/certbot-auto renew --force-renew; /bin/systemctl start httpd