|  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 | 
|  | 
| 
 |