Я обновляю некоторые ячейки электронной таблицы Excel через Microsoft Office OpenXML SDK 2.0. Изменение значений делает все ячейки, содержащие формулу, которые зависят от измененных ячеек, недействительными. Однако из-за кэшированных значений 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();
}
Помимо того, что этот фрагмент не компилируется для меня, у него есть два ограничения:
- Это делает недействительным только один лист, хотя другие листы могут содержать зависимую формулу
- Не учитывает никаких зависимостей.
Я ищу способ, который эффективен (в частности, делает недействительными только ячейки, которые зависят от значения определенной ячейки) и учитывает все листы.
Обновление:
Тем временем мне удалось заставить код компилироваться и запускаться, а также удалять кэшированные значения на всех листах рабочей книги. (См. Ответы.) Тем не менее меня интересуют лучшие / альтернативные решения, в частности, как удалять только кэшированные значения ячеек, которые на самом деле зависят от обновленной ячейки.