Как открыть документ

Автор alexmn31, 10 января 2018, 11:58

0 Пользователи и 1 гость просматривают эту тему.

alexmn31

Подскажите как открыть документ с диска в макросе libreoffice.


JohnSUN

В стандартной библиотеке Tools есть для этого специальная функция - OpenDocument.
У неё три параметра - URL документа, массив аргументов для открытия и не обязательный логический параметр bDisposable
Прежде чем лезть на диск за документом, функция проверяет нет ли его среди уже открытых. Если есть, то просто возвращает этот документ, а если нет - пытается открыть его по указанному пути. bDisposable как раз и показывает - можно ли закрыть документ после окончания работы макроса (если уже кто-то его открыл, то закрывать, наверное, не стоит)
То есть весь код для открытия файла выглядит приблизительно так:

Dim argOpenFile(0) as new com.sun.star.beans.PropertyValue
argOpenFile(0).Name = "Hidden"
argOpenFile(0).Value = True
GlobalScope.BasicLibraries.LoadLibrary("Tools")
fName = ConvertToURL(sFileName)
If FileExists(fName) Then
getDoc = OpenDocument(fName, argOpenFile)
Else
MsgBox("Файл с именем '" + sFileName + "' не найден!", 32, "Ошибка в имени файла")
EndIf
If IsNull(getDoc) Or IsEmpty(getDoc) Then Exit Sub ' Почему-то не удалось открыть
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

economist

Также есть весьма компактные способы из "мира" VBA, например так в Calc:


Option VBASupport 1
Sub OpenXLSODS
Workbooks.open "C:\DOWNLOAD\Список.xls"
End sub
Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...

alexmn31

Цитата: economist от 10 января 2018, 11:25Также есть весьма компактные способы из "мира" VBA, например так в Calc:
Эт получается, что можно в libre вставоять любрй код из vba или не совсем так  или совсем не так?

economist

#4
VBA-rод будет в Calc работать почти любой, связанный с базовой объектной моделью Excel (Приложение - Книги - Рабочая книга - Листы - Активный лист - Ячейки - Диапазоны - Выделение - Содержимое ячейки - Формула/Текст - Символы итп). К сожалению, единого центра документации по совместимости кода нет, хуже того - полно устаревшей информации. Но это лучше чем ничего.

Не будет работать VBA-код, связанный с контролами, элементами управления ActiveX, событиями.
Этот код придется переписывать под StarBasic и его поведение.

Чтобы еще больше в Calc cблизить VBA и SB-проекты (код в листах книги итп) - нужно вверху модуля написать 2 строки, а в коде 1 раз вызвать ThisComponent.BasicLibraries.VBACompatibilityMode=true, сохранить файл в ODS. Например:


Option VBASupport 1
Option Compatible
'-----------------------------------------------
Function СУММОЧКА(a as range) as double
ThisComponent.BasicLibraries.VBACompatibilityMode=true  
For each n in a
s = s + n.value
Next n
СУММОЧКА=s
End Function
 

Если вспомнить что благодаря MS Excel компьютеры пришли в бизнес, стали массовыми и персональными, а затем вернулись в дома и изменили мир, а сам Excel до сих пор самое популярное приложение в мире (из больших) - то коллективное копание в сторону VBA в Calc является тем чудом, что может изменить мир СПО с его, возможно, лучшим продуктом в лице OpenOffice|LibreOffice. Пятнично, но по существу.   
Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...