2013-08-27 5 views
6

का उपयोग कर Excel फ़ाइल को सहेजने में असमर्थ मैं Excel में डेटा को संशोधित और सहेजने का प्रयास कर रहा हूं। नीचे दिए गए कोड के साथ, मैं शीट तक पहुंच रहा हूं, संशोधन कर रहा हूं, फिर फ़ाइल को सहेज रहा हूं। मैं फ़ाइल को सहेजने में असमर्थ हूं।सी #

Application excel = new Application(); 
     excel.Visible=true; 
     Workbook wb = (Workbook)excel.Workbooks.Open(@"C:\Users\dnyanesh.wagh\Desktop\BookExcel1.xlsx"); 
     Worksheet ws = (Worksheet)wb.Worksheets[1]; 
     ws.Cells[1, 1] = "sagar"; 
     ws.Cells[2, 1] = "sagar"; 
     ws.Cells[3, 1] = "sagar"; 
     wb.Save(); 
     wb.close(); 

मैं यह त्रुटि प्राप्त कर रहा हूँ: यहाँ मेरी कोड है। " 'BookExcel1.xlsx' पहले से ही नाम की फ़ाइल इस स्थान पर मौजूद है क्या आप इसे बदलना चाहते हैं?"

तो मैं करने के लिए कोड बदल दिया है:

Workbook wb = (Workbook)excel.Workbooks.Open(@"C:\Users\dnyanesh.wagh\Desktop\BookExcel1.xlsx",0, false, 5, "", "", 
      false, XlPlatform.xlWindows, "", true, false, 
      0, true, false, false);); 

तो त्रुटि है: "BookExcel1.xlsx user_name.open द्वारा संशोधित किया जा रहा है के रूप में केवल पढ़ने"। अगर मैं बटन 'रद्द करें' पर क्लिक करें, मैं "HRESULT से अपवाद: 0x800A03EC" के साथ ऊपर अपवाद प्राप्त

मैं भी कोशिश की है:

wb.SaveAs(@"C:\Users\dnyanesh.wagh\Desktop\BookExcel1.xlsx"); 
wb.Close(true,null,null); 

कि मैं ऊपर फ़ाइल के साथ एक ही त्रुटि मिलती है, से संशोधन दिखा रहा है।

क्या कोई मुझे बता सकता है कि मैं फ़ाइल को संशोधनों के साथ कैसे सहेज सकता हूं?

+0

डॉन ' टी वास्तव में नहीं जानता, लेकिन सिर्फ एक त्वरित विचार ... क्या आप वाकई 'SaveAs' के साथ एक ही फ़ाइल पथ का उपयोग करना ठीक है? आमतौर पर यह एक नया दस्तावेज़ बनाता है। क्या आप 'सेव()' फ़ंक्शन का उपयोग कर सकते हैं? – musefan

+0

इसे दृश्य नहीं बनाओ। –

+1

मैं आपको COM ऑब्जेक्ट्स को जारी नहीं करता हूं .. हमेशा आपके द्वारा बनाए/उपयोग किए जाने वाले प्रत्येक एकल ऑब्जेक्ट को जारी रखना याद रखें। अगर आपको कोई त्रुटि मिलती है और कार्यपुस्तिका बंद नहीं होती है, तो यह खोला जा सकता है, इसलिए नए उदाहरणों के लिए केवल पढ़ने के लिए ... अधिक: एक्सेल बंद नहीं है ('excel.Quit()' का उपयोग करके) ताकि आपके पास बहुत सारी एक्सेल प्रक्रियाएं हो सकें स्मृति में ... – Marco

उत्तर

1

यह इसलिए होता है क्योंकि फ़ाइल को खोलने के लिए मैं कोशिश कर रहा था पहले से ही एक्सेल आवेदन में खुला था। मेरे कोड में, मैं कुछ स्थितियों के लिए एक्सेल एप्लिकेशन बंद नहीं कर रहा था। यही कारण है कि यह इसे केवल पढ़ने की अनुमति के साथ खोल रहा था। इसलिए मैं अद्यतन करने के बाद उस फ़ाइल को सहेजने में सक्षम नहीं था। इसे पढ़ने-लिखने के साथ खोलने के लिए, आपको पहले उस फ़ाइल को बंद करना होगा। इसके बाद, आप इसे खोल सकते हैं और फ़ाइल पर आसानी से पढ़ और लिख सकते हैं।

आप को बंद करने और सभी एक्सेल अनुप्रयोगों जो पहले से ही खुले हैं देखने के लिए निम्न कोड का उपयोग करके कर सकते हैं: शीर्ष पर

Application excel = (Application)Marshal.GetActiveObject("Excel.Application"); 
Workbooks wbs = excel.Workbooks; 
foreach (Workbook wb in wbs) 
{ 
    Console.WriteLine(wb.Name); // print the name of excel files that are open 
    wb.Save(); 
    wb.Close(); 
} 
excel.Quit(); 

, निम्नलिखित कोड जोड़ सकते हैं और बनाने के संदर्भ के लिए Microsoft.Office.Interop.Excel

using Microsoft.Office.Interop.Excel; 
using System.Runtime.InteropServices; 
0

यह problem एक .xlsx के बजाय पीछे की संगत शीट (ए .xls) के लिए है।

To allow sheets to be opened in pre office 2007 version it can't contain more than 65k rows. You can check the number of rows in your sheet by using ctrl+arrowdown till you hit the bottom. If you try to get a range larger than that number of rows it will create an error

2

जांचें कि आपके पास पहले से Excel.exe प्रक्रिया चलाना नहीं है। इसके अलावा, आपको कार्यपुस्तिका खोलनी चाहिए ताकि यह संपादन योग्य हो।

इस कोड काम करता है:

string txtLocation = Path.GetFullPath(InputFile); 

object _missingValue = System.Reflection.Missing.Value; 
Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application(); 
Excel.Workbook theWorkbook = excel.Workbooks.Open(txtLocation, 
                 _missingValue, 
                 false, 
                 _missingValue, 
                 _missingValue, 
                 _missingValue, 
                 true, 
                 _missingValue, 
                 _missingValue, 
                 true, 
                 _missingValue, 
                 _missingValue, 
                 _missingValue); 

//refresh and calculate to modify 
theWorkbook.RefreshAll(); 
excel.Calculate(); 
theWorkbook.Save(); 
theWorkbook.Close(true); 
excel.Quit();