c# कैसे एक्सेल बाइनरी फ़ाइल में फॉर्मूला लिखने के लिए?




excel xls (3)

आईआईआरसी, एक एक्सेल "बाइनरी" फ़ाइल वास्तव में एक्सएमएल कोड के साथ एक ज़िप फाइल है (कम से कम यह नए एक्सेल स्वरूपों के लिए सच है)। मैंने पहले उन फ़ाइलों को पढ़ने के लिए माइक्रोसॉफ्ट के पुस्तकालय का इस्तेमाल किया है

मुझे मूल एक्सेल कार्यक्षमता, कोशिका लिखने, सेल को लिखना, परिवर्तन रंग, फ़ॉन्ट और सामग्री के साथ एक ओपन सोर्स प्रोजेक्ट मिला है। एक बात लापता है, और इसके फॉर्मूला को जोड़ते हैं, और मैं इसे लागू करने में असमर्थ था, इसलिए यदि किसी को पता है कि यह कैसे करना है तो यह बहुत अच्छा होगा।

बीआईएफएफ प्रारूप:

internal sealed class BIFF
    {
        public const ushort DefaultColor = 0x7fff;

        public const ushort BOFRecord = 0x0209;
        public const ushort EOFRecord = 0x0A;

        public const ushort FontRecord = 0x0231;
        public const ushort FormatRecord = 0x001E;
        public const ushort LabelRecord = 0x0204;
        public const ushort WindowProtectRecord = 0x0019;
        public const ushort XFRecord = 0x0243;
        public const ushort HeaderRecord = 0x0014;
        public const ushort FooterRecord = 0x0015;
        public const ushort ExtendedRecord = 0x0243;
        public const ushort StyleRecord = 0x0293;
        public const ushort CodepageRecord = 0x0042;
        public const ushort NumberRecord = 0x0203;
        public const ushort ColumnInfoRecord = 0x007D;       

    }

इंट और स्ट्रिंग लिखने के लिए उदाहरण विधि

private void WriteStringCell(BinaryWriter writer, CellInfo cell)
        {
            string value;
            if (cell.Value is string)
                value = (string)cell.Value;
            else
                value = cell.Value.ToString();
            if (value.Length > 255)
                value = value.Substring(0, 255);
            ushort[] clData = { BIFF.LabelRecord, 0, 0, 0, 0, 0 };
            byte[] plainText = Encoding.GetEncoding(CodePage).GetBytes(value);
            int iLen = plainText.Length;
            clData[1] = (ushort)(8 + iLen);
            clData[2] = (ushort)cell.Row;
            clData[3] = (ushort)cell.Column;
            clData[4] = (ushort)cell.FXIndex;
            clData[5] = (ushort)iLen;
            WriteUshortArray(writer, clData);
            writer.Write(plainText);
        }
private void WriteNumberCell(BinaryWriter writer, CellInfo cell)
        {
            double dValue = Convert.ToDouble(cell.Value);
            ushort[] clData = { BIFF.NumberRecord, 14, (ushort)cell.Row, (ushort)cell.Column, (ushort)cell.FXIndex };
            WriteUshortArray(writer, clData);
            writer.Write(dValue);
        }

आप प्रदान लिंक से स्रोत कोड डाउनलोड कर सकते हैं। तो मैं जो चाहता हूं एक विधि लिखने के लिए फॉर्मूलालासेल है जो सूत्र में एक्सेल लिखेंगे। बिल्कुल भी सफलता नहीं।

अग्रिम में धन्यवाद।


बीआईएफएफ में सूत्रों को टोकन के बाइनरी स्ट्रीम के रूप में दर्शाया गया है। यदि आप ऐसा करने की कोशिश कर रहे हैं तो एक WriteFormulaCell () बना है जो "= SUM (A3: Q47)" की तरह एक स्ट्रिंग ले सकता है और इसे एक वैध FORMULA रिकॉर्ड में बदल देता है, जो कि काम के कुछ महीनों या कुछ साल काम पर निर्भर करता है इसके अलावा, वे टोकन के लिए उपयोग किए गए बाइटकोड्स कुछ बार बदल गए - बीआईएफएफ के प्रत्येक संस्करण में कुछ बदलाव या अन्य जिस तरह से वे इस सामान को एन्कोड कर चुके हैं।

यदि आप जो करने की कोशिश कर रहे हैं, एक विशिष्ट, सरल सूत्र को सम्मिलित करें, किसी विशेष स्थान पर, एक्सेल को फ़ायर करें, एक खाली स्प्रेडशीट पर फार्मूला को सही स्थान पर टाइप करें, Excel 97 के रूप में सहेजें, और BIFF फ़ाइल को देखें। आपको सही-पार्स किए गए टोकन स्ट्रीम के साथ फ़ॉर्मूला रिकॉर्ड मिलेगा, जिसकी आप प्रतिलिपि बना सकते हैं और अपनी स्वयं की फ़ाइल में सम्मिलित कर सकते हैं। मुझे लगता है कि आप पूरे रिश्तेदार संदर्भ / पूर्ण संदर्भ चीज़ से अवगत हैं। अन्य शीट्स के संदर्भ इंडेक्स द्वारा होंगे, नाम से नहीं। परिभाषित नाम इस चाल के साथ बिल्कुल भी काम नहीं करेंगे I अन्य सीमाएं लागू हो सकती हैं, आपका लाभ भिन्न हो सकता है, कोई गारंटी नहीं है, आदि।


एनपीओआई का उपयोग करने की कोशिश करें, इसमें सूत्र जोड़ने की क्षमता है, यह ओपन सोर्स और फ्री है, या एक और ओपन सोर्स एक्सएलएस परियोजना भी है: एक्सेलबरी दोनों परियोजनाएं पूर्ण बीआईएफएफ कार्यान्वयन का दावा कर रही हैं





excel-formula