Войти
 
 
   
 
  
Новости Notes.ру Библиотека Биржа труда Вопрос - ответ Форум Регистрация Поиск О проекте
Разделы
О Notes
Советы
Шаблоны и примеры
Литература
Презентации
 
Всё о задаче AdminP. Часть вторая   Во второй части мы завершаем рассмотрение AdminP. В ней рассмотрены запросы междоменного администрирования и способы управления функциями AdminP с помощью настроек документа сервера, команд консоли сервера, файла Notes.ini и интервалов очистки базы данных. В этой статье предполагается, что вы опытный администратор Domino и прочитали первую часть
О Notes Читать статью
 
Всё о задаче AdminP. Proxy-действия в R5 и Domino 6   Приложение к статье об административном процессе
О Notes Читать статью
 
Всё о задаче AdminP. Часть первая   Перевод классической статьи 2003-его года о задаче административного процесса (AdminP). Очень полезна для понимания работы механизма этой задачи. В первой части статьи описаны компоненты задачи AdminP, как они работают, и как их использование помогает сделать работу администратора Domino проще. Задача AdminP (сакращённо от Administration Process, Административный процесс) работает с базой административных запросов (Administration Requests, admin4.nsf)
О Notes Читать статью
 


Шаблоны и примеры

Главная   Библиотека   Шаблоны и примеры

Экспорт представления в электронную таблицу

Николай Норкин
Вятские Информационные Технологии, г. Киров
В настоящем решении представлен универсальный код для экспорта информации на основе представления в электронную таблицу (для настоящего примера – в таблицу MS Excel) через OLE-механизм
Почему код универсальный? Находящихся в базе примера (скачать >>>) элементов дизайна даже с избытком хватит для встраивания в любое приложение
Но для представлений есть пункт Главного меню Edit -> Copy Selected as Table? Представленный код расширяет возможности подобного системного экспорта за счёт экспорта форматирования представления (в частности, управления свёртыванием категорий). Кроме того, разработчик может переопределить логику обработки экспорта для любого представления, поместив в электронную таблицу любые данные как хранящиеся непосредственно в документе, так и не хранящиеся там
Можно ли экспортировать выделенные документы? Решение для экспорта выделенных документов есть в портфолио автора. Надеюсь ознакомить с ним в следующий раз (перейти >>>)
Почему Excel? Почему OLE? Код для экспорта в MS Excel наиболее проработан у автора. Выгрузка в OpenOffice реализована в тестовом режиме. Если коллеги решат доработать пример для поддержки более универсальных возможностей – автор с удовольствием поделится наработанным материалом
Код примера полностью взят из библиотеки шаблонов, которой автор пользуется для разработки ресурсов, поэтому некоторые вещи оказались «вырезанными». В частности, отсутствует поддержка базы Справочника, содержащего написание формул Excel в русском и английском вариантах, хотя в коде осталась библиотека getDatabase по работе с этой базой

Состав базы примера (скачать >>>)
Общее действие (shared action) Экспорт в электронную таблицу. Действие размещается в панели действий интерфейсного представления. В зависимости от параметра MedicalReportType файла notes.ini подключается код библиотек для работы с MS Excel или OpenOffice через механизм OLE (работа через XML в примере закомментирована, библиотеки для работы с OpenOffice также не включены в пример)
Библиотека createReportOLE подключает код библиотек в зависимости от выбранного приложения для экспорта (см. предыдущий абзац) и имени представления. Для того, чтобы переопределить обработку экспорта для конкретного представления, создайте библиотеку (Script Library) с именем OLEViewMS Excel-алиас представления, в котором разместите код для класса OLEReport, наследуемого из класса BaseOLEViewExcel
Представление (LSScripts) с алиасом LSScripts, содержащее список скриптовых библиотек ($FormulaClass = "512"), в котором код библиотеки createReportOLE проверяет наличие библиотеки, перекрывающей код обработки
Библиотека baseOLEViewExcel, определяющая код обработки экспорта представления
Библиотека excelConstants, содержащая список констант, используемых MS Excel
Библиотеки excel-Primitives, excel-Primitives9, excel-Primitives10, excel-Primitives11, определяющие код для форматирования элементов книги MS Excel (листов, ячеек и т.д.) в зависимости от версии MS Excel
Библиотека Lib_WinReg, содержащая код для получения настроек системного реестра (в частности, символ разделения элементов списка, символ разделения целой и дробной части, символ разделения числовых триад)
Библиотека getDatabase, содержащая код для работы с прочими базами через базу Справочник (в коде примера используется, но на функционале не отражается)

