|  21.01.2015, 12:43 | #1 | 
| Участник |  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 | 
| Участник | 
			
			у нас worksheet.mergeCells().add(con); такая конструкция работает. объединение работает в момент заполнения конкретной области листа
		 | 
|  | 
|  21.01.2015, 14:21 | #3 | 
| Участник | 
			
			Объединение работает. X++: worksheet.mergeCells().add([1,2,5,7]); | 
|  | 
|  21.01.2015, 15:28 | #5 | 
| Участник | 
			
			Так это всё чкркз COM ...а я вывожу через XML
		 | 
|  | 
|  21.01.2015, 15:41 | #6 | 
| Участник | 
			
			Через xml, насколько я знаю, не получится. Делайте xml, а в конце во время открытия документа вставьте через com картинки.
		 
				__________________ Ivanhoe as is.. | 
|  | 
|  22.01.2015, 09:45 | #7 | 
| Участник | Цитата: т.е. всякие преимущества в виде того что на сервере не открываются ексели теряются, а поддержка двух технологий немного усложняется | 
|  | 
|  22.01.2015, 10:13 | #8 | 
| Участник | 
			
			В движке XML отчетов в Аксапте много чего не реализовано Из неприятного - нет поддержки формул в шаблонах Если не делать дополнительных телодвижений, то создается отчет, который не может загрузить Excel Так же, не меняются сами формулы при размножении строк. Т.е. если для строки 7 создать формулу =A7+B7, то во всех копиях этой строки останется ссылка на строку 7. Приходится в формуле использовать что-то типа такого =ДВССЫЛ("$A$"&СТРОКА())+ДВССЫЛ("$B$"&СТРОКА()), либо писать доп. код для изменения 
				__________________ Axapta v.3.0 sp5 kr2 | 
|  | 
|  22.01.2015, 10:14 | #9 | 
| Участник | 
			
			Безусловно, надо принимать общее решение. Если все отчеты xml и в одном нужно вставить вдруг картинку - можно так как я написал. Если большая часть отчетов настолько сложные, то можно и другие технологии рассмотреть. По моему опыту, xml самые простые и надежные. Через com, например, в нашем фреймворке делается закрытие файла Excel на редактирование перед отображением пользователю, туда же вполне можно и картинки добавить. 
				__________________ Ivanhoe as is.. | 
|  | 
|  26.01.2015, 11:20 | #10 | 
| Участник | Цитата: 
		
			Сообщение от AndyD
			   В движке XML отчетов в Аксапте много чего не реализовано Из неприятного - нет поддержки формул в шаблонах Если не делать дополнительных телодвижений, то создается отчет, который не может загрузить Excel Так же, не меняются сами формулы при размножении строк. Т.е. если для строки 7 создать формулу =A7+B7, то во всех копиях этой строки останется ссылка на строку 7. Приходится в формуле использовать что-то типа такого =ДВССЫЛ("$A$"&СТРОКА())+ДВССЫЛ("$B$"&СТРОКА()), либо писать доп. код для изменения Спасибо | 
|  | 
|  26.01.2015, 11:29 | #11 | 
| Участник | 
			
			Вы через XMLExcelDocument_RU.insertValue() формулы вставляете?
		 
				__________________ Axapta v.3.0 sp5 kr2 | 
|  | 
|  26.01.2015, 12:49 | #12 | 
| Участник | |
|  | 
|  26.01.2015, 14:00 | #13 | 
| Участник | 
			
			Это неправильно. Вместо формулы, у вас получается значение в ячейке Надо добавить в класс 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); } И использовать для создания/изменения формулы эти методы Сами формулы должно записываться в АНГЛИЙСКОМ варианте, независимо от языка используемого офиса. Т.е. 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); } 
				__________________ Axapta v.3.0 sp5 kr2 | 
|  | |
| За это сообщение автора поблагодарили: raniel (1), Морковка (1). | |
|  26.01.2015, 14:45 | #14 | 
| Участник | 
			
			Кстати я сам дошёл до реализации первого метода, но расположил его в классе OxmlWorkBook_RU по аналогии с setNamedRangeFontSize. И это не работало пока не переписал формулы по английский. Ну а тот факт что я могу использовать формулы прям шаблоне, просто иначе их писать то это просто шикарно. Спасибо! Остался вопрос с картинкой. Кстати выводить её у меня получилось, но координаты надо задавать попиксельно вручную. Как можно вычислить координаты середины ячейки? Последний раз редактировалось raniel; 26.01.2015 в 16:27. Причина: Дополнение | 
|  |