2014年12月8日月曜日

ST18i に KitKat を入れてみよう。

 まずはブートローダーアンロック。


 メールが届くはずなのが五分待っても来ない。
 もしやと思い迷惑メールフォルダをみるといたw

 IMEI を入力して Submit をクリック。

502 - Bad Gateway

 がーん。
 諦めるしかないか。

 再度挑戦したら Code が来た。

 ST18i の USB デバッグを有効にしようと開発者向けのオプションを探しても見つからず。
 隠れているかと思ってビルド番号を何度かタップしても出てこない。
 おーい。どこにいるんだー。


 設定 - アプリケーションのところに堂々といた。
 昔ってこんなものだったのか。
 すっかり忘れてるなあ。


2014年12月7日日曜日

Xperia Tablet Z (SGP312) をいじってみる。

 KitKat に出来るのかな。

 XperiFirm というツールがあるようなので使ってみよう。

 ダウンロード対象があっているかどうかを確認せずにダウンロードしてる。



 ダウンロード完了。
 一応確認。

 結局 unpack をするんだからダウンロード時にチェックをしなきゃよかった。

 あれ?
 ftf を作るときって FILE_ なんちゃらがいるんじゃなかったっけ。

 でも Decrypting するんだよね。

 もう少し調べてみると FlashTool だけで ftf が作れるらしい。

とりあえず root を取得してみよう。

--- Xperia rootkit 2014/07/19 ---

waiting for device...
* daemon not running. starting it now on port 5037 *
* daemon started successfully *
425 KB/s (21784 bytes in 0.049s)
1387 KB/s (125420 bytes in 0.088s)
2085 KB/s (2336291 bytes in 1.094s)
1831 KB/s (1048328 bytes in 0.558s)
71 KB/s (148 bytes in 0.002s)
13 KB/s (55 bytes in 0.004s)
153 KB/s (629 bytes in 0.003s)
787 KB/s (25863 bytes in 0.032s)
280 KB/s (13592 bytes in 0.047s)
14 KB/s (60 bytes in 0.004s)
72 KB/s (4318 bytes in 0.058s)

getroot start.
running with pid 3881
i have a client like hookers.
starting the dangerous things.
0xd9b50000 is a good number.
cpid1 resumed.
0xd9953dcc is also a good number.
cpid3 resumed.
hack.

rictype=2
244+1 records in
244+1 records out
125420 bytes transferred in 0.009 secs (13935555 bytes/sec)
244+1 records in
244+1 records out
125420 bytes transferred in 0.007 secs (17917142 bytes/sec)
4563+1 records in
4563+1 records out
2336291 bytes transferred in 0.153 secs (15269875 bytes/sec)
2047+1 records in
2047+1 records out
1048328 bytes transferred in 0.069 secs (15193159 bytes/sec)
0+1 records in
0+1 records out
55 bytes transferred in 0.001 secs (55000 bytes/sec)
1+1 records in
1+1 records out
629 bytes transferred in 0.001 secs (629000 bytes/sec)
0+1 records in
0+1 records out
148 bytes transferred in 0.001 secs (148000 bytes/sec)

done root command.
wait 10 seconds...
rebooting...

waiting for device...

removing temporary files...

--- all finished ---
続行するには何かキーを押してください . . .


 再度カーネルを焼いた時の Flashtool のログ。