Комментарий к коду
1. Библиотеки подключаются к коду в период исполнения кода при помощи функции Execute, что позволяет задать необходимую гибкость кода (MS Excel или OpenOffice, версия MS Excel, стандартная обработка или «пользовательская»)
key = "OLEView" & app & "-" & viewAlias
Set lsScript = lsview.getDocumentbyKey(key, True)
If lsScript Is Nothing Then
retCode% = Execute(|Use "OLEView| & app & |"
Dim xlsReport as oleReport
Set xlsReport = New oleReport(session, view)
call xlsReport.run()|)
Else
retCode% = Execute(|Use "| & key & |"
Dim xlsReport as oleReport
Set xlsReport = New oleReport(session, view)
call xlsReport.run()|)
End If

2. Функция BaseOLEViewExcel.addHyperlinkToDocument создаёт в ячейке Excel notes-ссылку на документ
3. Функция BaseOLEViewExcel.isHiddenWhen для отображения колонок с условным форматированием (hide-when) использует специальную договорённость при проектировании представления – в формуле столбца размещается комментарий, содержащий формулу скрытия:
REM { "hidden formula"; order := 4; a0 := @Environment("viewDocLibDocColumn"); @If(a0 = ""; @True; @Length(a0) < order; @True; @Middle(a0; order - 1; 1) != "1")};
docAuthors
Если дизайн базы скрыт, эта функция не должна работать

Читайте также на Notesnet.ru
Цикл материалов Интерфейс представлений >>>
Экспорт выделенных документов в электронную таблицу >>>
 
  Опубликовано — 05/25/2009 |    

lmike, 03.06.2009 16:59:58:
Николай, про CSV не понял - что мешает посмотреть настройки системы (кто разделяет порядки) и привести к стандарту (если компания не транснациональная)?
Форматирование можно сделать средствами самих продуктов (макросы, условное форматирование) - тобишь открываем всегда опред файл, а он спросит - ихгде исходные данные...
Это и есть задача интеграции ;)

я именно за полуфабрикат (так гибче)
Универсального ХМЛ нет и быть не может, цели МС и юзеров совпадают в узкой области - отдачи бабла за их новые продукты (понятно - прогибаются с нек. фичами)
МС не хочет (фактически) поддерживать ни один из сущ. ныне стандартов (JS, HTML, video, audio... даже ODF), создаются их форки
в этой ситуации нам (разработчикам) приходится искать пути по совмещению :( - увы

Ник Норкин, 03.06.2009 15:53:47:
То есть, универсального xml нет?
Нужно делать решение или для каждого формата,
или полуфабрикат с дальнейшей обработкой для каждого офиса?

Ник Норкин, 03.06.2009 15:46:47:
Михаил, спасибо за ссылки! постараюсь посмотреть, но слишком быстро не обещаю
> а если просто таблицу (плэйн таблицу с данными)
Мы с Александром решили, что нужно форматирование
> создавать CSV файлы (это точно все понимают)
угу... только числовые данные с точкой интерпретируются в дату

lmike, 03.06.2009 15:09:06:
вот чтота подобное в мыслях ;)
http://cocoon.apache.org/2.1/userdocs/xls-serializer.html

