09.06.2020, 16:44 | #1 |
Участник
|
excel autofit columns
Добрый день,
Я формирую документ Excel документ испольуя класс XMLExcelDocument_RU: X++: protected void formatHeader(TaskDaysFactTmp taskDaysFactTmp_Header) { pageHeaderDateLineNum = 3; dateNumColumn = new Map(Types::Date,Types::Integer); excelDocument.insertValue(ComExcelDocument_RU::numToNameCell(1,7),"@SYS54618"); excelDocument.insertValue(ComExcelDocument_RU::numToNameCell(2,7),"@SYS81332"); excelDocument.insertValue(ComExcelDocument_RU::numToNameCell(pageHeaderDateLineNum,7),"@IPR306"); excelDocument.insertValue(ComExcelDocument_RU::numToNameCell(pageHeaderDateLineNum+1,7),"@IPR307"); excelDocument.insertValue(ComExcelDocument_RU::numToNameCell(pageHeaderDateLineNum+2,7),"@SYS108709"); bookmark = ComExcelDocument_RU::numToNameCell(1,7) +':'+ ComExcelDocument_RU::numToNameCell(pageHeaderDateLineNum+2,7); bookmark = ComExcelDocument_RU::replaceWorksheetName(bookmark,worksheet.name()); } Столбцы B, F, G, H не выровнены под содержимое ячеек. Как добиться выравнивания? Спасибо. Последний раз редактировалось dark_knight; 09.06.2020 в 16:46. |
|
09.06.2020, 18:34 | #2 |
Участник
|
Цитата:
Сообщение от dark_knight
Добрый день,
Я формирую документ Excel документ испольуя класс XMLExcelDocument_RU: X++: protected void formatHeader(TaskDaysFactTmp taskDaysFactTmp_Header) { pageHeaderDateLineNum = 3; dateNumColumn = new Map(Types::Date,Types::Integer); excelDocument.insertValue(ComExcelDocument_RU::numToNameCell(1,7),"@SYS54618"); excelDocument.insertValue(ComExcelDocument_RU::numToNameCell(2,7),"@SYS81332"); excelDocument.insertValue(ComExcelDocument_RU::numToNameCell(pageHeaderDateLineNum,7),"@IPR306"); excelDocument.insertValue(ComExcelDocument_RU::numToNameCell(pageHeaderDateLineNum+1,7),"@IPR307"); excelDocument.insertValue(ComExcelDocument_RU::numToNameCell(pageHeaderDateLineNum+2,7),"@SYS108709"); bookmark = ComExcelDocument_RU::numToNameCell(1,7) +':'+ ComExcelDocument_RU::numToNameCell(pageHeaderDateLineNum+2,7); bookmark = ComExcelDocument_RU::replaceWorksheetName(bookmark,worksheet.name()); } Столбцы B, F, G, H не выровнены под содержимое ячеек. Как добиться выравнивания? Спасибо. |
|
09.06.2020, 18:43 | #3 |
Участник
|
вроде преднастроенного такого свойства нельзя выставить в шаблоне. можно только готовые данные которые уже есть в документе выравнить соглсно статье
https://support.office.com/en-us/art...8-9774a0905f46 а вот преднастроить в самом шаблоне как я понял нельзя. |
|
09.06.2020, 19:58 | #4 |
Участник
|
если в шаблоне выставить нельзя (что странно, на мой взгляд) - то тогда после формирования файла открывать его через COM Excel и устанавливать свойство
|
|
10.06.2020, 19:48 | #5 |
Участник
|
Стандартного способа для этого класса нет и быть не может, поскольку сам по себе этот класса - это набор объектов MAP. А итоговый отчет формируется в самом конце по тем реквизитам, которые в этих MAP сохранены. Так вот, для столбцов там предусмотрена только возможность явным образом указать ширину
OXMLWorksheet_RU.columnWidth() Можно ли вычислить нужную ширину? Можно, конечно. Только, опять же, по умолчанию, в этом классе предусмотрен только расчет высоты для ячеек со свойством WordWrap (перенос по словам) \Classes\XMLExcelDocument_RU\getNamedRangeHeightWrapped В принципе, не сложно сделать по аналогии для расчета ширины. Просто вместо size.get_Height() использовать size.get_Width(). Ну, и еще надо конвертировать полученные пиксели в символы, поскольку ширина в символах задается Не знаю, есть у Вас такой класс \Classes\OXMLExcelReport_InventTurnoverReport_RU Вот в нем сделан расчет ширины ячейки и подгонка под нужный размер по переданному тексту. Правда, этот класс на основе XMLExcelReport_RU, который внутри себя и работает с классом XMLExcelDocument_RU (переменная document).
__________________
- Может, я как-то неправильно живу?! - Отчего же? Правильно. Только зря... |
|
|
За это сообщение автора поблагодарили: S.Kuskov (2). |
04.12.2024, 13:40 | #6 |
северный Будда
|
__________________
С уважением, Вячеслав |
|
06.12.2024, 23:32 | #7 |
Участник
|
Речь идет о классе XMLExcelDocument_RU, который формирует отчеты специфическим способом.
Использование AutoFit() возможно только в итоговом отчете. А то, что наполняется в классе XMLExcelDocument_RU - это некий шаблон, из которого потом строки копируются в итоговый отчет. Это значит, что если использовать AutoFit() в момент заполнения ячеек шаблона, то ширина столбца будет "плясать" от одной строки к другой. И в итоговом отчете ширина будет установлена по содержимому ячеек последней строки отчета Т.е. для использования AutoFit() в классе XMLExcelDocument_RU придется вмешиваться не в процесс формирования отчета, а в процесс получения итогового файла. Как вариант, делать подгон на каждой строке, но сравнивать с предыдущей строкой. И если ширина в текущей строке меньше, чем в предыдущей, то устанавливать равной ширине предыдущей строки
__________________
- Может, я как-то неправильно живу?! - Отчего же? Правильно. Только зря... |
|
|
|