OpenXML - обновить лист Excel после обновления ячейки

У меня есть класс, который читает и записывает ячейки Excel (xlsx) с помощью OpenXML SDK. Класс основан на ответе, получившем наибольшее количество голосов отсюда: Open XML SDK 2.0 - как обновить ячейку в электронной таблице?

Мне нужно обновить ячейку, а затем получить значение другой ячейки, которая содержит формулу расчета. Обновление работает нормально, но когда я читаю ячейку формулы после обновления, я получаю старое значение, которое существовало в документе до редактирования. Однако, когда я открываю свой xlsx вручную после запуска программы, я вижу правильное значение.

Кажется, что старое значение для ячейки где-то кешируется ... Что странно, потому что я открываю / закрываю свой документ каждый раз, прежде чем читать / писать ячейки.

РЕДАКТИРОВАТЬ: ответ Винсента заставил меня обновить образец кода. Я добавил метод Refresh, который открывает, сохраняет и закрывает документ в приложении Excel, запущенном в фоновом режиме. Это пересчитывает мои формулы. Дополнительные сведения и пример кода C # см .: http://fczaja.blogspot.com/2013/05/how-to-read-and-write-excel-cells-with.html


person filip    schedule 29.05.2013    source источник


Ответы (1)


Open XML SDK не обновляет результаты вычислений формул. Это делает только Excel (или другое программное обеспечение для работы с электронными таблицами). Таким образом, даже если вы установите для ForceFullCalculation и FullCalculationOnLoad значение true, вы укажете Excel только принудительно выполнить полный расчет и сделать это при загрузке файла электронной таблицы.

Вот почему вы всегда получаете «старое» значение. Потому что нет никакой «новой» ценности, о которой можно было бы говорить.

Чтобы проверить это, вы можете установить для CellValue (класса Cell) значение «3.14159» с неповрежденной CellFormula. Excel вычислит и отобразит правильное значение вашей формулы, даже если вы специально задали значение ячейки как «3,14159». [Если, конечно, ваша формула оценивается как PI ...]

Чтобы решить эту проблему, у вас есть вычислительный механизм, который будет читать формулу и рассчитывать результат за вас. Или сохраните электронную таблицу и запустите Excel (в режиме взаимодействия), чтобы вычислить все формулы, но это в первую очередь лишает смысла использование Open XML SDK.

person Vincent Tan    schedule 31.05.2013
comment
Привет, Винсент, этот подход установки значения ячейки как 3,14 не работает для меня. Я разместил аналогичный вопрос здесь. пожалуйста, посмотрите и оставьте отзыв, если возможно. Я очень ценю это. stackoverflow.com/questions/21273023/ - person dotnet-practitioner; 22.01.2014