本ページは谷 列樹(たに つらき)の日記(備忘録)妄想です。
実在の団体・人物とは関係ないと思います。
検証用のWindows7マシンに入っていたOffice2007をOffice2010にアップグレード。(なんか元々アップグレードできる権利のついたライセンスだったらしい)
とりあえず最初に試したのは、かなり良くなったとどっかで聞いた、ODF変換機能。ちょっとうっとうしいdocファイル群を用意して、Word 2010で開いてodtに変換したあと、それをOOo Writerで確認してみるというのをやってみた。結果はいきなりOOoで変換するよりもかなり良い時と、ダメダメな時(最初からOOoで変換したほうが良い)にわかれました。具体的にどういうパターンの時に結果が分かれるのかまでは検証できてませんが。。。
ちなみにOffice2010のデフォルトのファイル形式のOpen XMLにマクロを入れようとすると、拡張子の後ろにmをつけろ、と怒られて保存できないことを初めて知りました。
ついでにスパークラインとかいう新機能を使ってみる。面白いけど必須の機能って感じじゃないなー。
盆休みに実家で、テレビの画面の右上に「アナログ」って出てるのをリアルで見せられて、切なくなったので、急遽ヤマダデンキで5万くらいの液晶テレビを購入。安くなったもんだ。(マンションにある数年前10万くらいした液晶テレビのほうが画面がちっさい)
実家からの帰りの際に、駅でおみやげに物色すると、せんとくんグッズがかなりあった。とりあえずパッケージイラストのインパクトが一番でかかった、せんとくんまんじゅうを購入。せんとくんストラップも買えばよかった。
なんかちっさいダイアログが出てくるアプリ(exe)を作ってくれと言われたので、久々にVisual Studioを起動してC#で作ってみた。(Visual hogehogeならなんでも良かったんだろうけど、とりあえずC#しかインスコしてなかったので。)GUIの操作方法がわかんなかったり、そもそもC#の文法がわかってなかったりしたけど、ググりながら適当にやったらサクッと動くものが出来た。Visual Studio便利すぎ。
Windows XPで、Proxy越しじゃないとインターネットに繋がらない環境で、Windows UpdateとかSecurity Essencialsの更新とかがうまくいかない場合、コマンドプロンプトで「proxycfg -u」とかやるとうまくいく場合がある。わすれないようにメモ。
hadoopとかそろそろ実際に試してみんといかんなーと思いつつ、自分で片手間で試すのはちょっと重い。なので、社内のメールサーバーをIMAPに移行して、データ置き場にhadoopクラスタって感じのシステムをどっかの会社にやってもらえないかなーと妄想中。(まず予算つかないといけませんが。)
出張で、久々に栃木。なんか道中の鷲宮駅で明らかに風景に馴染まないTシャツにGパンの連中が長いカメラを持って降りていきましたよ。あれが噂の聖地巡礼というやつか。
Windows機にActiveRuby1.8.7を突っ込んで、以下のようなスクリプトを動かしてみた。
require 'win32ole'
objServiceManager = WIN32OLE.new('com.sun.star.ServiceManager')
Stardesktop = objServiceManager.createInstance('com.sun.star.frame.Desktop')
dispatcher = objServiceManager.createInstance('com.sun.star.frame.DispatchHelper')
oNewdoc = Stardesktop.loadComponentfromUrl('private:factory/scalc', '_blank', 0, [])
oTestdoc = Stardesktop.loadComponentfromUrl('file:///C:/tmp/test.ods', '_blank', 0, [])
oNewController = oNewdoc.getCurrentController()
oTestController = oTestdoc.getCurrentController()
oNewFrame = oNewController.getFrame()
oTestFrame = oTestController.getFrame()
oTestSheets = oTestdoc.getSheets()
oTestSheet = oTestSheets.getByIndex(0)
oTestController.setActiveSheet(oTestSheet)
dispatcher.executeDispatch(oTestFrame, '.uno:SelectAll', '', 0, [])
dispatcher.executeDispatch(oTestFrame, '.uno:Copy', '', 0, [])
oNewSheets = oNewdoc.getSheets()
oNewSheet = oNewSheets.getByIndex(0)
oNewController.setActiveSheet(oNewSheet)
dispatcher.executeDispatch(oNewFrame, '.uno:Paste', '', 0, [])
いつか自分でRubyを書かなきゃならん時がくるだろうなー、とは思っていましたが、まさかWindowsマシンで↑のような変なモノを試すことになるとは思っていませんでした。
解凍圧縮ツールをアレコレ試す。5, 6個試して、速度と使い勝手のバランスが取れてて、今回の要件に一番しっくりする7-zipにとりあえず落ち着きました。
10.04をLet's Noteにインスコ。昔は3Dなんて贅沢品はもってのほかと思っていたのですが、最近はむしろいいんじゃねと思うようになってきたので、とりあえずグリグリ回転させて喜んでみたり。
Wordにある文字の囲み線の機能(選択中の文字が□で囲まれる)がOOoのWriterには無くて、メニューの挿入→枠から「文字として」とか選択するとそれらしいモノはできるものの、手順が複雑なので、マクロ化。
oDoc = ThisComponent
oSelection = oDoc.getCurrentController().getSelection()
oTextRange = oSelection.getByIndex(0)
oText = oTextRange.getText()
oCursor = oText.createTextCursor()
oCursor.gotoRange(oTextRange, False)
oFrame = oDoc.CreateInstance("com.sun.star.text.TextFrame")
oFrame.AnchorType = com.sun.star.text.TextContentAnchorType.AS_CHARACTER
oFrame.WidthType = 0
oFrame.HoriOrient = com.sun.star.text.HoriOrientation.NONE
oFrame.VertOrient = com.sun.star.text.VertOrientation.LINE_TOP
oText.InsertTextContent(oCursor, oFrame, False)
oFrame.setString(oCursor.getString())
oFrame.BorderDistance = 0
oFrame.BottomMargin = 0
oFrame.TopMargin = 0
oFrame.LeftMargin = 0
oFrame.RightMargin = 0
oCursor.setString("")
エラー処理は入れてません。元に戻す処理も入れてません。見た目がWordと微妙に違うのが難点。
lotus domino/notesのトライアル版(英語版)をダウンロードしてインスコ&セットアップ。notesのほうは日本語もあったっぽいけど、dominoは英語しかトライアル版がなかったので、ついでにnotesも英語版をインスコ。dominoのセットアップがかなりめんどいです。(dominoはサーバー製品の詰め合わせっぽいので当たり前ですが。)
ただ、本来試したかったのは、notesdbと呼ばれるモノ。最初はDBというくらいだからdomino内のサーバー製品の一部だと勝手に思い込んでて、手元のノートPCでhttpサーバーとか立ち上げるハメになりましたよorz
なんかおかしいと思ってググってみると、そもそもnotesdbってのは、notes内でユーザーが作成できるアプリケーションのことで(ファイル管理DB的な使い方が多い模様)、notes単体でも評価可能だったらしいことが、やっとこさわかってきました。もうちょっと事前に調べればよかった。。。
追記:notesのAPIを使ってnotesdb内に保存されている添付ファイルやOLEファイルを吸い出すスクリプトとかをしこしこ試す。EMBED_ATTACHMENT(前者)とEMBED_OBJECT(後者)で微妙に扱いを変える必要があるのにハマったけど、概ねなんとかなりそう。(前者はextractfileメソッド、後者はActivateメソッドを使用したあとそのOLEのAPI経由で保存)
Microsoft Office & SharePoint Conference 2010というものに登録。冴子先生に会えるのかな。ハァハァ
DebianマシンのOOo(lenny-backports)のバージョンを3.2に上げてみたらCalcの行数が100万行を超えてました。桁がでかすぎてなんか怖いwww
MS Office 2003から2007へアップグレードするために、既存Officeファイルを棚卸しして統計解析やらするツールだそうです。こちら。メモ。
ついでにStarSuiteについてる既存Officeファイルの棚卸ツール。マニュアルはこちら。こっちはMS Office 2003からStarOffice(OOo)への移行の際の問題点に主眼をおいたものだそうです。
(何故か)Excelのマクロをもりもり書いてて、いざ動かすとシート上のデータが65000行を突破してしまったので、急遽、(何故か)Accessに変更。(Office2007はNG。MySQLとかPostgreSQLとかでも良かったんですが、最終的にExcelと連携するならAccessでしょという安易な理由。)
SQL直書きでクエリを実行したいのに、どのメニューにあるのかわかんなくて微妙にイラっとしたり、そもそもなんでこんなことをやってるんだと、アイデンティティが崩壊しそうになったりもしましたが、やっぱ良くできてるなー。
某所で(ブルーレイ環境で)見たサマーウォーズのDVDが近所のコンビニにうってたのでつい購入。いくやさんにブルーレイ環境くらい整備しろやゴルァと脅されていたのに妥協してすみません。
ついでに某所で久々にキャストパズルやって火がついたので新しいのを何個か購入。(偶然、ほぼ同時に結婚式の引き出物?でも貰った。)難易度6のCAST SQUARE(キャストスクエア)はプラプラさせてると偶然とれました。中の構造をみるとプラプラさせるのが正解っぽい。それ以外はまだとれてない。
というのを試す。シンプルに、OSにODBCドライバを設定して、それ経由でmdbファイルにアクセスするという方法がまず思いつきますが、SQLを実行できるだけなので、Accessのレポートとかクエリーとかフォームとか使いたかったら、これだと無理です。なので、CreateObject("Access.Application")とかしてみると、COMとしてアクセス可能でした。
ただ、SQLを実行したあと、Access VBAだったら普通の記述のResultset.Fields("カラム名")とかやるとそんなメソッドねぇぞコラと怒られてちょっとハマりました。で、Resultset.Fields.Item(0).Valueと昔風にカチッと書き下ろすと通ります。要は、OOo Basicでは連想配列的なモノとか構造体的なモノとか省略記法とかに対応出来ていないのが悪いっぽいです。(VBAのほうが言語仕様が新しくて、色んな機能があります。)今回はたまたま別の書き方がありましたが、メソッドの引数にその手のもの求められたり、メソッドの戻り値がその手のものだったりして、別の記述法が無い場合は、OOo Basicでは厳しいかもしれません。
そんなこんなで、まとめると、OOo BasicでAccess.Application呼び出しても動くことは動きます。ただ個人的には、逆の、Access VBAからOOoをCOMとして呼び出して操作する、ってやり方のほうが、下位互換的で、安定する気がします。(こっちのほうも試して、動きました。)
なぜかここしばらくExcel VBAを書いてます。OSのライブラリとかCOMオブジェクトとかと相性が良いので、所詮Officeのマクロ機能なのにそんなことまでできていーの?って感じ。ただ調子に乗って環境に依存する処理をやりすぎて、何回か泥沼にはまりました。
を外部のプログラムから操作する方法を調べると、こことか、ここが引っかかった。
とりあえず手元でも試してみると、「ツール」->「差し込み印刷ウィザード」から設定済みのテンプレートを作っておいて、データソースも作っておいた状態で、差し込み印刷をマクロから実行することは出来ました。「ファイル」->「新規作成」->「ラベル」よりもテンプレート作成が難しいのが難点かなー。
つーか、そもそものところをよく考えると、差し込み印刷の機能って、プログラム組まなくてもGUIからこんなことも出来ますよすごいでしょ的な機能なので、プログラム組むという前提なら、差し込み印刷の機能使わなくても文書内の文字列の置換とかだけで充分いけます。
Windows7の次は何故か時の流れを遡ってWindows2000の環境をいじる。かなりギャップを感じましたが、冷静に10年もたってることを考えると、いうほど進化してない気もします。
帰りにYシャツを買いに西武百貨店に寄り道。エスカレーター降りたとこに置いてあったシャツがスーツ買えるくらいの値段でちょっとびびるも奥にいくと普通の値段のやつも置いてて安心。
MS OfficeとかPDFとかODFとかのファイルのdiffをとるツールらしいっす。こちら。 さらにこのツール内で各フォーマットからテキストデータを抽出するのにつかわれているらしいのがこちらのxdoc2txtというツールらしい。とりあえずメモ。
新しく来た検証用PCにWindows7をセットアップ(XPにダウングレードされたモノが納品されてきたのでリカバリDVDで工場出荷状態に戻す)。とりあえずWindows updateしたり、security essentials入れたり、色々設定とか。vistaよりも良くなってる感じがする。firefox入れて、OOo入れて、MS Office 2007入れてひとまず完了。なんか家のPCもそろそろ入れ替えたくなってきた。
Linux上のMySQLをWindowsマシンのodbcドライバ & OOo Basicから操作するというのを試してみました。(drivermanagerサービス使うほうのやり方。こっちだとわざわざBaseでデータソース登録しなくてもいける) MySQLの設定方法とか使用方法などを結構忘れてて、ちょっと苦労しつつ、やっと通るようになったなと思ったら日本語データが文字化けorz。何から何まで全部utf8で統一されてるのに、と思っていたら、原因はWindowsマシンのodbcドライバの設定でした。Windows管理ツールのデータソースの設定画面で「Details」→「Misc Options」の「Character Set」の設定をよかれと思って「utf8」にしてたんですが、何故かここを「sjis」に変更すると文字化けが直りました。なんぞこれ。どっかで余計な文字コード変換処理が動いてる悪寒。
追記:↑は多分Linux内とそこから通信で出入りするところは全部utf8、 Windowsにパケットが入ってきてODBCさんが解釈した時点でsjis(≒cp932)に変換されて、そのコードがOOo Basicさんのエンジンによって再度Unicodeに変換されるという流れのようです。 どうもOOo Basicには、外部から取り込んだデータを自動的に(勝手に)cp932だとみなしてUnicodeに変換したり、逆にUnicodeの内部データをcp932に変換して出力したりする、ある意味おせっかいな機能があるみたいです。
更新テスト
Excelではツール->アドイン->分析ツール, 分析ツール - VBAの機能追加でできるっぽい。Gnumericにはデフォでそれっぽい機能がついてた。OOoではWikiにそれっぽい記述がありましたが、今は無理そう。マクロで計算させたらいけそうですが、そもそも私にはフーリエ変換が理解できない(Wikipediaの記事を見て心が折れたwww)ので、計算プログラムも書けない罠。なおコチラのサイトを見ると、Excel VBAでフーリエ変換を行っていて、それをOOo Basicに移植したものもあるそうです。
UbuntuマシンをWindows Active Directory domainに参加させて認証させる話。メモ。ココとかココとかもついでにメモ。
シート上の図形描画オブジェクトを操作するマクロと、シート切り替えイベントを取得するマクロがあって、それぞれ単体なら正しく動作するのに、組み合わせると動かないといわれる。調べてみると、シート切り替えイベントの瞬間に、切り替え先のシート上の図形を操作しようとしてるせいだとわかりました。(シートが切りかわった瞬間には、まだシート上の図形オブジェクトは生成されてないっぽい感じ。)しょうがないので、無理やりXcallbackで割り込んでwait 100とか入れて対応。
OOoの「ツール」->「オプション」->「読み込みと保存」->「全般」の「ODF形式でのサイズの最適化」のチェックを外すと、ODF(XML)が改行+インデントされた状態で出力されます。Javaプログラムでodsを解凍してcontent.xmlを処理してるんだけど、エラーが出る場合と出ない場合があると言われて、調べてみてこんなオプションがあるのに気づきました。(改行がはいっていようがいまいが正しいODFなので、どっちにしても作成されたJavaプログラムがおかしいことにかわりないんですが)
今度はUbuntu 9.10が起動できなくなったとレッツノートが持ち込まれる。試してみるとどうもsda1(内蔵ハードディスク)のマウントのところでこけてるっぽいので、外付けハードディスクのUbuntuで起動。手動でsudo mount -t ext4 /dev/sda1 /mnt/hogehoge とかやると問題なくハードディスクの中身が見えました。よくわかんないながらも、とりあえずhomeだけバックアップとって、sudo fsck /dev/sda1 とかやってみると瞬間的に問題ないよと返ってきた。 嘘くさいなーと思いながらも、試しにもう一回再起動したら今度はちゃんとsda1をマウントして起動するようになりましたwww。なんで壊れたのかなんで直ったのか、さっぱりわかりませんwww。
! Kohei [Go-OO版では動きますか?]
! tani [手元のDebianビルド版3.1.1では動かなかったので、念のためgo-ooからWindows用3.1.1をダウンロ..]
! Kohei [あ、ほんとだ。ooo-buildでもコードは一緒ですね。ちょっとNoelに機会があったら聞いてみるかもしれません。]
! Kohei [Noel曰く、「ああScrollWorkbookTabsは一応stubは入ってるけど実装されてないよ。実装は特に難し..]
! tani [ありがとうございます。せっかくなのでやってみようかなとも思いましたが、ビルド環境構築とか私のC++の経験の無さとかを..]
UNO経由のBaseの操作はOOo Basicで何回か試したことがありますが、別にUNO経由しなくてもhsqldbのjdbc経由でできるよ、っていうJavaのサンプルコードがあった。コチラ。なんとなくDeveloper's Guideに載ってるサンプルとかより楽そう。
OOo3.2RC1で確認したところ、Impressでページ総数が入るようになってます。なんか個人的にタイムリーな部分が色々よくなってるなー。
をOOoで行うと激しくズレて困るという問い合わせが。 調べてみると、行とか列が非表示の箇所を含んだデータ範囲設定のグラフのようで、OOoにImportすると、なぜか非表示範囲がべろーんとモロ出し状態のグラフになります。
手で修正するには、データ範囲とデータ系列の設定で、非表示部分を除いた範囲に再設定することで直りますが、グラフの数やら非表示箇所やらデータ系列やらがやたら多いドキュメントだったので全部手作業は嫌な感じ。
そこでマクロでなんとかしてみようかと2日間ほど四苦八苦しました。 データの欠落とかはないので、論理的には可能なはず。ただデータ範囲は簡単に変更できるものの、データ系列が一筋縄ではいかない感じで、心が折れかけたところで、ふとDebian GNU/Linux版OOo3.1.1で試すと普通に綺麗なグラフが。こっちには既に非表示範囲をグラフに出力しない機能が実装されてたのね。orz
追記:OOo3.2のベータ版で試すと、go-oo版と同じ動きになりました。go-ooの機能が取り込まれたんだろうか。ちなみにgo-ooやOOo3.2ベータで取り込んだファイルをodsに変換しても、グラフの範囲の設定値は何も変わらないので、OOo3.1本家版で開いてグラフを編集しようとすると再度崩れます。(開くだけなら、図形としての静的なグラフ情報も保存されてるので、うまくいってるように見えますが。)
をどうやって取得するんだろうと、アレコレ調べてみるも、なかなかうまくいかず。公式フォーラムで外人さんが困ってるのもみかけたので一応答えてみたりしましたが、提示したコードはやたらOOoが不安定になってクラッシュしたりしちゃいます。。。
! みなり [私は結局・・・ LhaForge に落ち着いています。 悪くないですよ:)]
! あきら [私はExplzhを使っています 昔シェアウェアだったときに払っていたしtgzとかjarも開けるしねー]