dispatcher = createUnoService("com.sun.star.frame.DispatchHelper") dispatcher.executeDispatch(ThisComponent.CurrentController.Frame, ".uno:JumpToNextUnprotected", "", 0, Array())
LibreOfficeCalcのVBでEnterキー押下時のセル移動方向を変更
sheetSettings =CreateUnoService("com.sun.star.sheet.GlobalSheetSettings") sheetSettings.MoveDirection = com.sun.star.sheet.MoveDirection.RIGHT
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
CentOS7にEPELリポジトリを追加する
インストールする。
# yum -y install epel-release
必要な時以外は無効にしておかないとトラブルの元になる。
enable=1→0
# vi /etc/yum.repos.d/epel.repo
パスワード間違いでアカウントロックさせる
各設定ファイルを編集する。編集後に再起動する必要はない。
ローカル認証 /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