2013-05-29 16 views
3

У меня есть класс, который читает & пишет ячейки Excel (xlsx) с использованием OpenXML SDK. Класс основан на наиболее проголосованном ответе отсюда: Open XML SDK 2.0 - how to update a cell in a spreadsheet?OpenXML - обновить лист Excel после обновления ячейки

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

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

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

+0

http://stackoverflow.com/questions/2668643/openxml-sdk-make-excel-recalculate-formula – Chris

+0

Да, я это видел. Если вы посмотрите на мои методы UpdateCell и ReadCell, вы увидите, что я уже пробовал применить решение из самого высокого ответа - не повезло – filip

+0

Вы также должны прочитать другие ответы. Я пытаюсь найти, где я прочитал, что единственный способ убедиться, что Excel пересчитает формулу, - удалить кешированное значение ячейки формулы – Chris

ответ

7

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

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

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

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

+0

Привет, Винсент, этот метод установки значения ячейки как «3.14» для меня не работает. Я задал аналогичный вопрос. пожалуйста, взгляните и сообщите, если возможно, обратную связь. Я очень ценю это. http://stackoverflow.com/questions/21273023/open-xml-sdk-pass-input-parameters-into-excel-and-get-answer-out-based-on-formul –

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