2017-12-13 8 views
1

を使用してパスを取得するときにエラーを取得、私は次のマクロコードに出くわしました私はファイルを閉じて、それを再び開きます。私はそれを再オープンすると、私は次のエラーメッセージが表示されます。のLibreOffice Calcのセルにファイルの現在のパスを取得する解決策をオンラインで検索した後、マクロ

Inadmissible value or data type. 
Index out of defined range. 

このエラーは、[ツールマクロライブラリ内の次の関数の最後の行に生成されます。これは、ファイルのロード時にエラーが発生しますが、その後の作業を続行する理由

Function FileNameoutofPath(ByVal Path as String, Optional Separator as String) as String 
Dim i as Integer 
Dim SepList() as String 
    If IsMissing(Separator) Then 
     Path = ConvertFromUrl(Path) 
     Separator = GetPathSeparator()  
    End If 
    SepList() = ArrayoutofString(Path, Separator,i) 
    FileNameoutofPath = SepList(i) 
End Function 

その関数のコードがある...

Function ArrayOutOfString(BigString, Separator as String, Optional MaxIndex as Integer) 
    Dim LocList() as String 
    LocList=Split(BigString,Separator) 

    If not isMissing(MaxIndex) then maxIndex=ubound(LocList()) 

    ArrayOutOfString=LocList 
End Function 

は私はわかりません。

ありがとう。

+0

どこ 'ArrayoutofString'ためのコードはありますか? –

+0

元の投稿にその関数のコードを追加しました –

+0

デバッグすると 'SepList()'に内容がありますか?エラーが発生したときに 'i'の値は何ですか? –

答えて

1

良い方法があります。

=LEFT(CELL("filename");FIND("#$";CELL("filename"))-1) 

出典:細胞機能に対するhttps://ask.libreoffice.org/en/question/67271/how-to-automatically-display-file-path-in-a-cell/ ドキュメント:またhttps://help.libreoffice.org/Calc/Information_Functions#CELL

、マクロでそれを行うには、View createdイベントで実行するには、次のWritePathサブルーチンを割り当てます。

function GetPath() as string 
    On Error Goto ErrorHandler 
    GlobalScope.BasicLibraries.loadLibrary("Tools") 
    GetPath = Tools.Strings.DirectoryNameoutofPath(ThisComponent.url, "/") 
    ErrorHandler: 
end function 

Sub WritePath 
    oSheet = ThisComponent.getSheets().getByIndex(0) 
    oCell = oSheet.getCellRangeByName("A1") 
    oCell.setString(GetPath()) 
End Sub 

問題の説明とマクロソリューションのしくみについては、https://stackoverflow.com/a/39254907/5100564を参照してください。

EDIT

次の式では、ファイル名なしでパスを提供します。これを実行するには、のツール - >オプション - > LibreOffice Calc - >計算の正規表現を有効にする必要があります。

=MID(CELL("filename");2;SEARCH("/[^/]*$";CELL("filename"))-1) 

https://wiki.openoffice.org/wiki/Documentation/How_Tos/Regular_Expressions_in_Writer

+0

私はそれを見逃していませんでした。しかし、それは私にファイル名を含むパス全体を与える。私は、パスを包含するディレクトリにしたいだけです。 –

+1

@Lee Blake:編集済みの回答を参照してください。 –

+0

これは完璧に動作します!このような徹底的な答えをありがとう。私はこの問題を解決しただけでなく、なぜそれが機能していないのか理解しています。 –

関連する問題