10/052/2014 14:52:56 - INFO  - <- This level is successfully initialized
10/052/2014 14:52:56 - INFO  - Flashtool Version 0.9.16.0 built on 19-04-2014 19:00:00
10/052/2014 14:52:57 - INFO  - Checking if changes have been made to devices folder.
10/053/2014 14:53:13 - INFO  - Pulling changes from github
10/053/2014 14:53:14 - INFO  - Devices sync finished.
10/053/2014 14:53:18 - INFO  - Device connected with USB debugging off
10/053/2014 14:53:20 - INFO  - For 2011 devices line, be sure you are not in MTP mode
10/053/2014 14:53:59 - INFO  - Selected Bundle for Sony Xperia Tablet Z (SGP312). FW release : 10.5.1.A.0.283. Customization : Taiwan
10/053/2014 14:53:59 - INFO  - Preparing files for flashing
10/053/2014 14:53:59 - INFO  - Please connect your device into flashmode.
10/054/2014 14:54:05 - INFO  - Device disconnected
10/054/2014 14:54:21 - INFO  - Device connected in flash mode
10/054/2014 14:54:21 - INFO  - Opening device for R/W
10/054/2014 14:54:21 - INFO  - Reading device information
10/054/2014 14:54:21 - INFO  - Phone ready for flashmode operations.
10/054/2014 14:54:21 - INFO  - Current device : SGP312 - CB5A1RY5RB - 1273-3859_R4D - 1269-4875_10.5.A.0.230 - GLOBAL-WIFI32G_10.5.1.A.0.283
10/054/2014 14:54:21 - INFO  - Start Flashing
10/054/2014 14:54:21 - INFO  - Processing loader.sin
10/054/2014 14:54:21 - INFO  -     Checking header
10/054/2014 14:54:21 - INFO  -     Flashing data
10/054/2014 14:54:21 - INFO  - Processing of loader.sin finished.
10/054/2014 14:54:22 - INFO  - Loader : S1_Root_5ca3 - Version : APQ8064_39 / Boot version : S1_Boot_Lagan_1.1.1_1 / Bootloader status : ROOTABLE
10/054/2014 14:54:22 - INFO  - No bootdelivery to send
10/054/2014 14:54:22 - INFO  - Processing kernel.sin
10/054/2014 14:54:22 - INFO  -     Checking header
10/054/2014 14:54:22 - INFO  -     Flashing data
10/054/2014 14:54:23 - INFO  - Processing of kernel.sin finished.
10/054/2014 14:54:23 - INFO  - Processing rpm.sin
10/054/2014 14:54:23 - INFO  -     Checking header
10/054/2014 14:54:23 - INFO  -     Flashing data
10/054/2014 14:54:23 - INFO  - Processing of rpm.sin finished.
10/054/2014 14:54:23 - INFO  - Ending flash session
10/054/2014 14:54:23 - INFO  - Flashing finished.
10/054/2014 14:54:23 - INFO  - Please unplug and start your phone
10/054/2014 14:54:23 - INFO  - For flashtool, Unknown Sources and Debugging must be checked in phone settings
10/054/2014 14:54:24 - INFO  - Device connected in flash mode
10/054/2014 14:54:45 - INFO  - Device disconnected


 まあゴチャゴチャとやって root 化成功。




 あとは iDisplay がきちんと動けばなあ。


 root 化時の際に参考にしたブログがこちら。
沙綺のつれづれなるブログ
http://saki-sss.blogspot.jp/2014/09/rootxperia-zandroid-444-1051a0283.html

ftfを焼いてからroot化

さて、先ほどワンクリックroot化は不可能と話したばかりですが、実は10.5.A.0.233のカーネルを焼くことによってワンクリックroot化が可能となります。

手順としては以下の通りです。

1) Flashtoolにて10.5.1.A.0.283を焼き、起動。
ftfファイルの作成はこちらをご覧ください→Flashtoolのみでftfファイルを作成してみました!

2) PlayストアからSuperSUをインストール。
次の手順を行うとWiFiに接続できなくなるので、先にインストールをしておきます。

3) 電源を切り、Flashtoolにて10.5.A.0.233のカーネルのみを焼く。

4) USBデバッグをオンにして、root化ツールを実行。
詳しくはこちらをご覧ください→【root化】Xperia ZをAndroid 4.4 (10.5.A.0.233)へアップデートしました!
EasyRootToolのv12.1が最新ですが、私の環境では上手く動かなかったので、以前使ったものv7を使っています。

