Макросы LO и "Сохранить Лист" в формате xls

Автор ASSEI, 22 марта 2017, 21:41

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

sokol92

Книга А.Питоньяка "OpenOffice.org Macros Explained" (OOME_4_0.odt), глава "Library Management".
Владимир.

HYPNO

Цитата: Rafik от 23 марта 2017, 07:50Этот макрос вытащит один, указанный лист в новый документ и сохранит новую книгу в формате XLS
Sub One_sheet_to_XLS()
    Dim oDoc1,oSheets1 As Object ' Документ куда тащим лист и его листы
    Dim oDoc,oSheet As Object ' Документ откуда тащим и интересующий лист
    Dim cFnm As String
' ==== Перетаскиваем интересующий лист из текущего документа
    ' Документ откуда
    oDoc = ThisComponent ' Например, текущий документ
    ' Интересующий лист, который необходимо сохранить
    oSheet = oDoc.Sheets(0) ' Например, первый лист документа
    ' Открываем пустой документ для импорта, это будет временный файл
    Set oDesk = createUnoService("com.sun.star.frame.Desktop")
    oDoc1 = oDesk.LoadComponentFromUrl("private:factory/scalc", "_blank", 63, Array())   
    ' Импорт листа в пустой документ (временный файл)
    oSheets1 = oDoc1.getSheets()
    oSheets1.importSheet(oDoc,oSheet.LinkDisplayName,0)
    ' Удаляем ненужные листы в новом документе
    For ii = 1 To oDoc1.Sheets.Count -1
        oDoc1.Sheets.removeByName(oDoc1.Sheets(ii).Name)
    Next
'==== Лист перетащен
'==== Будем сохранять туда же, где сам документ
    cFnm = convertFromURL(oDoc.URL)
    aFnm = Split(cFnm,getPathSeparator())
    aFnm(Ubound(aFnm)) = "Новое имя файла"+".xls"
'=== путь и имя файла есть, можем сохранить
    ' Зададим формат для сохранения
    Dim args(0) as new com.sun.star.beans.PropertyValue
    args(0).Name = "FilterName"
    args(0).Value = "MS Excel 97" 'формат Excel 97
    ' Сохраним
    oDoc1.storeToURL(convertToURL(join(aFnm,getPathSeparator())), args())
    ' Закроем временный файл без сохранения
    oDoc1.Close(True)
End Sub

Скажите, в чем может быть проблема: скопировал ваш код, выдает ошибку "Недопустимое значение или тип данных. Индекс за пределами заданного диапазона."

Стал выполнять его пошагово: когда создали временный файл - удаляется Лист1, Лист3, а Лист2 - нет, собственно и выходит ошибка..

Если тут указать "-2" - тогда макрос работает, но в документе останется 2 листа: скопированный и Лист2
For ii = 1 To oDoc1.Sheets.Count -1

bigor

Цитата: HYPNO от 20 февраля 2024, 23:33удаляется Лист1, Лист3, а Лист2
а что у вас за офис? В Libre новый файл создается с одним листом + лист который перенесли, откуда остальное?
Поддержать наш форум можно здесь