2010-09-27 10 views
8

मुझे वर्कशीट को एक कार्यपुस्तिका से दूसरे में कॉपी करने की आवश्यकता है और मैं थोड़ा फंस गया हूं। आधार यह है कि मेरे पास एक "मास्टर" कार्यपुस्तिका है जो कई रिपोर्टों के लिए टेम्पलेट स्टोर करती है और फिर मुझे एक विशिष्ट वर्कशीट की एक खाली प्रतिलिपि बनाने और इसे एक नई कार्यपुस्तिका में जोड़ने की आवश्यकता होती है।सी # - एक कार्यपुस्तिका से दूसरे कार्यक्षेत्र में एक एक्सेल वर्कशीट की प्रतिलिपि कैसे करें?

यह वही है मैं अब तक है:

private void CreateNewWorkbook(Tables table) 
{ 
    Excel.Application app = null; 
    Excel.Workbook book = null; 
    Excel.Worksheet sheet = null; 

    try 
    { 
     string startPath = System.IO.Path.GetDirectoryName(System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName); 
     string filePath = System.IO.Path.Combine(startPath, "sal1011forms.xls"); 
     Microsoft.Win32.SaveFileDialog sfd = new Microsoft.Win32.SaveFileDialog(); 

     app = new Excel.Application(); 
     book = app.Workbooks.Open(filePath); 
     sheet = (Excel.Worksheet)book.Worksheets.get_Item((int)table + 1); 

     sfd.AddExtension = true; 
     sfd.FileName = table.ToString() + ".xls"; 
     sfd.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments); 

     if (sfd.ShowDialog() == true) 
     { 
      sheet.SaveAs(sfd.FileName); 
     } 
    } 
    finally 
    { 
     if (book != null) 
     { 
      book.Close(); 
     } 
     if (app != null) 
     { 
      app.Quit(); 
     } 
     this.ReleaseObject(sheet); 
     this.ReleaseObject(book); 
     this.ReleaseObject(app); 
    } 
} 

समस्या सिर्फ मैं इस समय हो रही है कि जब मैं कार्यपत्रक पर .save() कहते हैं, यह से कार्यपत्रकों के सभी बचाता है एक नई कार्यपुस्तिका में मूल कार्यपुस्तिका। इसे सही करने के तरीके पर कोई विचार?

अग्रिम धन्यवाद,
सन्नी

उत्तर

13

तुम भी Sheet.Copy() विधि इस्तेमाल कर सकते हैं।

असल में, शीट.copy शीट की प्रतिलिपि बनाता है, और स्वचालित रूप से एक ही समय में एक नई कार्यपुस्तिका बना देगा।

, अपने कोड में निम्न पंक्तियां जोड़ने Worksheets.get_Item करने के लिए अपने कॉल के बाद का प्रयास करें:

//Copies sheet and puts the copy into a new workbook 
sheet.Copy(Type.Missing, Type.Missing); 

//sets the sheet variable to the copied sheet in the new workbook 
sheet = app.Workbooks[2].Sheets[1]; 

यहाँ की प्रतिलिपि() फ़ंक्शन के लिए संदर्भ के रूप में अच्छी तरह से है: MSDN Link

3

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

एक टेम्पलेट चादर आप कई बार भरना चाहते हैं होने:

