एक्सेल चार्ट शीट को सी # - सी #, एक्सेल, चार्ट, कॉम का उपयोग करके क्लिपबोर्ड पर कॉपी करें

मैं एक सी # ऐप लिख रहा हूँ।

कार्यों में से एक एक्सेल स्प्रेडशीट खोलना हैऔर उस से एक चार्ट शीट को सी # ऐप में पेस्ट करें। कृपया ध्यान दें कि मैं एक चार्ट शीट का जिक्र कर रहा हूं ... एक सामान्य वर्कशीट पर एम्बेडेड चार्ट ऑब्जेक्ट नहीं।

एक कारण है कि मैं यहां सटीक होने की कोशिश कर रहा हूं।

मैं सी # से एक्सेल में संवाद करने के लिए सामान्य COM का उपयोग करता हूं ...

using using Microsoft.Office.Interop.Excel;

ऐसी परिस्थिति में जहां एक चार्ट एक एम्बेडेड होता हैसामान्य वर्कशीट, एपीआई काम करता है। मैं वर्कशीट से वर्कशीट को पुनर्प्राप्त करता हूं, वर्कशीट से मुझे चार्ट ऑब्जेक्ट मिलता है और चार्टऑब्जेक्ट पर एक प्रति जारी करने की अपेक्षा की जाती है यानी क्लिपबोर्ड की सामग्री जैसे कि आपने एक्सेल से प्रतिलिपि बनाई है।

Things are different when dealing with a chart चादर। मुझे कार्यपुस्तिका से चार्ट मिलते हैं, फिर चार्ट उदाहरण प्राप्त करें जिसमें मुझे रूचि है। सभी अच्छे। हालांकि, यहां चार्ट पर एक प्रतिलिपि जारी करने के परिणामस्वरूप क्लिपबोर्ड को ऐसा कुछ दिखने का परिणाम नहीं होगा, जिसे एक्सेल से कार्रवाई शुरू की जानी चाहिए। CopyPicture भी मदद नहीं कर रहा है क्योंकि तस्वीर वास्तव में अनुपात से बाहर उड़ा दी गई है और क्लिपबोर्ड में सामान्य पीएनजी, जीआईएफएफ, जेपीईजी प्रारूप गायब हैं - क्लिपबोर्ड.getImage () शून्य करता है जबकि मुझे लगता है कि छवि क्लिपबोर्ड में है। कॉपी () केवल कई पूर्वावलोकन के बजाय क्लिपबोर्ड पर पूर्वावलोकन, डेटाऑब्जेक्ट और ओएलई निजी डेटा स्वरूप बनाता है ...

//this does not work - it is for chart sheets
Excel.Charts charts = wb.Charts;
Excel.Chart chart = charts["mychartname"];
chart.Copy(); or chart.CopyPicture();    <-- these do not work as expected...


// this works fine but only covers embedded charts
Excel.ChartObjects charts = ws.ChartObjects;
Excel.ChartObject chart = charts["mychartname"];
chart.Copy();

ChartObject पर एक प्रतिलिपि चार्ट पर प्रतिलिपि से अलग क्यों काम करेगी? कॉपी () इतना छोटा ऑपरेशन है ... और यह देखने के लिए कि चार्ट पर काम नहीं कर रहा है यह एक बड़ा आश्चर्य है ...

क्या आसपास कोई काम है? मैं मूल रूप से क्लिपबोर्ड को उसी तरह दिखाना चाहता हूं चाहे कॉपी कार्रवाई को मेरे सी # ऐप से या एक्सेल में उपयोगकर्ता क्रियाओं के माध्यम से प्रोग्रामेटिक रूप से शुरू किया गया हो।

और यदि चार्ट शीट विदेशी लगता है ...यह मूल रूप से केवल एक चार्ट के साथ एक चादर है। आप पहले मूलभूत एम्बेडेड चार्ट बनाकर और इसे समर्पित डिज़ाइन में (डिज़ाइन टैब) ले जाकर एक बना सकते हैं।

धन्यवाद।

उत्तर:

जवाब के लिए 0 № 1

कुछ परीक्षण और त्रुटि के बाद मुझे एक आसान और बहुत स्वीकार्य समाधान मिला।

चार्ट इंस्टेंस पर कॉपी () को कॉल करने के बजाय, चार्ट से चार्ट एरिया प्राप्त करें और उस पर कॉपी करें।

Excel.Charts charts = wb.Charts;
Excel.Chart chart = charts["mychartname"];
Excel.ChartArea chartArea = chart.ChartArea;
chartArea.Copy();

COM को सभी इंटरमीडिएट COM ऑब्जेक्ट्स को रिलीज़ करना याद रखें :)


संबंधित सवाल
सबसे लोकप्रिय