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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 21.01.2015, 12:43   #1  
raniel is offline
raniel
Участник
Аватар для raniel
 
239 / 11 (1) +
Регистрация: 20.10.2006
? XMLExcelDocument_RU объединение ячеек и вставка картинки
Добрый день.
Делаю отчёт на базе XMLExcelDocument_RU. Всё хорошо, но встала задача объединять ячейки по вертикали и вставлять в неё картинку.
Код:
worksheet.row(0).multiplyCell(1,5);
worksheet.row(1).worksheet().mergeCells().add([1,1,2,2]);
ничего не делает, но и не ругается. К сталкивался с такой проблемой? Кол-во ячеек ля объединения динамическое, так что шаблоном эту проблему не решить.
Заранее спасибо.
Ax2012 R3
Старый 21.01.2015, 13:45   #2  
ice is offline
ice
Участник
Аватар для ice
Лучший по профессии 2014
 
1,740 / 404 (17) +++++++
Регистрация: 23.03.2006
у нас worksheet.mergeCells().add(con); такая конструкция работает. объединение работает в момент заполнения конкретной области листа
Старый 21.01.2015, 14:21   #3  
raniel is offline
raniel
Участник
Аватар для raniel
 
239 / 11 (1) +
Регистрация: 20.10.2006
Объединение работает.
X++:
worksheet.mergeCells().add([1,2,5,7]);
Теперь хочу туда вставить картинку....понимаю что картинка вставляет не в ячейку, а поверх документа....но меня это вполне устроило бы.
Старый 21.01.2015, 15:28   #5  
raniel is offline
raniel
Участник
Аватар для raniel
 
239 / 11 (1) +
Регистрация: 20.10.2006
Так это всё чкркз COM ...а я вывожу через XML
Старый 21.01.2015, 15:41   #6  
Ivanhoe is offline
Ivanhoe
Участник
Аватар для Ivanhoe
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
4,143 / 2156 (80) +++++++++
Регистрация: 29.09.2005
Адрес: Санкт-Петербург
Через xml, насколько я знаю, не получится. Делайте xml, а в конце во время открытия документа вставьте через com картинки.
__________________
Ivanhoe as is..
Старый 22.01.2015, 09:45   #7  
trud is offline
trud
Участник
Лучший по профессии 2017
 
1,039 / 1633 (57) ++++++++
Регистрация: 07.06.2003
Записей в блоге: 1
Цитата:
Сообщение от Ivanhoe Посмотреть сообщение
Через xml, насколько я знаю, не получится. Делайте xml, а в конце во время открытия документа вставьте через com картинки.
А вот интересно, зачем в таком случае вообще использовать xml(при условии конечно что мы знаем как вставлять данные через COM быстрым методом, например через RecordSet).
т.е. всякие преимущества в виде того что на сервере не открываются ексели теряются, а поддержка двух технологий немного усложняется
Старый 22.01.2015, 10:13   #8  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
В движке XML отчетов в Аксапте много чего не реализовано

Из неприятного - нет поддержки формул в шаблонах
Если не делать дополнительных телодвижений, то создается отчет, который не может загрузить Excel
Так же, не меняются сами формулы при размножении строк. Т.е. если для строки 7 создать формулу =A7+B7, то во всех копиях этой строки останется ссылка на строку 7. Приходится в формуле использовать что-то типа такого =ДВССЫЛ("$A$"&СТРОКА())+ДВССЫЛ("$B$"&СТРОКА()), либо писать доп. код для изменения
__________________
Axapta v.3.0 sp5 kr2
Старый 22.01.2015, 10:14   #9  
Ivanhoe is offline
Ivanhoe
Участник
Аватар для Ivanhoe
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
4,143 / 2156 (80) +++++++++
Регистрация: 29.09.2005
Адрес: Санкт-Петербург
Безусловно, надо принимать общее решение. Если все отчеты xml и в одном нужно вставить вдруг картинку - можно так как я написал. Если большая часть отчетов настолько сложные, то можно и другие технологии рассмотреть.

По моему опыту, xml самые простые и надежные. Через com, например, в нашем фреймворке делается закрытие файла Excel на редактирование перед отображением пользователю, туда же вполне можно и картинки добавить.
__________________
Ivanhoe as is..
Старый 26.01.2015, 11:20   #10  
raniel is offline
raniel
Участник
Аватар для raniel
 
239 / 11 (1) +
Регистрация: 20.10.2006
Цитата:
Сообщение от AndyD Посмотреть сообщение
В движке XML отчетов в Аксапте много чего не реализовано

