Microsoft Office OpenXML SDK 2.0 を使用して、Excel スプレッドシートのいくつかのセルを更新します。値を変更すると、変更されたセルに依存する数式を含むすべてのセルが無効になります。ただし、値がキャッシュされているため、ユーザーが [今すぐ計算] をクリックしても、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();
}
このスニペットはコンパイルできないという事実に加えて、次の 2 つの制限があります。
- 他のシートには依存式が含まれている可能性がありますが、1 つのシートのみを無効にします。
- 依存関係は考慮されません。
効率的で (特に、特定のセルの値に依存するセルのみを無効にする)、すべてのシートを考慮に入れる方法を探しています。
アップデート:
その間、コードをコンパイルして実行し、ワークブックのすべてのシートでキャッシュされた値を削除することができました。(回答を参照してください。)それでも、更新されたセルに実際に依存するセルのキャッシュされた値のみを削除する方法など、より良い/代替ソリューションに興味があります。