AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 09.06.2020, 16:44   #1  
dark_knight is offline
dark_knight
Участник
 
20 / 10 (1) +
Регистрация: 20.01.2019
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());

}
При это при вставке значений столбцы оказываются автоматически не развернутыми под содержимое вствленных значений. Насколько я знаю это называется autofit. Но в классе который я использую XMLExcelDocument_RU нет подобных методов. Можно ли как-то развернуть столбцы под содержимое вставленное в ячейки? Во вложении скриншот того что получается в итоге.

Столбцы B, F, G, H не выровнены под содержимое ячеек. Как добиться выравнивания?

Спасибо.
Миниатюры
Нажмите на изображение для увеличения
Название: 112.JPG
Просмотров: 65
Размер:	157.7 Кб
ID:	12850  

Последний раз редактировалось dark_knight; 09.06.2020 в 16:46.
Старый 09.06.2020, 18:34   #2  
arhat is offline
arhat
Участник
 
116 / 16 (1) ++
Регистрация: 10.11.2014
Адрес: Казахстан
Цитата:
Сообщение от 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());

}
При это при вставке значений столбцы оказываются автоматически не развернутыми под содержимое вствленных значений. Насколько я знаю это называется autofit. Но в классе который я использую XMLExcelDocument_RU нет подобных методов. Можно ли как-то развернуть столбцы под содержимое вставленное в ячейки? Во вложении скриншот того что получается в итоге.

Столбцы B, F, G, H не выровнены под содержимое ячеек. Как добиться выравнивания?

Спасибо.
А в шаблоне указать? И потом вставлять
Старый 09.06.2020, 18:43   #3  
dark_knight is offline
dark_knight
Участник
 
20 / 10 (1) +
Регистрация: 20.01.2019
вроде преднастроенного такого свойства нельзя выставить в шаблоне. можно только готовые данные которые уже есть в документе выравнить соглсно статье
https://support.office.com/en-us/art...8-9774a0905f46
а вот преднастроить в самом шаблоне как я понял нельзя.
Старый 09.06.2020, 19:58   #4  
Pandasama is offline
Pandasama
Участник
 
457 / 137 (5) +++++
Регистрация: 11.08.2014
Адрес: Барнаул
если в шаблоне выставить нельзя (что странно, на мой взгляд) - то тогда после формирования файла открывать его через COM Excel и устанавливать свойство
Старый 10.06.2020, 19:48   #5  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,701 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Стандартного способа для этого класса нет и быть не может, поскольку сам по себе этот класса - это набор объектов 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  
pitersky is offline
pitersky
северный Будда
Аватар для pitersky
Ex AND Project
Соотечественники
 
1,510 / 435 (18) +++++++
Регистрация: 26.09.2007
Адрес: Солнечная система
Так вот же
__________________
С уважением,
Вячеслав
Старый 06.12.2024, 23:32   #7  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,701 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Цитата:
Сообщение от pitersky Посмотреть сообщение
Речь идет о классе XMLExcelDocument_RU, который формирует отчеты специфическим способом.

Использование AutoFit() возможно только в итоговом отчете. А то, что наполняется в классе XMLExcelDocument_RU - это некий шаблон, из которого потом строки копируются в итоговый отчет.

Это значит, что если использовать AutoFit() в момент заполнения ячеек шаблона, то ширина столбца будет "плясать" от одной строки к другой. И в итоговом отчете ширина будет установлена по содержимому ячеек последней строки отчета

Т.е. для использования AutoFit() в классе XMLExcelDocument_RU придется вмешиваться не в процесс формирования отчета, а в процесс получения итогового файла.

Как вариант, делать подгон на каждой строке, но сравнивать с предыдущей строкой. И если ширина в текущей строке меньше, чем в предыдущей, то устанавливать равной ширине предыдущей строки
__________________
- Может, я как-то неправильно живу?!
- Отчего же? Правильно. Только зря...
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
DeniZone: Importing an Excel spread sheet with multiple columns Blog bot DAX Blogs 0 21.02.2015 17:12
atinkerersnotebook: Using the Dynamics AX Excel Add-In Blog bot DAX Blogs 1 25.09.2013 07:11
atinkerersnotebook: Walkthrough & Tutorial Summary Blog bot DAX Blogs 1 09.09.2013 09:11
atinkerersnotebook: Using Excel to Import Products & Services in Dynamics AX Blog bot DAX Blogs 0 19.07.2013 15:11
Excel, объединенная ячейка, AutoFit RVS DAX: Программирование 1 24.10.2012 09:20
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 04:04.