5) SuperSUを起動し、バイナリのアップデートを実行。
失敗しますがとりあえず気にしないことにします。

6) 再起動後、電源を切り、Flashtoolにて10.5.1.A.0.283のカーネルのみを焼きます。

これにて終了です。

2014年10月4日土曜日

OS X の ターミナルで遊んでみる。

 まずはプロンプトに今のディレクトリだけを表示させるように変更した。
MacBook-Air:Downloads $ PS1="\W $ "
Downloads $ 
 だだしこれは今の bash に対してのみ有効なだけのコマンドだから次回以降も有効にするべく .bash_profile へ export PS1="\W $ " を追加した
Last login: Sat Oct  4 07:29:21 on ttys000
Downloads $ 

 次に起動音をなくす。
Downloads $ sudo nvram SystemAudioVolume=%80
 こちらはコマンド実行時の再起動については有効だった。
 残念ながらそれ以降は起動音が鳴ってしまう。
 調べてみたものの nvram に保存されている SystemAudioVolume の値がなくなってしまうことが問題になっているんだが原因が不明。

 いきなり話は飛んで MacBook Air 11-inch, Late 2010 で仮想 PC なんぞを始めたせいでディスク容量が厳しくなってきた。
 仮想 PC を動かすにはマシンスペックも厳しいので SSD を JetDrive 500 の 240GB に新調してパーティションを二つに分けて一つを Mavericks をクリーンインストール。もう一つを Boot Camp を使って Windows7 64bit をインストールすることにした。
 光学ドライブはないので USB メモリを使ってインストールをする。
 参考にしたサイトは以下の通り。
 「Mac で ISO イメージをブートできるように USB メモリーに書き込む」
http://blog.kechako.com/entry/2013/06/11/041445

 1. iso イメージを dmg イメージへ変換する。
Downloads $ hdiutil convert -format UDRW -o ./ja_windows_7_ultimate_with_sp1_x64_dvd_618242.dmg ./ja_windows_7_ultimate_with_sp1_x64_dvd_618242.iso
GRMCULXFRER_JA_DVD              (Apple_UDF:0) を読み込み中...
...............................................................................
経過時間:36.274s
速度:87.3M バイト/秒
節約率:0.0%
created: /Users/xueli/Downloads/ja_windows_7_ultimate_with_sp1_x64_dvd_618242.dmg
Downloads $

 2. MacBook Air に何もつないでいない状態にするしてディスク情報を確認する。
Downloads $ diskutil list
/dev/disk0
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:      GUID_partition_scheme                        *240.1 GB   disk0
   1:                        EFI EFI                     209.7 MB   disk0s1
   2:                  Apple_HFS OS X                    178.2 GB   disk0s2
   3:                 Apple_Boot Recovery HD             650.0 MB   disk0s3
   4:                  Apple_HFS MBA 2                   60.9 GB    disk0s4

 3. イメージを書き込む USB メモリを MacBook Air に挿してディスク情報を確認する。
 今回は 16GB のものにした。
Downloads $ diskutil list
/dev/disk0
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:      GUID_partition_scheme                        *240.1 GB   disk0
   1:                        EFI EFI                     209.7 MB   disk0s1
   2:                  Apple_HFS OS X                    178.2 GB   disk0s2
   3:                 Apple_Boot Recovery HD             650.0 MB   disk0s3
   4:                  Apple_HFS MBA 2                   60.9 GB    disk0s4
/dev/disk1
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:                            GRMCPRXFRER_JA_DVD     *16.1 GB    disk1

Downloads $ 

 4. dmg ファイルを直接ディスクへ書き込むために USB メモリを解放する。
Downloads $ diskutil umountDisk /dev/disk1
Unmount of all volumes on disk1 was successful

