スポンサーリンク

Ooo CalcのBasicマクロで,ブックの存在するフォルダのフルパスを取得する関数のサンプルコード。Excel VBAのThisWorkbook.Pathのように親ディレクトリを返す

Excel/Wordオフィス製品のTipsまとめへ


OpenOffice.org のCalcで,ブックの保存されているフォルダのフルパスを一発で取得する関数のサンプルコード。

Excel VBAでの ThisWorkbook.Pathに相当する。

Sub test
	' このブックの存在するフォルダのパス
	Msgbox getThisWorkbookPath
End Sub


' このブックの存在するフォルダをフルパスで返す。
' Excel VBAでの ThisWorkbook.Pathに相当
Function getThisWorkbookPath

	' このブックのフルパスをURLとして取得
	encoded_url = ThisComponent.getURL
	
	' URLをWindows用のパスに変換
	windows_filepath = ConvertFromUrl(encoded_url )
	
	' ファイルパスからディレクトリパスを抽出
	windows_dir_path = file_path_to_dir_path(windows_filepath)

	getThisWorkbookPath = windows_dir_path
	
End Function


' ファイルのフルパスから,
' ファイルの存在するディレクトリのパスを
' Windowsの形式で抽出する。
' 末尾に\を含む文字列が返る。
Function file_path_to_dir_path(file_path)
	' 左から何文字分を抽出すればよいか
	str_length = 0
	
	' 何文字目に\があるか,という毎回の検索結果
	match_index = 1
	
	' \が見つかる限り検索を続ける
	Do While match_index <> 0
		
		' 前回見つかった位置よりも後で\を探す
		match_index = InStr(match_index + 1, file_path, "\")
		
		' \が見つかった場合
		If match_index <> 0 Then
			str_length = match_index
		End If
		
	Loop
	
	' ファイルパスから,左から指定文字数だけ抽出
	s = Left(file_path, str_length)
	
	file_path_to_dir_path = s

End Function

実行すると,odsファイルの保存されたディレクトリのフルパスが
末尾にバックスラッシュを含む形式で表示される。


なお上記のコードでは,
「ファイルパスからフォルダパスを抽出する関数」が使われている。
その関数については下記エントリを参照。

Ooo CalcのBasicマクロで,ファイルパスをフォルダパスに変換する関数のサンプルコード。Windows用のフルパス文字列から親ディレクトリのパスを抽出するOpenOffice.org用コード
http://computer-technology.hateblo.jp/entry/20150914/p1

  • OpenOffice.org Calcのマクロで,ファイルパスをディレクトリパスに変換するコード。 文字列処理によりファイルパスを加工し, ファイルが存在するフォルダのフルパスを取得できる。


Excel VBAのキーワードである「ThisWorkbook」が使えない,という点に注意が必要だろう。

AddinBox/VBAユーザーの為のOpenOffice.org 備忘録:ThisWorkbook, ActiveWorkbook, ブック名での参照
http://blog.livedoor.jp/addinbox/arch...

  • OOo.Basic で相当するものは下記
    • ThisWorkbook ⇒ ThisComponent
    • ActiveWorkbook ⇒ StarDesktop.CurrentComponent


VBA vs OOo.Basic 対比表
http://www.h3.dion.ne.jp/~sakatsu/OOo...

  • ActiveWorkbook.Path→自前でルーチンを組む必要がある


getURLで取得したURLを,
convertFromURLでWindowsのファイルシステムに適応させる:

faq/4/1681 - OpenOffice.org Q&A
http://oooug.jp/faq/index.php?faq/4/1681

  • ディレクトリ名は,convertFromURLかけた文字列から文字列操作とか配列操作とかで抽出


(OpenOffice Basic)自身のファイルパスを表示する : 3流プログラマのメモ書き
http://jehupc.exblog.jp/12946357/

  • マクロを動かしている自身のファイルパスを取得する
    • StarDesktop.CurrentComponent.getURL もしくは
    • ThisComponent.getURL
  • 取得したパスはエンコードされたURL形式(file://...)
    • ConvertFromUrl関数で、URL形式をWindowsのパス形式(バックスラッシュ形式)に変換

Excel/Wordオフィス製品のTipsまとめへ