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

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

31 Март 2020, 16:04 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Доступно и просто о работе в офисных пакетах
 
   Начало   Помощь Поиск Войти Регистрация    задать вопрос  
Страниц: « 1 2   Вниз
  Печать  
Автор Тема: Выборка из общей таблицы и запись выборки в отдельный файл  (Прочитано 1774 раз)
0 Пользователей и 1 Гость смотрят эту тему.
luu
Участник
**
Offline Offline

Сообщений: 48


« Ответ #15: 21 Январь 2020, 17:04 »

Как обойти это?
а что дает вывод FolderName ?
Дает полный путь к файлу, в котором запускается макрос + /Заявки/

Это просто для самопроверки добавил. Чтобы понять, верное ли значение в переменной

Вот:

« Последнее редактирование: 21 Январь 2020, 17:15 от luu » Записан
Bigor
Опытный пользователь
***
Offline Offline

Пол: Мужской
Сообщений: 865


« Ответ #16: 21 Январь 2020, 17:20 »

Ну вот этот путь теперь нужно конвертнуть в URL через ConvertToURL
ps и забыл что там у вас в имени файла, но лучше конвертировать уже полный путь с именем файла
« Последнее редактирование: 21 Январь 2020, 17:25 от Bigor » Записан
luu
Участник
**
Offline Offline

Сообщений: 48


« Ответ #17: 21 Январь 2020, 22:43 »

Ну вот этот путь теперь нужно конвертнуть в URL через ConvertToURL
ps и забыл что там у вас в имени файла, но лучше конвертировать уже полный путь с именем файла
Спасибо за подсказку!
Сейчас код такой:
Код:
Sub export_to_pdf

Dim param1(1) As new com.sun.star.beans.PropertyValue
Dim Arg(0) As new com.sun.star.beans.PropertyValue

