読者です 読者をやめる 読者になる 読者になる
スポンサーリンク

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

OpenOffice.org calc OpenOffice Basic サンプルコード 文字列処理

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


OpenOffice.org Calcのマクロで,ファイルパスをディレクトリパスに変換するコード。

文字列処理によりファイルパスを加工し,
ファイルが存在するフォルダのフルパスを取得できる。

Sub test1
	' ファイルのフルパスを渡して,
	' フォルダのパスを抽出するテスト
	Msgbox file_path_to_dir_path("C:\Windows\System32\drivers\etc\hosts")
End Sub


' ファイルのフルパスから,
' ファイルの存在するディレクトリのパスを
' 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

上記の例では,Windowsのhostsというテキストファイルのフルパスから
そのファイルが置いてあるディレクトリのパスを算出している。

実行結果で,返却値は下記の通り。

  • C:\Windows\System32\drivers\etc\

末尾にバックスラッシュが含まれている。


文字列処理についての注意点:

InStr 関数 [実行時] - LibreOffice Help
https://help.libreoffice.org/Basic/In...

  • Instr 関数からは、文字列の一致した位置が返されます。
  • 一致する部分がない場合は、0 が返されます。


AddinBox/VBAユーザーの為のOpenOffice.org 備忘録:InStr 関数の引数は4つとも指定する
http://blog.livedoor.jp/addinbox/arch...

  • Excel/VBA では大文字・小文字を区別してInStrで検索するため,マッチしなかったら返却値は 0
  • しかし、OOo.Basic ではデフォルトで大文字/小文字が区別されていません。


文字列 (OpenOffice.org BASIC 実行時ライブラリ) - Apache OpenOffice Wiki
https://wiki.openoffice.org/wiki/JA/D...

  • Left(MyString, Length)
  • 文字列 MyString の左端から Length 分の文字を取得します。


ちなみに,マクロを実行する際の注意点。


OpenOffice Basicのエディタ上で,
特定のSubルーチン部分だけを実行したい場合がある。

しかしOpenOfficeにはそのような機能がなく,
先頭にあるSubルーチンが実行される。
(LibreOfficeなら途中からF5でRunすることもできるのだが。)


だから,デバッグ実行時には
共通関数を先頭に書いてはいけない。

その関数を呼び出すテストコードを先頭に書いてF5を押す必要があるのだ。

雑談掲示板 - ...?
http://hermione.s41.xrea.com/pukiwiki...

  • モジュールの途中にあるマクロを実行しようとしても、モジュールの先頭から 実行してしまいます。
    • OOo ver3.3の段階ではこれは仕様なのでしょうか。 これではデバッグできない。OOoBasicはまだ実用には程遠いと感じました。
  • OOo の Basic IDE ではモジュールの先頭にあるルーチンが実行されます。
    • LibreOffice ではカーソルのある位置のルーチンが実行されるように変更されています。


Basic IDEのキーボードショートカット - LibreOffice Help
https://help.libreoffice.org/Basic/Ke...

  • プログラムコードの先頭行ないし、ブレークポイントによる停止中の場合はその行からプログラムを実行開始します。
    • →F5キー

関連記事:

OpenOffice.org Calcで,VBAに似たマクロ「OpenOffice Basic」の入門サイト集。シート上の定型処理を自動化する「OOo Basicマクロ」を初歩から学ぶ
http://computer-technology.hateblo.jp/entry/20150521/p1


OpenOffice.org Calcのセル内で,HYPERLINK関数だけでマクロを実行する方法 (表計算シート上にボタン塔を設置せずに,OpenOffice Basicを簡単に実行する)
http://computer-technology.hateblo.jp/entry/20150522/p1


OOo CalcのBasicマクロで,「値のある最後の行や列」を取得する方法。Excel VBAのEnd(xlDown), End(xlToRight)と同じ目的のサンプルコード
http://computer-technology.hateblo.jp/entry/20150524/p1


Excel VBAで,2つの日付を比較し,差分を計算する関数
http://computer-technology.hateblo.jp/entry/20140301/p1


WSH・VBScriptの人気は落ち,2010年にPowershellが追い越した。VBAの需要はさらにその倍だが,10年間で半分まで落ちている
http://computer-technology.hateblo.jp/entry/20150702/p1


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