Страницы: 1
RSS
Vba получить текст из файла .odt (libreoffice)
 
Добрый день! Собираю данные из Wordовских файлов вот такой функцией:

Код
Function ТЕКСТWORD(wfn As String) As String 'Получить текст из Word
    Dim objWrdApp, objWrdDoc, Tabl As Object, i As Long
    On Error Resume Next
        Set objWrdApp = GetObject(, "Word.Application")
        If objWrdApp Is Nothing Then
            Set objWrdApp = CreateObject("Word.Application")
            Set objWrdDoc = objWrdApp.Documents.Open(wfn)
            objWrdApp.Visible = False
        End If
        Set objWrdDoc = objWrdApp.Documents.Open(wfn)
        ТЕКСТWORD = objWrdDoc.Range.Text
        objWrdDoc.Close SaveChanges:=False
        Set objWrdDoc = Nothing
        Set objWrdApp = Nothing
End Function

Последнее время попадаются файлы с расширением .odt, которые не все открываются в Wordе. Подскажите, как достать текст из такого файла?
libreoffice, если что, установлен. Пример файла во вложении.
 
код на vbs, открывает файлы в LibreOffice, можете попробовать запускать его по условию что файл odt. Проверить не на чем, собирал из разных кусков.
Имя файла и путь к нему желательно без русских букв, или придется dos2unix допиливать.
Код
Set ServiceManager = CreateObject("com.sun.star.ServiceManager")
Set Desktop = ServiceManager.createInstance("com.sun.star.frame.Desktop")
Dim Param(0)
Set Param(0) = ServiceManager.Bridge_GetStruct("com.sun.star.beans.PropertyValue")
   Param(0).Name = "Hidden"      
   Param(0).Value = true
Set Document = Desktop.LoadComponentFromURL("file:///"&dos2unix(wfn_ ,"\\" ,"/" ), "_blank", 0, Param)
ТЕКСТWORD = Document.Text.String
Document.close True



Function dos2unix(txt, expr1, expr2) ' функция конвертирования путей
    Dim oReg
    Set oReg = New RegExp        ' Открываем регулярные выражения.
    oReg.Global = True           ' меняем все
    oReg.IgnoreCase = True       ' игнорируем регистр
    oReg.Pattern = expr1  
    dos2unix = oReg.Replace(txt, expr2)
End Function
 
bigorq, благодарю, буду разбираться.
Пока рабочий вариант такой: конвертирую в doc и из доковского файла достаю текст.
Код
Shell "C:\Program Files\LibreOffice\program\soffice  --convert-to doc --outdir ""C:\с ошибкой"" ""C:\с ошибкой\Решение.odt""", vbNormalFocus
но подозреваю, можно еще проще, не плодя новые файлы..
Страницы: 1
Читают тему
Наверх