FolderName = convertFromURL(DirectoryNameoutofPath(ThisComponent.URL, "/") & "/Заявки/"
ExportFileName = "test"
 
Doc = ThisComponent
Sheet = Doc.Sheets.getByName("Форма заявки")
CellRange = Sheet.getCellRangeByName("$a$1:$f$30")

REM Export PDF:
Arg(0).Name = "Selection"
Arg(0).Value = CellRange

  Param1(0).Name =  "FilterName"
  Param1(0).Value = "calc_pdf_Export"
  Param1(1).Name = "FilterData"
  Param1(1).Value = Arg()
                       
Doc.storeToURL ConvertToURL(FolderName & ExportFileName & ".pdf"), Param1()

REM Export XLS:
  Param1(0).Name =  "FilterName"
  Param1(0).Value = "MS Excel 97"
  Param1(1).Name = "FilterData"
  Param1(1).Value = Arg()

Doc.storeToURL ConvertToURL(FolderName & ExportFileName & ".xls"), Param1()

End Sub

Но возникло два вопроса:
1. При экспорте в XLS он экспортирует весь файл со всеми листами. Как мне указать, чтобы экспортировался только  выделенный диапазон определенного листа? Вроде бы так же передается через параметр FilterData, но не работает Грустный
2. Вот в этой строке указывается диапазон для экспорта, как я понимаю. Но можно ли его сделать зависимым исходя из информации на листе? Например, если в сформированной заявке будет много строк, то не все они попадут в указанный заранее диапазон.

Код:
CellRange = Sheet.getCellRangeByName("$a$1:$f$30")
Записан
Bigor
Опытный пользователь
***
Offline Offline

Пол: Мужской
Сообщений: 865


« Ответ #18: 21 Январь 2020, 23:32 »

Как я понимаю
1.  FilterData работает только с выводом графики (pdf, png, jpg), поэтому с xls не работает
как вариант или перенести нужный диапазон/лист в новую книгу и сохранить или удалить все ненужное и сохранить.
2. Диапазон я задал, для своего примера, его можно в макросе менять как угодно.
« Последнее редактирование: 21 Январь 2020, 23:35 от Bigor » Записан
luu
Участник
**
Offline Offline

Сообщений: 48


« Ответ #19: 22 Январь 2020, 16:41 »

2. Диапазон я задал, для своего примера, его можно в макросе менять как угодно.
Да, конечно. Это понятно. Просто заявка может состоять, например из одной строки, а может из 300. И хотелось бы как-то универсально указать диапазон, чтобы не было много пустых страниц.
Записан
Bigor
Опытный пользователь
***
Offline Offline

Пол: Мужской
Сообщений: 865


« Ответ #20: 22 Январь 2020, 16:57 »

Вы же до сохранения файла уже знаете сколько строк в него вставили. Вот и задавайте нужный диапазон исходя из числа строк в нем.

зы удобнее задавать будет через getCellRangeByPosition
« Последнее редактирование: 22 Январь 2020, 17:01 от Bigor » Записан
luu
Участник
**
Offline Offline

Сообщений: 48


« Ответ #21: 23 Январь 2020, 10:58 »

Вот таким образом попытался после создания файла XLS открыть его и удалить один лишний, заранее известный лист.
Но чет ничего не меняется:
Код:
Sub export_to_pdf_xls

Dim param1(1) As new com.sun.star.beans.PropertyValue
Dim Arg(0) As new com.sun.star.beans.PropertyValue

Dim prop(0) as new com.sun.star.beans.PropertyValue

    prop(0).Name="Hidden"
    prop(0).Value= true
   
GlobalScope.BasicLibraries.LoadLibrary("Tools")

FolderName = convertFromURL(DirectoryNameoutofPath(ThisComponent.URL, "/") & "/Заявки/"
ExportFileName = "test"
 
Doc = ThisComponent
Sheet = Doc.Sheets.getByName("Форма заявки")
CellRange = Sheet.getCellRangeByName("$a$1:$f$300")

REM Export PDF:
Arg(0).Name = "Selection"
Arg(0).Value = CellRange

  Param1(0).Name =  "FilterName"
  Param1(0).Value = "calc_pdf_Export"
  Param1(1).Name = "FilterData"
  Param1(1).Value = Arg()
Doc.storeToURL ConvertToURL(FolderName & ExportFileName & ".pdf"), Param1()

REM Export XLS:
  Param1(0).Name =  "FilterName"
  Param1(0).Value = "MS Excel 97"
  Param1(1).Name = "FilterData"
  Param1(1).Value = Arg()
Doc.storeToURL ConvertToURL(FolderName & ExportFileName & ".xls"), Param1()

  oDoc2 = StarDesktop.loadComponentFromUrl(convertToURL(FolderName & ExportFileName & ".xls"), "_blank", 0, Prop())
  oDoc2.Sheets.removeByName("Заявки_авиа")
  oDoc2.Close(true)

End Sub
Записан
Bigor
Опытный пользователь
***
Offline Offline

Пол: Мужской
Сообщений: 865


« Ответ #22: 23 Январь 2020, 12:18 »

А что должно поменяться? Вы файл открыли, лист удалили и файл закрыли без сохранения
Записан
luu
Участник
**
Offline Offline

Сообщений: 48


« Ответ #23: 23 Январь 2020, 13:19 »

А что должно поменяться? Вы файл открыли, лист удалили и файл закрыли без сохранения
Спасибо! Теперь все получилось.
Код:
  oDoc2 = StarDesktop.loadComponentFromUrl(convertToURL(FolderName & ExportFileName & ".xls"), "_blank", 0, Prop())
  oDoc2.Sheets.removeByName("Заявки_авиа")
  oDoc2.Store()
  oDoc2.Close(true)

А по поводу строк указал диапазон в 300 срок и все работает как нужно. Если строка только одна - то импортирует одну страницу. Пустые корректно отрабатывает
Записан
Bigor
Опытный пользователь
***
Offline Offline

Пол: Мужской
Сообщений: 865


« Ответ #24: 23 Январь 2020, 14:01 »

Можно проще сделать:
Код:
Doc.Sheets.removeByName("Заявки_авиа")
Doc.storeToURL ConvertToURL(FolderName & ExportFileName & ".xls"), Param1()
Doc.Close(true)

End Sub

ps если строки макросом заполняете

« Последнее редактирование: 23 Январь 2020, 14:03 от Bigor » Записан
Страниц: « 1 2   Вверх
  Печать  
 
Перейти в:  

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