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

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

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

ASSEI

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

Rafik

Этот макрос вытащит один, указанный лист в новый документ и сохранит новую книгу в формате XLSSub 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


v.kolesnikov@original-gro

Цитата: Rafik от 23 марта 2017, 07:50
Этот макрос вытащит один, указанный лист в новый документ и сохранит новую книгу в формате XLSSub 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

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