Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

7 Декабрь 2021, 17:25 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Здесь можно поблагодарить участников форума Улыбка
 
   Начало   Помощь Поиск Войти Регистрация    задать вопрос  
Страниц: 1   Вниз
  Печать  
Автор Тема: Макросы LO и "Сохранить Лист" в формате xls  (Прочитано 3632 раз)
0 Пользователей и 1 Гость смотрят эту тему.
ASSEI
Форумчанин
***
Offline Offline

Пол: Мужской
Расположение: Тамбов
Сообщений: 74


« Стартовое сообщение: 22 Март 2017, 21:41 »

Доброго всем вечера! подскажите как можно решить такой момент как из LO 5.3 макросом "Сохранить Лист" в формате xls. Заранее всем спасибо!
Записан
Rafik
Форумчанин
***
Offline Offline

Сообщений: 107


« Ответ #1: 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
Записан
ASSEI
Форумчанин
***
Offline Offline

Пол: Мужской
Расположение: Тамбов
Сообщений: 74


« Ответ #2: 24 Март 2017, 12:47 »

СПАСИБО ВАМ ОГРОМНОЕ!
Записан
v.kolesnikov@original-gro
Новичок
*
Offline Offline

Сообщений: 2


« Ответ #3: 14 Октябрь 2021, 10:45 »

Этот макрос вытащит один, указанный лист в новый документ и сохранит новую книгу в формате 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
А как сделать, что-бы все листы документа сохранились как отдельные книги?
Записан
v.kolesnikov@original-gro
Новичок
*
Offline Offline

Сообщений: 2


« Ответ #4: 14 Октябрь 2021, 11:21 »

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)) = "Линия 1"+".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)
   
   
   
      oSheet = oDoc.Sheets(1) ' Например, первый лист документа
   ' Открываем пустой документ для импорта, это будет временный файл
   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)) = "Линия 2"+".xls"
'=== путь и имя файла есть, можем сохранить

   ' Сохраним
   oDoc1.storeToURL(convertToURL(join(aFnm,getPathSeparator())), args())
   ' Закроем временный файл без сохранения
   oDoc1.Close(True)
   
   
      oSheet = oDoc.Sheets(2) ' Например, первый лист документа
   ' Открываем пустой документ для импорта, это будет временный файл
   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)) = "Линия 3"+".xls"
'=== путь и имя файла есть, можем сохранить

   ' Сохраним
   oDoc1.storeToURL(convertToURL(join(aFnm,getPathSeparator())), args())
   ' Закроем временный файл без сохранения
   oDoc1.Close(True)
   
      oSheet = oDoc.Sheets(3) ' Например, первый лист документа
   ' Открываем пустой документ для импорта, это будет временный файл
   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)) = "Линия 4"+".xls"
'=== путь и имя файла есть, можем сохранить

   ' Сохраним
   oDoc1.storeToURL(convertToURL(join(aFnm,getPathSeparator())), args())
   ' Закроем временный файл без сохранения
   oDoc1.Close(True)
   
   
      oSheet = oDoc.Sheets(4) ' Например, первый лист документа
   ' Открываем пустой документ для импорта, это будет временный файл
   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)) = "Линия 5"+".xls"
'=== путь и имя файла есть, можем сохранить

   ' Сохраним
   oDoc1.storeToURL(convertToURL(join(aFnm,getPathSeparator())), args())
   ' Закроем временный файл без сохранения
   oDoc1.Close(True)
   
   
   
   
   
   
End Sub

Записан
Страниц: 1   Вверх
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!