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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 02.09.2013, 12:24   #1  
Sada is offline
Sada
Программатор
Аватар для Sada
 
1,450 / 153 (8) ++++++
Регистрация: 29.03.2005
Адрес: Толи Барнаул, толи Москва
Ax2012 и выгрузка в Эксель. Цвет ячейки, вставка формулы
Коллеги, доброго времени суток!!!

Продолжаю неравный бой с выгрузкой в Эксель через XML.

собственно вопросы:
1. Eсть ли метод для раскраски ячейки? Мне что то не по глазам.
2. При выгрузке любой формулы (к примеру, =ЕСЛИ(X8<>"";"x";"")) эксель выгружает именно как строку. Если уже в Экселе встать в ячейку и нажать Энтер или Таб, то формула применяется корректно.

Подскажите пожалуйста как быть. Заранее спасибо!!!
Старый 02.09.2013, 14:04   #3  
dech is offline
dech
Участник
Аватар для dech
Самостоятельные клиенты AX
 
647 / 350 (13) ++++++
Регистрация: 25.06.2009
Адрес: Омск
Записей в блоге: 3
Если все делать не через XML, а через семейство классов SysExcel*, можно раскрасить ячейки через класс SysExcelInterior
X++:
    xlStyle = xlWorkBook.styles().add("Header");
    xlStyle.interior().color(0x999999);
    xlStyle.font().bold(true);
    xlWorkSheet.range("A1:F1").style("Header");
Проблема №2 отпадает сама.
__________________
// no comments
Старый 02.09.2013, 14:41   #4  
Sada is offline
Sada
Программатор
Аватар для Sada
 
1,450 / 153 (8) ++++++
Регистрация: 29.03.2005
Адрес: Толи Барнаул, толи Москва
Цитата:
Сообщение от dech Посмотреть сообщение
Если все делать не через XML, а через семейство классов SysExcel*, можно раскрасить ячейки через класс SysExcelInterior
X++:
    xlStyle = xlWorkBook.styles().add("Header");
    xlStyle.interior().color(0x999999);
    xlStyle.font().bold(true);
    xlWorkSheet.range("A1:F1").style("Header");
Проблема №2 отпадает сама.
увы через XML
Старый 02.09.2013, 15:08   #5  
Sada is offline
Sada
Программатор
Аватар для Sada
 
1,450 / 153 (8) ++++++
Регистрация: 29.03.2005
Адрес: Толи Барнаул, толи Москва
Цитата:
К Аксапте то это как прикрутить?

вот так вставляется значение

document.insertValue(ComExcelDocument_RU::numToNameCell(1, 3), '=ЕСЛИ(X8<>"";"x";"")');

Последний раз редактировалось Sada; 02.09.2013 в 15:10.
Старый 02.09.2013, 15:10   #6  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Цитата:
Сообщение от Sada Посмотреть сообщение
К Аксапте то это как прикрутить?
Подкурочить OXML
Старый 02.09.2013, 15:22   #7  
Sada is offline
Sada
Программатор
Аватар для Sada
 
1,450 / 153 (8) ++++++
Регистрация: 29.03.2005
Адрес: Толи Барнаул, толи Москва
это слишком круто для меня
Старый 02.09.2013, 17:54   #8  
trud is offline
trud
Участник
Лучший по профессии 2017
 
1,039 / 1633 (57) ++++++++
Регистрация: 07.06.2003
Записей в блоге: 1
в стандарте метода для вставки формулы нет. но его легко сделать аналогично insertValue(скачайте OXML Dev toolkit, он покажет какие теги отвечают за формулу)
особенность заключается в том, что вам помимо вставки формулы необходимо будет и вставлять расчет значения для этой формулы, вычислять автоматически ничего не получится. если этого не сделать Excel при открытии файла будет показывать #error в ячейке
Старый 03.09.2013, 18:38   #9  
Sada is offline
Sada
Программатор
Аватар для Sada
 
1,450 / 153 (8) ++++++
Регистрация: 29.03.2005
Адрес: Толи Барнаул, толи Москва
неужели никто не выгружал формулы в XML?
Старый 04.09.2013, 07:11   #10  
dech is offline
dech
Участник
Аватар для dech
Самостоятельные клиенты AX
 
647 / 350 (13) ++++++
Регистрация: 25.06.2009
Адрес: Омск
Записей в блоге: 3
Создайте раздел для стилей и затем используйте его:
X++:
    <Styles>
      <Style ss:ID="s43">
        <Alignment ss:Horizontal="Center" ss:Vertical="Center" ss:WrapText="1"/>
        <Borders>
          <Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="1"
           ss:Color="#000000"/>
          <Border ss:Position="Left" ss:LineStyle="Continuous" ss:Weight="1"
           ss:Color="#000000"/>
          <Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="1"
           ss:Color="#000000"/>
          <Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="1"
           ss:Color="#000000"/>
        </Borders>
        <Font ss:Bold="1"/>
        <Interior ss:Color="#FFFF99" ss:Pattern="Solid"/>
      </Style>
    </Styles>

  <xsl:template match="*" mode ="Header">
    <Cell ss:StyleID="s43">
      <Data ss:Type="String">
        <xsl:value-of select="."/>
      </Data>
    </Cell>
  </xsl:template>
__________________
// no comments
Старый 04.09.2013, 12:31   #11  
ivas is offline
ivas
Участник
Аватар для ivas
 
252 / 68 (3) ++++
Регистрация: 22.12.2005
Попробовал, формулы написанные в тексте excel xml прекрасно работают
X++:
<Row>
    <Cell><Data ss:Type="Number">1</Data></Cell>
    <Cell><Data ss:Type="Number">2</Data></Cell>
    <Cell ss:Formula="=RC[-2]*RC[-1]"><Data ss:Type="Number">3</Data></Cell>