5. 先ほど作った dmg ファイルを USB メモリに書き込む。
Downloads $ sudo dd bs=8192 if=./ja_windows_7_ultimate_with_sp1_x64_dvd_618242.dmg of=/dev/disk1
Password:
405436+1 records in
405436+1 records out
3321335808 bytes transferred in 525.666310 secs (6318335 bytes/sec)

 6. 書き込みが終わった USB メモリを取り出す。
Downloads $ diskutil eject /dev/disk1
Disk /dev/disk1 ejected

 7. USB メモリから起動する。

 8. はずなのに起動時の選択肢に USB メモリが出てこないので調査する。
 「外部 USB 記憶装置から起動する (Intel ベースの Mac)」
http://support.apple.com/kb/HT1948?viewlocale=ja_JP
 起動ディスクのメニューから出てこないところをみると USB メモリの中身がおかしいのかな。
 iso ファイルを書き込んでもだめだった。


2014年9月28日日曜日

Mavericks をクリーンインストール

 MacBook Air 11-inch, Late 2010 に VirtualBox を入れて仮想 PC として Windows8 をインストールした。
 そうしたらディスク残り容量は厳しくなるしファンは回りまくって間違いなく寿命が縮む使い方なので MacBook Air か Pro を新調しようと思ってどれにしようか探していたところ JetDrive 500 なる製品を見つけた。
http://jp.transcend-info.com/apple/jetdrive/

 これと Boot Camp を使えば普通に使えそうなので問題は解決だな。
 Boot Camp Support Software 4 までしか対応していないようなので Windows7 にする必要があるが問題はなし。
http://support.apple.com/kb/DL1630?viewlocale=ja_JP

 そんな訳で容量の 480G の JetDrive を買おうと思ったら 11-inch は非対応のこと。
 どうやら両面に SSD を実装をすると本体に干渉しちゃうようで片面のみの実装となるからだそうだ。
 諦めて 240G のものを秋葉館でポチった。
http://www.akibakan.com/BCAK0080035/
 内蔵している 128G の SSD は付属のケースで外付けドライブとして使えるし SSD 交換時に使用する工具類も全部そろっているのでよく考えられている製品である。

 次の日に到着。
 新しい SSD になったので勉強がてら Mavericks をクリーンインストールすることにした。
 こちらのサイト「カンタン!! OSX 10.9 MavericksのインストールUSBを作る!」をを参考にしてやってみることにした。
http://basssomasunduo.hatenablog.jp/entry/2013/12/12/204402

$ sudo /Applications/Install\ OS\ X\ Mavericks.app/Contents/Resources/createinstallmedia --volume /Volumes/Untitled/ --applicationpath /Applications/Install\ OS\ X\ Mavericks.app --nointeraction
Password:
Erasing Disk: 0%... 10%... 20%... 30%...100%...
Copying installer files to disk...
Copy complete.
Making disk bootable...
Copying boot files...
Copy complete.
Done.

 次は SSD 交換と Mavericks の再インストールであるがインストール用 USB を作ったところで作業を一時中断。

 今日は娘の運動会があるのだ。

 この MacBook Air は知人から譲ってもらったものなので大事に使っていきたい。

2014年9月15日月曜日

Xperia Z1 - SOL23 ナビバーを消してみた

呪文は以下の通り。

qemu.hw.mainkeys=1

これを build.prop へ追加して本体を再起動すると今まで活躍の頻度の割にはエリアを確保しすぎていたナビバーが無くなって画面が広くなった。

すっきりした。

この言葉がぴったりである。

2014年9月6日土曜日

SOL23 と adb を Wi-Fi 環境下にて接続できた。

 SOL23 こと Xperia Z1 は防水となっている。
 USB コネクタ部分はカバーになっているが充電時や PC との接続時にはその都度カバーを開ける必要がある。
 同様な仕組みの SOL21 を使っていた時はそのカバーを破損させてしまったので SOL23 では同じミスを繰り返さないことにした。
 具体的にはマグネット充電ケーブルを使って充電するようにした。
 付属しているクレードルを使えばこのケーブルを買う必要はないのだが SOL23 にはバンパーを付けているのでクレードルへの設置ができないのである。

 問題は SOL23 の USB ポートはデータのバックアップやリストアにも使う時がある。
 ここで調べてみると Wi-Fi 環境下において adb との接続が出来るという。
 そこでやってみたらちょっと手こずったけれど接続できた。
 しかも SOL23 と USB 接続を一回もしていない状況でできたのは嬉しい誤算であった。

