![]() |
#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). |