2016-09-09 2 views
0

Я борюсь с Open XML SDK, и я уже прочитал много сообщений по этой теме, но не могу понять. Моя цель - создать локально созданный файл Excel, который содержит формулу и отредактировать вход в Интернет и получить расчетное значение в Интернете.Является ли Open XML SDK 2.5 способным пересчитывать формулы Excel?

Я не знаю, возможно ли это, поскольку Open XML может изменять только данные, и мне интересно, может ли он также выполнять вычисления Excels.

Например, мой локальный файл содержит три ячейки:

A1: 1 
A2: 2 
A3: =(A1+A2) 

Использование Open XML настраиваю А2 до значения 3, однако результат A3 остается 3 вместо 4.

У меня есть уже прочитал о необходимости пересчета Excel, но моя цель - иметь файл Excel как своего рода механизм вычисления, а не переносить все вычисления на C#.

Все советы и рекомендации приветствуются.

С наилучшими пожеланиями, Патрик

+0

Что обозначает ML в XML? – ABuckau

+0

Пожалуйста, разместите свой код. Расчет формулы выполняется клиентом *. После того, как вы установите формулу * correct * с Open XML SDK, всякий раз, когда пользователь изменяет входы, формула будет работать. Если это не так, это потому, что вы вообще не устанавливали формулу или не использовали неправильный код. –

+0

PS, зачем вам C# выполнять формулу? Что вы на самом деле пытались сделать? Вы создали объект Open XML CellFormula, задали свойство Cell.Formula или просто задали, чтобы текст ячейки выглядел как формула? –

ответ

0

Вы можете использовать что-то вроде этого.

Cell cell; //supposing this is your cell referencing A3 
CellFormula cellformula = new CellFormula(); 
cellformula.Text = "SUM(A1, A2)"; 
CellValue cellValue = new CellValue(); 
cellValue.Text = "0"; 
cell.Append(cellformula); 
cell.Append(cellValue); 

Аналогичный пример можно найти по этой ссылке: Formula cells in excel using openXML

+0

«Ячейка» уже имеет свойство [Свойство формулы] (https://msdn.microsoft.com/en-us/library/office/ff838835.aspx). 'cell.Text =" SUM (A1, A2) ";' достаточно. Я подозреваю, что ссылка на форум рассматривает объекты как элементы XML, а не фактически использует API SDK. –

0

Я чувствую, что может быть некоторая двусмысленность захвачена в этом вопросе. OpenXML - способ хранения документов, поэтому расчеты с OpenXML SDK невозможны. Он распространяет листовой двигатель (Excel), который выполняет вычисления.

Когда входы обновляются, таблица сохраняет, вычисленные значения должны обновляться.

+0

Я думаю, что ОП спрашивает, почему формула не работает, когда конечные пользователи меняют входные данные. Эти настройки влияют только на пересчет при загрузке. Возможно, что OP не установил свойство 'Formula' вообще –

+0

PS, библиотеки, такие как EPPlus, включают [свой собственный механизм расчета] (http://epplus.codeplex.com/wikipage?title=About+Formula+calculation) для пересчета результатов при создании файла. По необходимости поддерживается только подмножество функций. –

+0

Спасибо за комментарии @PanagiotisKanavos имеет смысл. Скорректированный ответ. –

0

Прежде всего, спасибо за ответы. Во-вторых, я думаю, ответ ответил на мой вопрос, и открытый XML-SDK способен только отредактировать файл и ничего не сделает для перераспределения существующих формул в файле. Это произойдет только при открытии в Excel. Я посмотрю на EPPlus.

Смежные вопросы