D:\>adb connect 192.168.100.110:5555
connected to 192.168.100.110:5555

D:\>adb devices
List of devices attached
192.168.100.110:5555    device

 ついでに SOL21 で使っていた 2chMate のバックアップデータを SOL23 へリストアしてみたが問題なくできた。

D:\>adb restore 2chMate.ab
Now unlock your device and confirm the restore operation.


 なお参考にしたサイトは以下のとおり。
 「Wi-Fi環境でadb接続するには」
http://www.adakoda.com/android/000541.html
 「USB Host and Accessory」
http://developer.android.com/guide/topics/connectivity/usb/index.html
 「[Android] 実機にネットワーク越しにadb接続」
http://www.binzume.net/diary/2011-03-21:A1




 unable to connect to 192.168.100.110 がでまくったのはお約束である。

 お役目御免となった SOL21 は何に使おうかな。

2014年7月22日火曜日

SOL23 と adb backup

 adb backup を使ってバックアップをしてみた。

D:\SOL23\backup\20140722>adb backup -apk -all -system -all
Now unlock your device and confirm the backup operation.

D:\SOL23\backup\20140722>dir
 ドライブ D のボリューム ラベルがありません。
 ボリューム シリアル番号は BA92-6874 です

 D:\SOL23\backup\20140722 のディレクトリ

2014/07/22  17:34    <DIR>          .
2014/07/22  17:34    <DIR>          ..
2014/07/22  17:38       334,202,343 backup.ab
               1 個のファイル         334,202,343 バイト
               2 個のディレクトリ  29,830,762,496 バイトの空き領域


 でもリカバリはどうなるんだろうね。

 root を取得したときに CWM を入れたはずなんだけれど再起動しても青色点灯してくれない。
 frontmost も起動していたのが落ちちゃってるし。
 なんか SOL23 が夏バテのようだw


 リカバリをしてみた。

D:\SOL23\backup\20140722>adb restore backup.ab
Now unlock your device and confirm the restore operation.

 途中で失敗したようだけど Gmail や Play ブックスがきちんと立ち上がるようになったのでよしとしよう。
 アプリの再インストールやアカウントの同期などが色々と走るので手順を考える必要はありそうだな。
 しかし簡単に復活できるのは良いことである。

 一番の問題は Google+ で写真のアップロードが走ってしまって同じ写真や動画がダブってしまうことだな。

PC Companion で SOL23 をバックアップ

 SOL23 で Gmail や feedly などを立ち上げようとすると異常がでてしまって立ち上がらなくなって数週間。

 ここらで初期化をしてみようと思ったけれどいままで ftf ファイルを作る時くらいにしか使うことがなかった PC Companion でバックアップとリストアをしてみよう。


 しかしながら残り時間がとんでもないのでやめようと思った次第。

 こういう場合は放置プレイが正解。


 たいていは寝てる間に終わってる。
 果報は寝て待て!

2014年7月10日木曜日

もう少しきれいにしたいんだがどうしたらよいのだろうか。

 ようやく Calc に入力したセルの値を取り出して SQL の WHERE の条件にしてデータベースからデータを取得することができた。
 具体的には型式から仕入れ価格を取得する。

 実行結果は以下のとおり。
 一行目が型式で二行目が仕入れ価格である。








 次は取得した仕入れ価格をセルへコピーすることと取得したデータがなかった場合の処理をどうするかだな。

 きれいにしたいのは実行した次のコードのことだったりする。

