2013年4月17日水曜日

LibO Basicでフォルダ内の全ファイルを再帰的に取得

Excel VBAだとサンプルがすぐ見つかるけど(Excel2003と2010で非互換があるので要注意)、LibreOfficeのサンプルが簡単には見つからなかったので。

こんな感じ。


Function SearchFileMain As Boolean 
  SearchFileMain = false
  sTargetURL = ConvertToURL("C:\tmp")
  Dim aFileURL(0)
  SearchFileRepeat(sTargetURL, aFileURL)
  MsgBox "配列にファイルリストを格納しました。"
  SearchFileMain = true
End Function

' 対象ファイルの再帰検索
Sub SearchFileRepeat(sDirURL As String, ByRef aFileURL)
  oSFA = createUnoService("com.sun.star.ucb.SimpleFileAccess")
  aFC = oSFA.getFolderContents(sDirURL, true)

  For i = Lbound(aFC) To Ubound(aFC)
    item = aFC(i)
    If oSFA.IsFolder(item) Then
      SearchFileRepeat(item, aFileURL)
    Else
      j = Ubound(aFileURL)
      If j = 0 And IsEmpty(aFileURL(0)) Then
        aFileURL(0) = item
      Else
        Redim preserve aFileURL(j + 1)
        aFileURL(j + 1) = item
      End If
    End If
  Next i
End Sub