| 拡張子 | 要素 | 備考 | ||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| .sob |
.soc | office:color-table |
.sod | office:dash-table |
.soe | office:marker-table |
.sog | ooo:gradient-table |
.soh | office:hatch-table |
|
OpenOffice.orgの最近のブログ記事
OpenOffice で MySQL に Connector/j でつながらなかった。
まずい、コネクタを入れていなかった。
いれてみた。
クラスパスも指定した。
OOo の再起動もした。
でも「JDBC ドライバは読み込まれませんでした。」と出てきた。
64 bit Windows だから?
MySQL を winx64 にしたから?
しょうがないので ODBC にしてみた。
結果オーライ。
でもなんか納得できない。
しばらく経って原因に気がついた。
クイック起動を終了させていなかった。
OOo を再起動させたつもりがしてなかった。
馬鹿みたい。
でも原因を探っていろいろネットを見ているうちに拡張機能でコネクタなしの接続ができることを知った。
Sun Connector for MySQL (Beta)
( http://extensions.services.openoffice.org/node/2447 2009.11.12 現在空っぽ)
MySQL Connector for OpenOffice.org
( http://extensions.services.openoffice.org/project/mysql_connector )
使い方:
・ OpenOffice.org で「新規データベース」
・ データベースウィザードで「既存のデータベースに接続」>「MySQL」
・ 「Native に接続(C)」
・ データベースの名前、サーバURL、ポート番号、Socket を指定。
URL に localhost とすると NG。127.0.0.1 とIPアドレスなら OK。
Socket は 空白。
・ ユーザID やパスワードを必要なら入力。
・ テスト接続で接続が確認できたら完了。
Windows の場合 AppData のOpenOffice/3/user/config/
にある standard.soc に保存されている。
<ooo:color-table ...> 〜 </ooo:color-table> の間に、
<draw:color draw:name="色の名前" draw:color="#xxyyzz" /> で記述する。
*.soc とつくファイルは総じて色物らしい。使い方、使われ方不明。
だれか、和色のテーブル作って欲しい。
以前つくった OpenOffice.org のフォーム用の Windows専用IMM 制御マクロを Vista + ATOK で使ってみたら、全角入力にした EDIT ボックスが「かな入力」に なってしまうことを発見。対策としてコードの一部を変更。 具体的には imm コントロールのフラグを IME_CMODE_JAPANESE と IME_CMODE_FULLSHAPE に加えて IME_CMODE_ROMAN も指定するようにしました。 MS-IME で使っているなら変更の必要はありません。 「ローマ字」より「かな入力」が得意な人はそのままでお使いください。 REM ***** BASIC ***** Option Explicit const SYSTEM_WIN32 as long = 1 const SYSTEM_WIN16 as long = 2 const SYSTEM_JAVA as long = 3 const SYSTEM_OS2 as long = 4 const SYSTEM_MAC as long = 5 const SYSTEM_XWINDOW as long = 6 Declare Function ImmCreateContext Lib "imm32.dll" () as long Declare Function ImmAssociateContext Lib "imm32.dll" (ByVal hWnd as long, ByVal hIMC as long) as long Declare Function ImmDestroyContext Lib "imm32.dll" (ByVal hIMC as long) as long Declare Function ImmGetContext Lib "imm32.dll" (ByVal hWnd as long) as long Declare Function ImmReleaseContext Lib "imm32.dll" (ByVal hWnd as long, ByVal hIMC as long) as long Declare Function ImmSetOpenStatus Lib "imm32.dll" (ByVal hIMC as long, ByVal bOpen as long) as long Declare Function ImmGetOpenStatus Lib "imm32.dll" (ByVal hIMC as long) as long Declare Function ImmGetConversionStatus Lib "imm32.dll" (ByVal hIMC as long, cmode as long, smode as long) as long Declare Function ImmSetConversionStatus Lib "imm32.dll" (ByVal hIMC as long, ByVal cmode as long, ByVal smode as long) as long Declare Function ImmGetDefaultIMEWnd Lib "imm32.dll" (ByVal hWnd as long) as long Global const IME_CMODE_ALPHANUMERIC as long = 0 ' アルファベット Global const IME_CMODE_NATIVE as long = 1 ' 日本語(各国語) Global const IME_CMODE_JAPANESE as long = 1 ' = IME_CMODE_NATIVE Global const IME_CMODE_KATAKANA as long = 2 ' カタカナ/ひらかな Global const IME_CMODE_LANGUAGE as long = 3 ' 言語マスク? Global const IME_CMODE_FULLSHAPE as long = &h008 ' 全角/半角 Global const IME_CMODE_ROMAN as long = &h010 ' ローマ字入力 Global const IME_CMODE_CHARCODE as long = &h020 ' コード入力 Global const IME_CMODE_HANJACONVERT as long = &h040 ' Global const IME_CMODE_SOFTKBD as long = &h080 ' ソフトウェアキーボード Global const IME_CMODE_NOCONVERSION as long = &h100 ' Global const IME_CMODE_EUDC as long = &h200 ' EUDC(ってなんだ?) Global const IME_CMODE_SYMBOL as long = &h400 ' シンボル記号(英数の?) Global const IME_CMODE_FIXED as long = &h800 ' Global const MB_OK as long = 0 Global const MB_ICONHAND as long = 16 Global const MB_ICONQUESTION as long = 32 Global const MB_ICONEXCLAMATION as long = 48 Global const MB_ICONASTERISK as long = 64 Sub Main 'GlobalScope.BasicLibraries.LoadLibrary("XrayTool") 'xray ThisComponent GlobalScope.BasicLibraries.LoadLibrary("ProjectBEE") msgBeep(64) immToggle End Sub ' -------------------------------------- ' びーぷ(ExampleDeclare改) Declare Sub MessageBeep Lib "user32.dll"( byVal long ) Sub msgBeep(optional mb as long) if isMissing(mb) then mb = MB_OK MessageBeep( mb ) end Sub ' -------------------------------------- ' IME制御 ' -------------------------------------- function imm(optional sw as long, optional mode as long) as long dim hWND as long dim hIMC as long dim PID() as byte dim cmode as long dim smode as long hWND = StarDesktop.CurrentFrame.ContainerWindow.getWindowHandle(PID, SYSTEM_WIN32) ' good hIMC = ImmGetContext(hWnd) if IsMissing(sw) then ' sw がなければ状態問い合わせ if (GetGUIType() <> 1) then imm = -1 ' Windows 以外は 戻り値:=-1 else if (ImmGetOpenStatus(hIMC) = 0) then ' imm の状態取得 imm = 0 ' OFF なら戻り値:=0 else ' ON なら... ImmGetConversionStatus(hIMC, cmode, smode) ' 変換モード取得 imm = cmode ' 戻り値:=変換モード end if end if else ' sw 指定時は imm 制御 imm = ImmSetOpenStatus(hIMC, sw) ' 戻り値:= ImmSetOpenStatus の処理結果(BOOLEAN) if (sw) then ' imm を ON にすれば... if IsMissing(mode) then mode = IME_CMODE_JAPANESE _ + IME_CMODE_FULLSHAPE _ + IME_CMODE_ROMAN ImmGetConversionStatus(hIMC, cmode, smode) imm = ImmSetConversionStatus(hIMC, mode, smode) ' 戻り値:= ImmSetConversionStatus の処理結果(BOOLEAN) end if end if ImmReleaseContext(hWND,hIMC) ' if (imm) then msgBeep(MB_ICONEXCLAMATION) end function ' -------------------------------------- ' IME TOGGLE sub immToggle dim hWND as long dim hIMC as long dim PID() as byte dim stat as long hWND = StarDesktop.CurrentFrame.ContainerWindow.getWindowHandle(PID, SYSTEM_WIN32) hIMC = ImmGetContext(hWnd) stat = ImmGetOpenStatus(hIMC) stat = 1 - stat ImmSetOpenStatus(hIMC,stat) ImmReleaseContext(hWND,hIMC) end sub sub immOn ' -------------------------- imm(TRUE, IME_CMODE_JAPANESE+IME_CMODE_FULLSHAPE +IME_CMODE_ROMAN) end sub sub immOff ' -------------------------- imm(FALSE) end sub sub immHira ' -------------------------- imm(TRUE, IME_CMODE_JAPANESE+IME_CMODE_FULLSHAPE _ +IME_CMODE_ROMAN) end sub sub immKata ' -------------------------- imm(TRUE, IME_CMODE_JAPANESE+IME_CMODE_KATAKANA+IME_CMODE_FULLSHAPE _ +IME_CMODE_ROMAN) end sub sub immCode ' -------------------------- imm(TRUE, IME_CMODE_JAPANESE+IME_CMODE_FULLSHAPE+IME_CMODE_CHARCODE) end sub sub immKbd ' -------------------------- imm(TRUE, IME_CMODE_JAPANESE+IME_CMODE_FULLSHAPE+IME_CMODE_SOFTKBD) end sub
Windows の IMM の API で ImmGetConversionList を使って
漢字の読みを取り出したかったんだけどうまくいかない。
VBだとできるらしいんだけど。
いろいろと試行錯誤していると本題とは関係ないけど面白いことに気が付いた。
C の基本関数が OOo の BASIC からも使える
----------------------------------------
REM ***** BASIC *****
declare function strncpy lib "ntdll" (byRef dst as string, _
byRef src as string, byVal siz as long)
declare function strlen lib "ntdll" (byRef dst as string) as long
Sub Main
dim src as string : src = "文字列コピー"
dim dst as string : dst = string$(8,0)
siz = len(dst)
dummy = strncpy(dst, src, siz)
msgbox "'"& src &"' ("& strlen(src) &"byte) -> '" _
& dst &"' (" & strlen(dst) &"bytes)"
End Sub
----------------------------------------
つうことは、なにか。
C で DLL 書いてやれば BASIC の関数の拡張は簡単って事か?
# きっともっと別の、そして正規の方法があるんだけど。
VB のコードを参考にして OpenOffice.org のBASICで API からの文字列を 受け取ってみた。 参照先: 「DLL 関数から文字列を返す」 http://msdn.microsoft.com/ja-jp/library/cc376816.aspx VB と異なるところは、Declare Function で文字列を受け取るバッファを byRef でなく byVal で宣言しなければ期待した動作が行われないこと。 バッファから String 変数にコピーする際は Null文字(¥0) でターミネート しているらしいこと。REM ***** BASIC ***** Declare Function GetTempPath Lib "kernel32" Alias "GetTempPathA" _ (ByVal nBufferLength As Long, ByRef lpBuffer As String) As Long Sub Main msgbox GetTempDir End Sub function GetTempDir() As String ' 使用している Temp フォルダへのパスを返します。 ' Windows を起動するには一時フォルダが必要なため、確実に ' パスには 1 が返されますが、一応 GetTempPath の戻り値を ' 確認します。 Dim strTempPath As String Dim lngTempPath As Long ' 文字列に Null 文字を入力します。 strTempPath = String$(255, 0) ' 0 = vbNullChar ' 文字列の長さを取得します。 lngTempPath = Len(strTempPath) ' GetTempPath を呼び出し、文字列の長さと文字列を渡します。 L = GetTempPath(lngTempPath, strTempPath) If (L > 0) Then ' GetTempPath はパスを文字列に返します。 ' 最初の Null 文字を切り捨てます。 GetTempDir = strTempPath Else GetTempDir = "" End If End function
日本郵便の
JIS X0401 と X0402 の情報を抜き出してみました。
2009年4月現在の郵便番号情報を基にした、県(X0401) と市町村区(X0402) のテーブルです。
ご自由にお使いください。
JIS_X0401.csv
JIS_X0402.csv
JIS_X0402.ods (OOo 3.1)
JIS_X0402.odb (OOo 3.1)
郵便番号の csv ファイルをデータベースに読み込み、県名でグルーピングしたのが x0401、
市町村名でグループ化したのが x0402 になってます。
ミスってたらごめんなさい。
jis_x0401.csv は、"JIS X0401","県名(漢字)","県名(カナ)" の並びです。
jis_x0402.csv は、"JIS X0402","県名(漢字)","市町村名(漢字)","県名(カナ)","市町村名(カナ)" の並びです。
jis_x0402.ods / jis_x0402.odb は x0401 と x0402 が両方入っています。