Sub Main

  Dim DatabaseContext,DataSource,Connection As Object
  Dim Statement,ResultSet As Object
  DatabaseContext = createUnoService("com.sun.star.sdb.DatabaseContext")
  DataSource = DatabaseContext.getByName("DataBaseFile")
  Connection = DataSource.getConnection("", "")
  Statement = Connection.createStatement()

  Dim Sheet  As Object
  Dim SheetName As string
  Dim Cell As Variant
  SheetName = "見積り"

  dim const startgyou = 11 - 1
  dim const countgyou = 6 - 1
  dim const endgyou = startgyou  + countgyou
  dim const katasiki = 1
  dim const siirekakaku = 7

  Doc = ThisComponent
  if Doc.Sheets.hasByName(SheetName) then
    Sheet = Doc.Sheets.getByName(SheetName)
    for gyou=startgyou to endgyou
      Cell = Sheet.getCellByPosition(3, gyou).String
      ResultSet = Statement.executeQuery("select * from TestTable where katasiki = '" & Cell & "'")

      If IsNull(ResultSet) Then
        MsgBox "データがありませんでした。"
      Else
        ResultSet.next
        msgbox  ResultSet.getString(katasiki) & chr(13) & ResultSet.getString(siirekakaku)
      End If

    next gyou
  else
    msgbox "シート " & SheetName & " がありません。"
  end if

Statement.Close()
Connection.Close()
Connection.Dispose()

End Sub

2014年7月6日日曜日

一行ずつ値を取得してみた。の続き

 セルの中に「 」が入る場合があるので結果はどうなるんだろうと試してみたが問題なし。








 あとは SQL とマクロ次第といったところか。
 SQL は取得した値を where 句で使うだけなのでダブルクオーテーションのエスケープ処理を調べておけば問題は出ないだろう。
 マクロは数年前に Excel で作ったのを移植するつもりなので見直しながら作っていく予定だから手こずりそうだ。

やっぱりこの png ファイルたちも Google さんに遊ばれるのだろうか。

2014年7月5日土曜日

一行ずつ値を取得してみた。

 Calc の見積りワークシートの各セル A11, A12, A13, A14, A15, A16 に入力した文字列を for next を使って取得してみた。

 こんな風に入力してみた。

 実行結果は以下のとおりで予想していた通りで問題はなし。






 コードは以下のとおり。

Sub Main
  Dim Sheet As Object
  Dim SheetName As String
  Dim Cell As Variant

  SheetName = "見積り"
  Doc = ThisComponent
  dim startgyou, endgyou, countgyou
  countgyou = 6-1
  startgyou = 11-1
  endgyou = startgyou + countgyou

  if Doc.Sheets.hasByName(SheetName) then
    Sheet = Doc.Sheets.getByName(SheetName)
    for gyou=startgyou to endgyou
      Cell = Sheet.getCellByPosition(3, gyou).String
      msgbox cell
    next gyou
  else
    msgbox "シート " & SheetName & " がありません。"
  end if

End Sub


countgyou と startgyou の値に -1 を付けているのは Calc では行と列をゼロから数えるため。

 次はこの取得した値を使って Base へアクセスだな。


2014年6月30日月曜日

シートの枚数を調べる。

 寄り道をしてみた。
 左下に表示されている「シート 1/7」と表示されている「7」を拾うのだ。




 コードは以下のとおり。

Sub main
    oSheets= ThisComponent.Sheets
    oNum = oSheets.getCount()
    oDisp = "Sheet の全枚数は " & oNum & " 枚です。"
    msgbox oDisp,0,"Sheet枚数取得"
End Sub

 これでシートの追加を先頭ではなくて最後にすることが出来るな。

 ついでに変数の型を定義しなくても変数を使えるということで試してみた。
 今回のようにちょっと試していくのには便利だな。

2014年6月29日日曜日

シートを削除してみた。

今回のコードは以下のとおり。
 実際に削除するコードは oSheets.removeByName( sSheetName ) である。

