OpenXML SDK 2.0 का उपयोग करना:
- अपने मैक्रो कोड बनाएँ और .xlsm प्रारूप में बचाने के लिए, snorehorse.xlsm का कहना है।
- ओपनएक्सएमएल उत्पादकता टूलकिट में खोलें snorehorse.xlsm और पेड़ की जड़ पर एक प्रतिबिंब कोड करें।
- मैक्रो के बाइनरी कोड को खोजें। यह एक स्ट्रिंग प्रारूप में है और यादृच्छिक वर्णों की तरह दिखता है।
- अपने आईडीई में, ओपनएक्सएमएल एसडीके का संदर्भ जोड़ें, और एक्सेल फ़ाइल को प्रोग्रामेटिक रूप से बनाएं या खोलें जिसे आप मैक्रो कोड इंजेक्ट करना चाहते हैं।
- चरण # 3 में आपके कोड में मिली मैक्रो स्ट्रिंग की प्रतिलिपि बनाएँ।
- गंतव्य के लिए एक नया vba हिस्सा जोड़ें।
- स्ट्रिंग डेटा को नए vba भाग में फ़ीड करें।
- सहेजें और चलाएं और आपको ट्रस्ट सेंटर को छोड़कर प्रसन्नता हो।
उदाहरण कोड:
using DocumentFormat.OpenXml;
using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Spreadsheet;
private string partData = "...";
public void vbaInjector{
[code to create/open spreadsheet using OpenXML omitted]
VbaProjectPart vbaProjectPart1 = snoreSpreadsheetDoc.WorkbookPart.AddNewPart<VbaProjectPart>("rId8");
System.IO.Stream data = GetBinaryDataStream(partData);
vbaProjectPart1.FeedData(data);
data.Close();
[code to close spreadsheet and cleanup omitted]
}
private System.IO.Stream GetBinaryDataStream(string base64String)
{
return new System.IO.MemoryStream(System.Convert.FromBase64String(base64String));
}
मैं परियोजना के स्थानीय निर्माण में OpenXML SDK dll जोड़ने के लिए तो अंत उपयोगकर्ताओं एसडीके खुद को स्थापित करने के लिए नहीं होगा चुना है।
मुझे लगता है कि यह ओपनएक्सएमएल एसडीके का उपयोग किए बिना एक्सएमएल के साथ काम कर रहे निचले स्तर पर किया जा सकता है, लेकिन मैंने यह सीखने का प्रयास नहीं किया है कि यह कैसे करें। अगर कोई कोड पोस्ट कर सकता है, तो मैं उस पर उत्तर स्वीकार करूंगा।
इसके अलावा, यदि किसी को एम्बेडेड संसाधन फ़ाइल में, वीबीए स्क्रिप्ट को परिवर्तित करने के लिए प्रोग्रामेटिक तरीका था, तो प्रारूप एक्सेल की अपेक्षाओं की बाइनरी स्ट्रिंग में, कोई भी बाइनरी डेटा की एक नई स्ट्रिंग में प्रतिलिपि बनाने और पेस्ट करने के लिए बाईपास कर सकता है आप मैक्रो कोड बदलना चाहते थे। यह मेरे लिए एक बेहतर जवाब होगा।
धन्यवाद।
क्या यह अभी भी काम करता है? मैं निश्चित रूप से अभी इस कोशिश करूँगा। –
1 घंटे के बाद भी मैं अपने प्रोजेक्ट में किसी भी कोड को दूषित किए बिना इंजेक्ट नहीं कर सकता। केवल तभी काम करता है जब मैं OpenXML टूलकिट द्वारा प्रतिबिंबित सभी कोड निष्पादित करता हूं। –
अंधेरे में गोली मार दी ... शायद "आरआईडी 8" पहले ही इस्तेमाल हो चुकी है? इसे "rId888" जैसे कुछ में बदलने के बारे में कैसे? – Snorex