Я обновляю некоторые ячейки электронной таблицы Excel через Microsoft Office OpenXML SDK 2.0. Изменение значений делает все ячейки, содержащие формулу, которые зависят от измененных ячеек, недействительны. Однако из-за кэшированных значений Excel не пересчитывает формуляр, даже если пользователь нажимает «Рассчитать сейчас».OpenXML SDK: сделать Excel пересчитанной формулой
Каков наилучший способ аннулировать все зависимые ячейки всей книги через SDK? До сих пор, я нашел следующий фрагмент кода в http://cdonner.com/introduction-to-microsofts-open-xml-format-sdk-20-with-a-focus-on-excel-documents.htm:
public static void ClearAllValuesInSheet
(SpreadsheetDocument spreadSheet, string sheetName)
{
WorksheetPart worksheetPart =
GetWorksheetPartByName(spreadSheet, sheetName);
foreach (Row row in
worksheetPart.Worksheet.
GetFirstChild().Elements())
{
foreach (Cell cell in row.Elements())
{
if (cell.CellFormula != null &&
cell.CellValue != null)
{
cell.CellValue.Remove();
}
}
}
worksheetPart.Worksheet.Save();
}
Помимо того, что этот фрагмент не компилируется для меня, он имеет два ограничения:
- Это только аннулирует один лист , хотя другие листы могут содержать зависимую формулу
- Это не учитывает любые зависимости.
Я ищу способ, который эффективен (в частности, только аннулирует ячейки, зависящие от значения определенной ячейки), и учитывает все листы.
Update:
В то же время я сумел сделать код компиляции & бежать, и удалить кэшированные значения на всех листах книги. (См. Ответы.) Тем не менее меня интересуют лучшие/альтернативные решения, в частности, как только удалять кешированные значения ячеек, которые на самом деле зависят от обновленной ячейки.
После удаления кешированных значений, как вы читаете значение ячейки ?. Нужно ли закрывать объект ?. В моем случае, я получаю значение и ничего не возвращает – mggSoft