public void test() 
    { 

     Excel.Application excelApp; 

     string fileTarget = "C:\target.xlsx"; 
     string fileTemplate = "C:\template.xlsx"; 
     excelApp = new Excel.Application(); 
     Excel.Workbook wbTemp, wbTarget; 
     Excel.Worksheet sh; 

     //Create target workbook 
     wbTarget = excelApp.Workbooks.Open(fileTemplate); 

     //Fill target workbook 
     //Open the template sheet 
     sh = wbTarget.Worksheets["TEMPLATE"]; 
     //Fill in some data 
     sh.Cells[1, 1] = "HELLO WORLD!"; 
     //Rename sheet 
     sh.Name = "1. SHEET"; 


     //Save file 
     wbTarget.SaveAs(fileTarget); 

     //Iterate through the rest of the files 
     for (int i = 1; i < 3; i++) 
     { 
      //Open template file in temporary workbook 
      wbTemp = excelApp.Workbooks.Open(fileTemplate); 

      //Fill temporary workbook 
      //Open the template sheet 
      sh = wbTemp.Worksheets["TEMPLATE"]; 
      //Fill in some data 
      sh.Cells[1, 1] = "HELLO WORLD! FOR THE " + i + ".TH TIME"; 
      //Rename sheet 
      sh.Name = i + ". SHEET"; 

      //Copy sheet to target workbook 
      sh.Copy(wbTarget.Worksheets[1]); 
      //Close temporary workbook without saving 
      wbTemp.Close(false); 
     } 

     //Close and save target workbook 
     wbTarget.Close(true); 
     //Kill excelapp 
     excelApp.Quit(); 
    } 
1

मैं इस सवाल का जवाब देने के लिए, यहां तक ​​कि यह है कि यह एक साल से भी अधिक है, क्योंकि यह पूछा गया था चाहते हैं। मुझे एक ऐसी परियोजना के साथ खुद की समस्या थी जो मैं विकसित कर रहा हूं, और मुझे जवाब खोजने में थोड़ी देर लग गई। मैं सी # के बजाय वीबी.नेट कोड का उपयोग कर पोस्ट करूंगा क्योंकि मैं आखिरी से परिचित नहीं हूं।

एक्सेल कार्यपुस्तिकाओं के बीच चादरों की प्रतिलिपि बनाने के लिए यह सौदा है, केवल एक एक्सेल एप्लिकेशन ऑब्जेक्ट का उपयोग करना आवश्यक है और फिर उस एकल एप्लिकेशन के साथ दोनों कार्यपुस्तिकाएं खोलें, फिर हम ज्ञात वर्कशीट का उपयोग कर सकते हैं। कॉपी विधि और बस निर्दिष्ट करें कि उस अन्य कार्यपुस्तिका में शीट के पहले या उससे पहले शीट की प्रतिलिपि बनाई गई है।

Private Sub ThisWorkbook_Startup() Handles Me.Startup 
    Me.Application.Workbooks.Open(filePath) 
    Me.Application.Workbooks(2).Worksheets("Reporte"). _ 
      Copy(After:=Me.Application.Workbooks(1).Worksheets("Hoja1")) 
    Me.Application.Workbooks(2).Close() 
    Me.Application.DisplayAlerts = False 
    Globals.Hoja1.Delete() 
    Me.Application.DisplayAlerts = True 
End Sub 

इस मामले एक्सेल आवेदन मैं उपयोग कर रहा हूँ में एक है कि मेरी Excel वर्कबुक परियोजना चलाता है, लेकिन यह भी काम करेगा:

Dim xlApp As New Excel.Application 
Dim book1 As Excel.Workbook 
Dim book2 As Excel.Workbook 
book1 = xlApp.Workbooks.Open(filePath1) 
book2 = xlApp.Workbooks.Open(filePath2) 

book1.Worksheets("Sheet to be copied").Copy(After:=book2.Worksheets(1)) 

बेशक, एक्सेल आवेदन दोनों कार्यपुस्तिका दिखाएगा , इसलिए जब आप कॉपी करना समाप्त कर लेंगे तो आपको स्रोत वर्कबुक बंद करना चाहिए यदि आपका इरादा इसे प्रदर्शित नहीं करना है (या कम से कम उपयोगकर्ता को कुछ भी करने के लिए पर्याप्त नहीं है)।

xlApp.Workbooks(1).Close() 

इस तरह से मैं यह कर सकता है, तो उपयोगकर्ता एक निमिष नई वर्कबुक ऊपर poping और फिर बंद हो रहा है, जो वास्तव में साफ नहीं है देखेंगे है, लेकिन अब तक मैं पता नहीं कैसे यह किसी और क्या करना है (या इस प्रतिलिपि प्रक्रिया को एक दृश्यमान तरीके से करें)

मुझे आशा है कि यह अभी भी कुछ मूल्य है। सादर।

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