Из неприятного - нет поддержки формул в шаблонах
Если не делать дополнительных телодвижений, то создается отчет, который не может загрузить Excel
Так же, не меняются сами формулы при размножении строк. Т.е. если для строки 7 создать формулу =A7+B7, то во всех копиях этой строки останется ссылка на строку 7. Приходится в формуле использовать что-то типа такого =ДВССЫЛ("$A$"&СТРОКА())+ДВССЫЛ("$B$"&СТРОКА()), либо писать доп. код для изменения
AndyD , кстати вот я дошёл до формул(картинку пришлось отложить). У меня формулы вставляются как текстовые значения. Но если встать после на ячеку и нажать на Enter, то формула начинает работать. Не подскажите как прописать формулу чтоб ячейка сразу правильно её воспринимал?
Спасибо
Старый 26.01.2015, 11:29   #11  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Вы через XMLExcelDocument_RU.insertValue() формулы вставляете?
__________________
Axapta v.3.0 sp5 kr2
Старый 26.01.2015, 12:49   #12  
raniel is offline
raniel
Участник
Аватар для raniel
 
239 / 11 (1) +
Регистрация: 20.10.2006
Цитата:
Сообщение от AndyD Посмотреть сообщение
Вы через XMLExcelDocument_RU.insertValue() формулы вставляете?
Да
Старый 26.01.2015, 14:00   #13  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Это неправильно.
Вместо формулы, у вас получается значение в ячейке

Надо добавить в класс OXMLCell_RU подобный метод
X++:
public void setFormula(str _formula)
{
    DocumentFormat.OpenXml.OpenXmlElementList       oxmlElementList;
    DocumentFormat.OpenXml.OpenXmlElement           oxmlElement;
    DocumentFormat.OpenXml.Spreadsheet.CellFormula  cellFormula;

    System.Collections.IEnumerator                  enumerator;
    ;

    oxmlElementList = cell.get_ChildElements();
    enumerator      = oxmlElementList.GetEnumerator();

    while (enumerator.MoveNext())
    {
        oxmlElement = enumerator.get_Current();

        if (oxmlElement is DocumentFormat.OpenXml.Spreadsheet.CellFormula)
        {
            cellFormula = oxmlElement as DocumentFormat.OpenXml.Spreadsheet.CellFormula;
            break;
        }
    }
    if (!cellFormula)
    {
        //BP deviation documented
        cellFormula = new DocumentFormat.OpenXml.Spreadsheet.CellFormula();
        cell.set_CellFormula(cellFormula);
    }

    cellFormula.set_Text(_formula);
}
В классах OxmlWorkBook_RU и XMLExcelDocument_RU реализовать интерфейсные методы для доступа к этой функции, наподобие insertValue().

И использовать для создания/изменения формулы эти методы
Сами формулы должно записываться в АНГЛИЙСКОМ варианте, независимо от языка используемого офиса. Т.е. SUM, вместо СУММ и т.п.

Так же, если формулы были сохранены в шаблоне, то что бы они пересчитались с учетом изменений в данных, необходимо вызвать подобный метод

X++:
protected void setWorkbookParms()
{
    DocumentFormat.OpenXml.Packaging.WorkbookPart   workbookPart;
    DocumentFormat.OpenXml.Spreadsheet.Workbook     workbook;
    DocumentFormat.OpenXml.Spreadsheet.CalculationProperties    calcProperties;
    DocumentFormat.OpenXml.BooleanValue             trueValue;
    ;

    workbookPart = document.workbook().workbookPart();
    workbook = workbookPart.get_Workbook();
    calcProperties = workbook.get_CalculationProperties();
    trueValue = new DocumentFormat.OpenXml.BooleanValue(true);
    calcProperties.set_FullCalculationOnLoad(trueValue);
    calcProperties.set_ForceFullCalculation(trueValue);
}
при формировании отчета (где-нибудь в конце createReport(), либо внести его в реализацию XMLExcelDocument_RU и использовать после вызова createReport())
__________________
Axapta v.3.0 sp5 kr2
За это сообщение автора поблагодарили: raniel (1), Морковка (1).
Старый 26.01.2015, 14:45   #14  
raniel is offline
raniel
Участник
Аватар для raniel
 
239 / 11 (1) +
Регистрация: 20.10.2006
Кстати я сам дошёл до реализации первого метода, но расположил его в классе OxmlWorkBook_RU по аналогии с setNamedRangeFontSize. И это не работало пока не переписал формулы по английский.
Ну а тот факт что я могу использовать формулы прям шаблоне, просто иначе их писать то это просто шикарно.
Спасибо!
Остался вопрос с картинкой. Кстати выводить её у меня получилось, но координаты надо задавать попиксельно вручную. Как можно вычислить координаты середины ячейки?

Последний раз редактировалось raniel; 26.01.2015 в 16:27. Причина: Дополнение
Теги
merge, xmlexceldocument_ru

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
XMLExcelDocument_RU вставка string ackid DAX: Программирование 2 22.09.2014 10:53
объединение ячеек при формировании Excel NickMDAX DAX: Программирование 11 05.03.2012 08:09
ALEG: Блог переехал на новую площадку tools4cio.ru Blog bot DAX Blogs 0 23.02.2009 18:05
Вопрос по классу SalesPurchReport_RU Кирилл DAX: Программирование 4 27.02.2004 13:28

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

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

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