Sub Main
  Dim oSheets As Object
  Dim sSheetName As String
  Dim nReturnCode As Integer

  oSheets = ThisComponent.getSheets()
  sSheetName = "NewSheet"
  If oSheets.hasByName( sSheetName ) Then
    nReturnCode=Msgbox("本当に削除しますか?",4)
      if nReturnCode=6 then
        oSheets.removeByName( sSheetName )
      Endif
  else
    msgbox("削除するsheetがありません") 
  End If
End Sub


 この NewSheet がバッサリと削除されるのである。





 当たり前のことだけど削除したシートをもう一度削除しようとしても削除対象がないので出来ない。


 こうしてシートを挿入したり削除したりすることが出来るようになると一時的な作業用シートの完成だな。

 さて次はセルの値を元にしてデータベースのレコードを取得してみようか。

 と思ったけれど先にセル範囲を指定してのデータのクリアだな。
 レコードを取得しても書き込み先がきれいになっていなければ混乱のもとだ。

2014年6月28日土曜日

新しいシートを挿入する。

 マクロの動作結果は以下のとおり。






 コードは以下のとおり。

Sub Main
Dim oSheet As Object
Dim oShtName As String
Dim oDisp as String
  oSheet = ThisComponent.getSheets()
  oShtName = "NewSheet"
  oDisp = "新規Sheet : " & oShtName '& Chr$(10)
  If NOT oSheet.hasByName( oShtName ) Then
  oSheet.insertNewByName( oShtName, 0 )
  oDisp = oDisp & "が挿入されました"
  else
  oDisp = oDisp & "は既に存在しています"
  End If
  msgbox oDisp, 0, "Sheetの挿入"
End Sub


 シートを挿入する前に同一名称のシートがあるかどうかをチェックしている。
 なければ oSheet.insertNewByName( oShtName, 0 ) でシートを先頭に挿入している。

 挿入したシートの使い方としては作業用と出力用の複数を使う予定なので同一名称のシートがある場合には削除をしておきたいので次回はシートの削除だな。

 あとは挿入したいシートを先頭ではなくて最後にするにはどうするのだろうか。
 シートを挿入する場所を指定しているからシートの総数を調べる方法があればできそうだな。

2014年6月26日木曜日

Cellから値を取得する

 いよいよ「Cellから値を取得する」
http://openoffice3.web.fc2.com/OOoBasic_Calc.html#OOoCCB02a

 これが出来るようになるとやりたいことに近づく。

 今回動かしたコードは以下のとおり。
Sub Main

Dim Doc, Sheet As Object
Dim Cell As Variant

Doc = ThisComponent
Sheet = Doc.Sheets.getByName("Sheet7")

Cell = Sheet.getCellByPosition(0, 0).Value
msgbox("Sheet.getCellByPosition(0, 0).Value = " & Cell)
Cell = Sheet.getCellByPosition(0, 0).String 
msgbox("Sheet.getCellByPosition(0, 0).String = " & Cell)
Cell = Sheet.getCellByPosition(0, 0).Formula 
msgbox("Sheet.getCellByPosition(0, 0).Formula = " & Cell)

End Sub

 実行結果は以下のとおり。




 取得する形式をきちんと指定しないと想定した値が入ってこないのには注意が必要だな。

 それはさておき。
 Value と Formula の結果が理解出来ていないのは問題だな。


Option VBASupport 1 が邪魔である。

 新しいマクロを開くと次の一文が出てきて鬱陶しい。
Option VBASupport 1


 消し方をググってみた。
 やってみた。
 OpenOffice のオプションにある VBA 属性にある Excel 関連にあるチェックボックスをすべてオフにする。


 上の設定を終えてから新しいマクロを開いてみるとすっきりした画面がでてきた。
 やっぱりこうでなくては。

2014年6月24日火曜日

