2014-11-18 3 views
5

मैं बस अपनी कार्यपुस्तिका के भीतर एक शीट कॉपी करना चाहता हूं और इसे एक अलग नाम देना चाहता हूं।एक अलग नाम के साथ शीट की प्रतिलिपि कैसे करें - सी # और एक्सेल इंटरऑप

var pointName1 = workbook.Worksheets["PointName1"] as Worksheet; 
pointName1.Copy(); // How do I access this newly created sheet? 

आदर्श रूप में मैं इस

pointName1.CopyTo("New Sheet");

की तरह एक विधि लिखने में सक्षम हो की तरह है, जहां 'नई शीट' 'PointName1' का एक नया नाम दिया प्रति है जाएगा।

कभी-कभी प्वाइंटनाम 1 कार्यपुस्तिका में एकमात्र चादर होगी, अन्य बार अन्य लोग होंगे।

+0

संभावित डुप्लिकेट [सी # - एक कार्यपुस्तिका से दूसरे कार्यक्षेत्र में एक एक्सेल वर्कशीट की प्रतिलिपि कैसे करें?] (Http://stackoverflow.com/questions/3808368/c-sharp-how-to-copy-a-single- एक्सेल-वर्कशीट-से-एक-वर्कबुक-टू-सेकंड) – MethodMan

+0

@DJKRAZE मुझे एक ही कार्यपुस्तिका में कॉपी करने की आवश्यकता है।आपके द्वारा प्रदान किया गया लिंक (एसओ पर अधिकतर लोगों के साथ) एक नई कार्यपुस्तिका में कॉपी करने से संबंधित है। –

उत्तर

7

आप में इस लक्ष्य को हासिल कर सकते हैं - कई तरीके शायद सबसे आसान तरीका अंतिम शीट के बाद कॉपी और उसके बाद सूचकांक का उपयोग कर इसे नाम बदलने के लिए है:

Excel.Application xlApp = Marshal.GetActiveObject("Excel.Application") as Excel.Application; 
Excel.Workbook xlWb = xlApp.ActiveWorkbook as Excel.Workbook; 
Excel.Worksheet xlSht = xlWb.Sheets[1]; 
xlSht.Copy(Type.Missing, xlWb.Sheets[xlWb.Sheets.Count]); // copy 
xlWb.Sheets[xlWb.Sheets.Count].Name = "NEW SHEET";  // rename 

मेरा मानना ​​है कि इस MSDN guide भी अपने questi जवाब देता है पर।

यदि आप शीट की अनुक्रमणिका प्राप्त करना चाहते हैं, तो Worksheet.Index property देखें।

3

आपको कॉपी फ़ंक्शन का उपयोग करने में सक्षम होना चाहिए, लेकिन आप उसी चरण में शीट का नाम बदलने में सक्षम नहीं होंगे।

pointName1.Copy(pointName1, Type.Missing); //Place a copy before the existing sheet 

प्रलेखन से:: आप या तो पहले या बाद में निर्दिष्ट नहीं करते हैं, माइक्रोसॉफ्ट ऑफिस एक्सेल एक नई कार्यपुस्तिका की नकल की जाती पत्रक हैं बनाता है MSDN प्रलेखन अतिरिक्त पैरामीटर को दर्शाता है।

शीट का नाम बदलने के लिए आपको नई शीट (इंडेक्स या नाम से) का संदर्भ प्राप्त करना होगा और नाम बदलने के लिए worksheet की संपत्ति का उपयोग करना होगा।

संपादित करें:

ऊपर आप (जब से तुम मूल से पहले प्रतिलिपि डाल रहे हैं) मूल शीट के सूचकांक का उपयोग कर सकते हैं कोड का उपयोग करते हैं:

int index = pointName1.Index; 
pointName1.Copy(pointName1, Type.Missing); 
Worksheet newWS = (Worksheet)xlApp.Worksheets[index]; 
+0

मैं एक ही चादर में कॉपी करना चाहता हूं, न कि एक नई कार्यपुस्तिका बनाएं। मैं उसी कार्यपुस्तिका में नव निर्मित शीट का संदर्भ कैसे प्राप्त कर सकता हूं? –

+0

@ जोबाउर यह कोड इसे उसी नोटबुक में कॉपी करता है। प्रलेखन की रेखा आपको यह दिखाने के लिए है कि क्यों। इंडेक्स के रूप में, यदि आप इंडेक्स के ऊपर दिए गए कोड का उपयोग मूल शीट के समान होंगे क्योंकि उस कोड से पहले सम्मिलित किया गया था। – MikeH

+0

@JoeBauer संपादित करें – MikeH

0

स्वीकार्य उत्तर में प्रस्तुत अंतिम पत्र के बाद इसे कॉपी करना सबसे आसान तरीका है।

कृपया ध्यान दें कि अगर एक्सेल फ़ाइल में छिपी चादरें हैं, तो प्रतिलिपि दिखाई देने वाली चादरों और छिपे हुए लोगों के बीच होगी, इसलिए छिपी चादरें दाईं ओर धकेल दी जाएंगी।

यदि आप xlWb.Sheets[xlWb.Sheets.Count].Name = "NEW SHEET" के साथ नाम सेट करने का प्रयास करते हैं तो आप अपनी नई प्रतिलिपि के बजाय अपनी आखिरी छिपी हुई शीट का नाम बदल देंगे।

मैंने नई प्रतिलिपि को इसके नाम से एक्सेस करके इसे प्राप्त करने में कामयाब रहा है: xlWb.Sheets["_oldName_ (2)"].Name = "NEW SHEET"

अन्य फिक्स जो आपको xlWb.Sheets[xlWb.Sheets.Count].Name = "NEW SHEET" का उपयोग करने में सक्षम बनाता है वांछित शीट की प्रतिलिपि बनाने से पहले सभी चादरें सेट करना है।

संबंधित मुद्दे