पुन: गणना करें, मैं माइक्रोसॉफ्ट ऑफिस ओपनएक्सएमएल एसडीके 2.0 के माध्यम से एक्सेल स्प्रेडशीट की कुछ कोशिकाओं को अपडेट करता हूं। मानों को बदलने से फॉर्मूला युक्त सभी कक्ष बन जाते हैं जो बदली गई कोशिकाओं पर अमान्य पर निर्भर करते हैं। हालांकि, कैश किए गए मानों के कारण एक्सेल फॉर्मुलर का पुनर्मूल्यांकन नहीं करता है, भले ही उपयोगकर्ता "अभी गणना करें" पर क्लिक करता है।ओपनएक्सएमएल एसडीके: एक्सेल को फॉर्मूला
एसडीके के माध्यम से पूरे कार्यपुस्तिका की सभी निर्भर कोशिकाओं को अमान्य करने का सबसे अच्छा तरीका क्या है? अब तक, मैं 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(); }
तथ्य के अलावा कि यह टुकड़ा मेरे लिए संकलन नहीं है, यह दो सीमाएँ हैं , हालांकि अन्य चादरों में निर्भर फॉर्मूला
- हो सकता है, यह किसी भी निर्भरता को ध्यान में रखता नहीं है।
मैं एक ऐसे तरीके की तलाश में हूं जो कुशल है (विशेष रूप से, केवल कोशिकाओं को अमान्य करता है जो किसी निश्चित सेल के मूल्य पर निर्भर करता है), और सभी शीट्स को ध्यान में रखता है।
अद्यतन:
इस बीच मैं कोड & रन संकलन, और कार्यपुस्तिका के सभी पत्रक पर कैश मूल्यों को दूर करने के बनाने में कामयाब रहे हैं। (उत्तर देखें।) फिर भी मुझे बेहतर/वैकल्पिक समाधानों में दिलचस्पी है, विशेष रूप से उन कोशिकाओं के कैश किए गए मानों को कैसे हटाएं जो वास्तव में अद्यतन सेल पर निर्भर करते हैं।
foreach (WorksheetPart worksheetPart in spreadSheet.WorkbookPart.WorksheetParts)
{
foreach (Row row in
worksheetPart.Worksheet.GetFirstChild<SheetData>().Elements())
{
foreach (Cell cell in row.Elements())
{
if (cell.CellFormula != null && cell.CellValue != null)
cell.CellValue.Remove();
}
}
}
कैश किए गए मानों को हटाने के बाद, आप सेल के मूल्य को कैसे पढ़ते हैं? क्या ऑब्जेक्ट को बंद करना जरूरी है? मेरे मामले में, मुझे मूल्य मिलता है और – mggSoft