OpenOffice Basic で Calc のセルに数字を入れてみる。

 おっしゃ。
 出来たついでに色々なパターンを試してみた。



Cell = Sheet.getCellByPosition(1, 20)
Cell.Value = 20
Cell = Sheet.getCellByPosition(2, 20)
Cell.Value = "21"
Cell = Sheet.getCellByPosition(3, 20)
Cell.String = 22


 数値をダブルクオーテーションでくくっても入力できた。
 制限はあるようだが文字列をダブルクオーテーションでくくらなくても入力できた。

 さて統一をしておきたいがどうすればいいのやら。

面白そうなサイトを見つけた。

 EXCEL VBAからOOo Basicへの移行について
http://freeopenoffice.jimdo.com/openoffice-org%E3%81%B8%E3%81%AE%E7%A7%BB%E8%A1%8C%E8%A7%A3%E8%AA%AC/

 ちょっと見に行ってくる。

 VBA との比較だった。
 VBA は詳しくないので残念ながら参考にならなかった。

 次に行こう。

OpenOffice Basic で Calc のセルに文字を入れてみる。

 実行前後のスクリーンショット。



 指定したセル A21 へ文字列を入れることが出来た。
 セルの指定が座標 0,20 になっているけれど見た目でわかるように A21 といった形で表現できないだろうか。

 実行したマクロは以下のとおり。

Option VBASupport 1

Sub TEST
Dim Doc As Object
Dim Sheet As Object
Dim NewColumn As Object

Doc = ThisComponent
Sheet = Doc.Sheets.getByName("Sheet7")

Cell = Sheet.getCellByPosition(0, 20)
Cell.String = "0,20"

End Sub


 今回のポイントは二点。

 まずは「Doc = ThisComponent」
 こうすることで Basic IDE から実行してもランタイムエラーが発生しなくなる。
 サンプルでよくある「Doc = StarDesktop.CurrentComponent」だと Basic IDE から実行するとランタイムエラーが発生する。
 プッシュボタンを作らなくてもマクロを実行することが出来るのでとても便利である。

 もう一つは「Sheet = Doc.Sheets.getByName("Sheet7")」
 シートの名称からシートを選択することが出来る。
 当初は getByName が抜けていて何回もマクロを実行しても反応がなかった。
 合っているとの思い込みがあったのでサンプルコードを何度も見返してようやく気がついたという次第。

 次は指定したセルに数字を入れてみよう。


 このマクロで気になっていた Option VBASupport 1 は VBA  コマンドを使えるようにするものらしい。
 目指すは脱 VBA なのでここは 0 にしておこう。

2014年6月23日月曜日

Calc でボタンをクリックしてマクロを動かす。

 マクロ自体は大したことはやっていないが Excel でやっているようにボタンを押したら動くようにした。

Rem Attribute VBA_ModuleType=VBADocumentModule
Option VBASupport 1

Sub TEST
Dim Doc As Object
Dim Sheet As Object
Dim NewColumn As Object

rem Doc = StarDesktop.CurrentComponent
Doc = ThisComponent
Sheet = Doc.Sheets("Sheet7")

msgbox "TEST"
End Sub


 まずは「表示」-「ツールバー」-「フォームコントロール」を選択する。

 するとフォームコントロールのウインドウが表示される。 

 デザインモードをオンにしてプッシュボタンを配置する。

 配置したプッシュボタンを右クリックしてメニューからコントロールを選択する。

 マクロセレクターなウインドウが表示されるので実行したいマクロを選択する。

 選択したマクロを動かすタイミングは実行時。
 マウスボタンを押した時ではダメなのだろうか。

 実行結果は予想通りで問題なし。

 今日は見えないところではなくて見栄えをいじったのでちょっと面白かった。
 

MELSECNET/HのリモートI/O局経由のMODBUS(R)通信について

http://fa-faq.mitsubishielectric.co.jp/faq/show/13661  別ネットワークの先にぶら下げるってどういうことだろう。