</Row>
выводит 2 при открытии
__________________
aLL woRk aNd nO JoY MAKes jAck a dULL Boy
Старый 04.09.2013, 12:43   #12  
Sada is offline
Sada
Программатор
Аватар для Sada
 
1,450 / 153 (8) ++++++
Регистрация: 29.03.2005
Адрес: Толи Барнаул, толи Москва
Друзья, мне кажется вы меня не поняли или я не совсем понятно сфомулировал вопрос. У меня есть класс, наследник от XMLExcelReport. В нем в fillBody() я заполняю значения ячеек в столбцах, стобцы динамические, и формулы получается тоже. Зашивать в шаблоне из нельзя. поэтому при вставке формулы в ячейку как значения

document.insertValue(ComExcelDocument_RU::numToNameCell(1, 3), '=ЕСЛИ(X8<>"";"x";"")');

у меня происходит сабж

Последний раз редактировалось Sada; 04.09.2013 в 12:46.
Старый 04.09.2013, 13:19   #13  
dech is offline
dech
Участник
Аватар для dech
Самостоятельные клиенты AX
 
647 / 350 (13) ++++++
Регистрация: 25.06.2009
Адрес: Омск
Записей в блоге: 3
Попробуйте в вашем выражении использовать IF вместо ЕСЛИ и запятую вместо точки с запятой, возможно все дело в этом.
X++:
=IF(X8<>"","x","")
__________________
// no comments

Последний раз редактировалось dech; 04.09.2013 в 13:23.
Старый 04.09.2013, 13:19   #14  
pitersky is offline
pitersky
северный Будда
Аватар для pitersky
Ex AND Project
Соотечественники
 
1,510 / 435 (18) +++++++
Регистрация: 26.09.2007
Адрес: Солнечная система
Я не совсем понял насчёт динамических столбцов, но если вы имели в виду, что динамический набор полей вывода, то гораздо проще зашить в шаблон все поля, а потом просто скрывать/удалять ненужные колонки
__________________
С уважением,
Вячеслав
Старый 04.09.2013, 14:03   #15  
Sada is offline
Sada
Программатор
Аватар для Sada
 
1,450 / 153 (8) ++++++
Регистрация: 29.03.2005
Адрес: Толи Барнаул, толи Москва
Цитата:
Сообщение от dech Посмотреть сообщение
Попробуйте в вашем выражении использовать IF вместо ЕСЛИ и запятую вместо точки с запятой, возможно все дело в этом.
X++:
=IF(X8<>"","x","")
проблема не в том на каком языке формула. а в том, что при открытии экселя он не понимает выгруженные в него формулы, и начинает понимать после позиционирования курсора в ячейку с формулой и нажатя Enter или Tab. С формулой по идее все ОК.
Старый 04.09.2013, 15:46   #16  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
А доступ к COM-объектам Excel есть в задачке? Если да, то после выгрузки можно попробовать оживить формулы такой нехитрой операцией:

Range("A1:A10").Formula = Range("A1:A10").Value
Старый 04.09.2013, 16:03   #17  
dech is offline
dech
Участник
Аватар для dech
Самостоятельные клиенты AX
 
647 / 350 (13) ++++++
Регистрация: 25.06.2009
Адрес: Омск
Записей в блоге: 3
Цитата:
Сообщение от Sada Посмотреть сообщение
С формулой по идее все ОК.
Если у вас не Office 2010, то я настаиваю.
__________________
// no comments
Старый 04.09.2013, 16:10   #18  
Sada is offline
Sada
Программатор
Аватар для Sada
 
1,450 / 153 (8) ++++++
Регистрация: 29.03.2005
Адрес: Толи Барнаул, толи Москва
Цитата:
Сообщение от dech Посмотреть сообщение
Если у вас не Office 2010, то я настаиваю.
2013, c ',' формула не работает вообще
Старый 04.09.2013, 16:32   #19  
Sada is offline
Sada
Программатор
Аватар для Sada
 
1,450 / 153 (8) ++++++
Регистрация: 29.03.2005
Адрес: Толи Барнаул, толи Москва
Цитата:
Сообщение от Gustav Посмотреть сообщение
А доступ к COM-объектам Excel есть в задачке? Если да, то после выгрузки можно попробовать оживить формулы такой нехитрой операцией:

Range("A1:A10").Formula = Range("A1:A10").Value
после формирования в XML, Аксапта бахает всё это дело в Эксель, и там в принципе можно добраться и до COM. А как это в Аксапте будет выглядеть?
Старый 04.09.2013, 17:27   #20  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
Цитата:
Сообщение от Sada Посмотреть сообщение
А как это в Аксапте будет выглядеть?
Мне кажется, как-то так должно быть:
X++:
COM xlApp;
COM wks;
COM rng;

xlApp =  -    COM('Excel.Application')
wks = xlApp.ActiveSheet();
rng = wks.UsedRange();
rng.Formula(rng.Value2());
За это сообщение автора поблагодарили: Sada (7), Artikov (1).
Теги
ax2012, excel

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
AX2012 Конфигуратор и формулы Starling DAX: Функционал 6 05.06.2013 14:23
emeadaxsupport: Inventory closing differences between AX4.0 and AX2012 using weighted average costing method Blog bot DAX Blogs 0 27.12.2012 19:11
emeadaxsupport: AX2012 and AX2009 or AX4 side by side - AOS performance counters overwritten Blog bot DAX Blogs 0 13.03.2012 18:11
Формулы в эксель greench DAX: Программирование 7 01.07.2008 13:46
Выгрузка формулы в Ecsel AlexT DAX: Программирование 0 24.05.2004 10:09

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

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

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