02.09.2013, 12:24 | #1 |
Программатор
|
Ax2012 и выгрузка в Эксель. Цвет ячейки, вставка формулы
Коллеги, доброго времени суток!!!
Продолжаю неравный бой с выгрузкой в Эксель через XML. собственно вопросы: 1. Eсть ли метод для раскраски ячейки? Мне что то не по глазам. 2. При выгрузке любой формулы (к примеру, =ЕСЛИ(X8<>"";"x";"")) эксель выгружает именно как строку. Если уже в Экселе встать в ячейку и нажать Энтер или Таб, то формула применяется корректно. Подскажите пожалуйста как быть. Заранее спасибо!!! |
|
02.09.2013, 14:04 | #3 |
Участник
|
Если все делать не через XML, а через семейство классов SysExcel*, можно раскрасить ячейки через класс SysExcelInterior
X++: xlStyle = xlWorkBook.styles().add("Header"); xlStyle.interior().color(0x999999); xlStyle.font().bold(true); xlWorkSheet.range("A1:F1").style("Header");
__________________
// no comments |
|
02.09.2013, 14:41 | #4 |
Программатор
|
Цитата:
Сообщение от dech
Если все делать не через XML, а через семейство классов SysExcel*, можно раскрасить ячейки через класс SysExcelInterior
X++: xlStyle = xlWorkBook.styles().add("Header"); xlStyle.interior().color(0x999999); xlStyle.font().bold(true); xlWorkSheet.range("A1:F1").style("Header"); |
|
02.09.2013, 15:08 | #5 |
Программатор
|
К Аксапте то это как прикрутить?
вот так вставляется значение document.insertValue(ComExcelDocument_RU::numToNameCell(1, 3), '=ЕСЛИ(X8<>"";"x";"")'); Последний раз редактировалось Sada; 02.09.2013 в 15:10. |
|
02.09.2013, 15:10 | #6 |
Участник
|
|
|
02.09.2013, 15:22 | #7 |
Программатор
|
это слишком круто для меня
|
|
02.09.2013, 17:54 | #8 |
Участник
|
в стандарте метода для вставки формулы нет. но его легко сделать аналогично insertValue(скачайте OXML Dev toolkit, он покажет какие теги отвечают за формулу)
особенность заключается в том, что вам помимо вставки формулы необходимо будет и вставлять расчет значения для этой формулы, вычислять автоматически ничего не получится. если этого не сделать Excel при открытии файла будет показывать #error в ячейке |
|
03.09.2013, 18:38 | #9 |
Программатор
|
неужели никто не выгружал формулы в XML?
|
|
04.09.2013, 07:11 | #10 |
Участник
|
Создайте раздел для стилей и затем используйте его:
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 |
Участник
|
Попробовал, формулы написанные в тексте 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>
__________________
aLL woRk aNd nO JoY MAKes jAck a dULL Boy |
|
04.09.2013, 12:43 | #12 |
Программатор
|
Друзья, мне кажется вы меня не поняли или я не совсем понятно сфомулировал вопрос. У меня есть класс, наследник от XMLExcelReport. В нем в fillBody() я заполняю значения ячеек в столбцах, стобцы динамические, и формулы получается тоже. Зашивать в шаблоне из нельзя. поэтому при вставке формулы в ячейку как значения
document.insertValue(ComExcelDocument_RU::numToNameCell(1, 3), '=ЕСЛИ(X8<>"";"x";"")'); у меня происходит сабж Последний раз редактировалось Sada; 04.09.2013 в 12:46. |
|
04.09.2013, 13:19 | #13 |
Участник
|
Попробуйте в вашем выражении использовать IF вместо ЕСЛИ и запятую вместо точки с запятой, возможно все дело в этом.
X++: =IF(X8<>"","x","")
__________________
// no comments Последний раз редактировалось dech; 04.09.2013 в 13:23. |
|
04.09.2013, 13:19 | #14 |
северный Будда
|
Я не совсем понял насчёт динамических столбцов, но если вы имели в виду, что динамический набор полей вывода, то гораздо проще зашить в шаблон все поля, а потом просто скрывать/удалять ненужные колонки
__________________
С уважением, Вячеслав |
|
04.09.2013, 14:03 | #15 |
Программатор
|
проблема не в том на каком языке формула. а в том, что при открытии экселя он не понимает выгруженные в него формулы, и начинает понимать после позиционирования курсора в ячейку с формулой и нажатя Enter или Tab. С формулой по идее все ОК.
|
|
04.09.2013, 15:46 | #16 |
Moderator
|
А доступ к COM-объектам Excel есть в задачке? Если да, то после выгрузки можно попробовать оживить формулы такой нехитрой операцией:
Range("A1:A10").Formula = Range("A1:A10").Value |
|
04.09.2013, 16:03 | #17 |
Участник
|
__________________
// no comments |
|
04.09.2013, 16:10 | #18 |
Программатор
|
|
|
04.09.2013, 16:32 | #19 |
Программатор
|
после формирования в XML, Аксапта бахает всё это дело в Эксель, и там в принципе можно добраться и до COM. А как это в Аксапте будет выглядеть?
|
|
04.09.2013, 17:27 | #20 |
Moderator
|
|
|
|
За это сообщение автора поблагодарили: Sada (7), Artikov (1). |
Теги |
ax2012, excel |
|
|