Большинство отчетов системы DIRECTUM формируется с помощью объектной модели приложений-редакторов Microsoft Office. При необходимости отчет можно доработать, чтобы он формировался не зависимо от установленного на компьютере пользователя приложения-редактора. Это позволит формировать отчеты с помощью приложений, отличных от Microsoft Office, например LibreOffice или Apache OpenOffice.
Для возможности доработки отчетов в системе DIRECTUM разработана библиотека генерации документов, которая представляет собой COM-библиотеку и предоставляет методы для работы с документами.
Чтобы процесс формирования отчета не зависел от Microsoft Office, необходимо в расчете отчета все обращения к объектной модели Microsoft Office заменить на работу с объектами, получаемыми с помощью библиотеки генерации документов. Для работы с библиотекой создайте СОМ-объект:
DocumentProcessingLib = CreateObject('NPOComputer.DocumentProcessing.GenerateDocument')
Полученный объект предоставляет методы для работы с документами:
• | GetAsposeWordsDocument – возвращает экземпляр объекта класса Aspose.Words.Document. |
Синтаксис:
object GetAsposeWordsDocument(string fileName)
Параметры:
• | Filename – путь до файла с документом Word в форматах DOC, DOT, DOCM, DOTM, DOCX, DOTX, FlatOpc, FlatOpcMacroEnabled, FlatOpcTemplate, FlatOpcTemplateMacroEnabled, XML, ODT, OTT, OOXML, WordML, RTF, HTML, XHTML, MHTML, TXT. |
Можно создать пустой документ без привязки к существующему на диске файлу. Для этого вызовите метод GetAsposeWordsDocument, передав в параметре Filename пустую строку;
• | GetAsposeWordsDocumentBuilder – возвращает экземпляр объекта класса Aspose.Words.DocumentBuilder. |
Синтаксис:
object GetAsposeWordsDocument(Aspose.Words.Document document)
Параметры:
• | document – экземпляр объекта класса Aspose.Words.Document; |
• | GetAsposeCellsWorksheet – возвращает экземпляр объекта класса Aspose.Cells.Worksheet. |
Синтаксис:
object GetAsposeCellsWorksheet(string fileName, int worksheet)
Параметры:
• | fileName – путь до файла с документом Excel в форматах XLS, XLSX, XLSM, XLSB, XLTX, XLTM, CSV, SpreadsheetML, ODS; |
• | worksheet – номер необходимого листа документа. Нумерация листов начинается с 0; |
• | GetColorByName – возвращает экземпляр структуры System.Drawing.Color. |
Синтаксис:
object GetColorByName(string colorName)
Параметры:
• | colorName – имя одного из поддерживаемых цветов. |
Объекты классов Aspose.Words.Document и Aspose.Cells.Worksheet можно использовать для различных действий над документами, переданными в параметре filename. Следует учитывать ограничения:
Некоторые методы и свойства не поддерживаются при работе через COM
Вместо них используйте альтернативные методы библиотеки:
Синтаксис: object GetAsposeCellsThemeColor(int themeColorType, double tint) Параметры:
Синтаксис: void AddAsposeCellsHyperlink(dynamic worksheet, string startCell, string endCell, string adress, string displayText, string screenTip) Параметры:
|
При работе через COM не поддерживаются перегрузки методов и свойств
Для вызова перегрузок методов или свойств добавляются постфиксы типа «_<номер перегрузки>». Пример:
List.Item_2(ItemName);
|
Некоторые COM-объекты передаются некорректно в качестве параметров
При передаче COM-объекта в качестве параметра для метода и свойства может потребоваться использование вставки на VBS. Пример:
// Дублировать последнюю строку таблицы Table SCRIPT_FUNC_NAME = 'AppendNewRow' SCRIPT_TEXT = ' Function AppendNewRow() Dim LastRowClone Set LastRowClone = Table.LastRow.Clone(True) Table.AppendChild(LastRowClone) End Function' SCRIPT_VAR = 'Table' ScriptControl = CreateObject("MSScriptControl.ScriptControl") ScriptControl.Language = "VBScript" ScriptControl.Reset ScriptControl.AddObject(SCRIPT_VAR; Table) ScriptControl.AddCode(SCRIPT_TEXT) ScriptControl.Run(SCRIPT_FUNC_NAME)
|
Заполнить указанный файл отчета значениями из списка.
// Создание объекта библиотеки генерации документов DocumentProcessingLib = CreateObject('NPOComputer.DocumentProcessing.GenerateDocument') Document = DocumentProcessingLib.GetAsposeWordsDocument(Path) i = 0 FormFields = Document.Range.FormFields while i < ListVar.Count VarName = ListVar.Names(i) VarValue = ListVar.Values(i) // Поиск соответствующего поля в тексте документа Field = FormFields.Item_2(VarName) if not VarIsEmpty(Field) Field.Result = VarValue endif i = i + 1 endwhile // Удалить из документа поля, сохранив текст Document.UnlinkFields() Doc.Save_2(Path; 30) Отчеты Описание типового маршрута и Контроль сроков получения поручений уже переведены на работу без Microsoft Office. В расчете этих отчетов можно посмотреть подобную реализацию доработок. |
© Компания DIRECTUM, 2018 | Сообщество пользователей DIRECTUM |