lmike, 03.06.2009 14:39:51:
мысль, кот. я пытаюсь продвинуть ;), заключается в следующем:
попытки описания таблиц в коде приводят к сложному управлению генерацией отчетов (код менять прийдется)
создание конвеера из XML, XSLT - даст возможность управлять процессом на уровне "пользователя"

lmike, 03.06.2009 14:29:09:
в случае отвержения вариантов - кол-во решений уменшается ;)
решение двухстадийное...
-генерим промежуточный ХМЛ, кот. птом можно с малыми затратами отпарсить в оба формата
-создаем два шаблона (или более)
фактически это уже проделывалось тока на LS + OLE
случай со "старыми" офисами - открыт...
можно написать процедуру для обработки XML в EXCEL, пользуя http://sourceforge.net/projects/openxls
или наборчики:
http://www.rgagnon.com/javadetails/java-0516.html

хотя если рассматривать просто отчёты без возможности редактирования - яб предпочёл ПДФ. Для этого есть FOP
к сожалению, сейчас у меня нет наработок по FOP (не могу подробнее рассказать)

а если просто таблицу (плэйн таблицу с данными) - не вижу препятствий - создавать CSV файлы (это точно все понимают)

Ник Норкин, 03.06.2009 13:33:41:
Михаил, тема мне интересна,
> ежели мы используем на сервере - то не надо ставить офис
нельзя ставить офис на сервер, вообще в техзадания всегда включаю пункт о недопустимости использования решения, требующего установку клиентского ПО на сервер
>бывают клиентские места - где создают отчёт, а смотрят его в "др. месте"
Это как повар, который готовит, но сам не пробует свою стряпню?
>ежели мы используем на клиенте - то возможны варианты, когда ХМЛ понимает и МСО и ОО
А это можно поподробней? Я как раз обдумывал такое решение - но MS не понимает ODF до самой последней реинкарнации MS2007, MS2003-- не понимает MS2007, OO понимает и MS2003XML, и MS2007 (последние версии OO)
Брать за основу решения отвергнутый самим хозяином MS2003XML - совсем не streamно
Пожалуйста, о вариантах?

lmike, 02.06.2009 19:12:16:
Николай, я могу ппопробовать объяснить ;) про лицензии...
-ежели мы используем на сервере - то не надо ставить офис
-ежели мы используем на клиенте - то возможны варианты, когда ХМЛ понимает и МСО и ОО
-бывают клиентские места - где создают отчёт, а смотрят его в "др. месте"

Ник Норкин, 02.06.2009 14:04:34:
Александр, поясни мысль: каким образом избавляет от использования лицензий?
Визуализация & работа с данными - всё равно требует приложения, для нашего случая - электронной таблицы. Так что лицензии вроде как не экономятся нигде. Другое дело, если мы отвязываемся от одной из реализаций офиса - MS Office, в этом случае давай думать чем его заменить по функциональности

Александр Еремин, 27.05.2009 09:55:00:
конечно же оформленный xml нужен, зато он избавляет от использование лицензий на офис :) хотя я и сам через ОЛЕ делаю. вот все хочу попробовать с xml :)

Ник Норкин, 27.05.2009 09:30:34:
1. xml - это данные, пользователям нужно оформление этих данных
2. а мне нравится то, что при работе с OLE я ничего не пишу напрямую на диск, следовательно, и контролировать удаление файлов мне не надо. С XML я так проблему не решил

Александр Еремин, 27.05.2009 05:04:07:
imho, наиболее универсально будет экспорт в xml, а его уже можно будет открыть/обработать хоть где угодно, без дерганий к OLE.



Добавить комментарий
Имя * :
e-mail
Комментарий * :
Код подтверждения * :


Мероприятия
Пресс-релизы
Биржа труда
Последнее на форуме
 
А так же:
Как удалить профиль?
16.04.2016 00:08:51
Скопировать в буфер поле документа
24.05.2015 08:55:52
Импорт DXL-описания документов в Lotus Domino. Одноимённые поля
16.04.2015 16:49:58
 
© LOGOSPHERE.RU