दिलचस्प पोस्ट
में मैं isset () और रिक्त (रिक्त) का उपयोग कैसे करूँगा? स्वत: वेतन वृद्धि के साथ mysql दो स्तंभ प्राथमिक कुंजी जावा में किसी ऑब्जेक्ट की स्मृति खपत क्या है? फ़ंक्शन के हस्ताक्षर में कीवर्ड फेंकें स्ट्रिंग के बाहर एक स्ट्रिंग और पायथन में एक पूर्णांक बनाना Excel कस्टम फ़ंक्शन टूलटिप के लिए खोज मूल कक्षा से बाल वर्ग में कास्ट करने में असमर्थ इन-कॉल स्टेटस बार के लिए आकार बदलें? PHP के साथ फाइल की शुरुआत में लिखना चाहिए पंक्ति का उपयोग कर एक मैट्रिक्स से इंडेक्स वैल्यू, कर्नल इंडेंटिस यूट्यूब iframe एपीआई: मैं पहले से ही एचटीएमएल में है, जो एक iframe खिलाड़ी को कैसे नियंत्रित करूँ? एक विधि पर जेआईटी इनलाइनिंग को रोकना क्या यह एक गैर-आभासी विधि को ओवरराइड करना संभव है? एक सामान्य प्रकार का उपयोग करते समय `प्रेषक` के परस्पर विरोधी कार्यान्वयन कैसे होता है? वेब क्रॉलर की पहचान कैसे करें?

ऐरे को एक्सेल रेंज में लिखें

मैं वर्तमान में ऑब्जेक्ट की एक सरणी से डेटा लिखने का प्रयास कर रहा हूं, जिसमें निम्न कोड का इस्तेमाल होता है, जहां objData स्ट्रिंग्स की एक सरणी है:

 private object m = System.Type.Missing; object[] objData = getDataIWantToWrite(); Range rn_Temp; rn_Temp = (Range)XlApp.get_Range(RangeName, m); rn_Temp = rn_Temp.get_Resize(objData.GetUpperBound(), 1); rn_Temp.value2 = objData; 

यह बहुत ही लगभग काम करता है, यह समस्या यह है कि श्रेणी भर जाती है लेकिन हर कोशिका को objData में पहली वस्तु का मूल्य objData

उलटा काम करता है, यानी

 private object m = System.Type.Missing; object[] objData = new object[x,y] Range rn_Temp; rn_Temp = (Range)XlApp.get_Range(RangeName, m); rn_Temp = rn_Temp.get_Resize(objData.GetUpperBound(), 1); objData = (object[])rn_Temp.value2; 

कार्यपत्रक से सभी मूल्यों वाले एक सरणी वापस करेगा, इसलिए मुझे यकीन नहीं है कि क्यों पढ़ना और असाइनमेंट अलग तरह से काम करता है

क्या किसी ने कभी यह सफलतापूर्वक किया है? मैं वर्तमान में कक्ष से सरणी कक्ष लिख रहा हूं, लेकिन उसे बहुत से (> 50,000) पंक्तियों से निपटने की जरूरत है और इसलिए यह बहुत समय लगता है

Solutions Collecting From Web of "ऐरे को एक्सेल रेंज में लिखें"

यह मेरा एक तरीका है, जो एक डेटाटाले (डीटी वैरिएबल) को एक सरणी में कनवर्ट करता है और फिर एक कार्यपत्रक (wsh var) पर रेंज में सरणी को लिखता है। आप शीर्ष पंक्ति चर को उस पंक्ति में भी बदल सकते हैं जो आप तारों की सरणी को रखना चाहते हैं।

  object[,] arr = new object[dt.Rows.Count, dt.Columns.Count]; for (int r = 0; r < dt.Rows.Count; r++) { DataRow dr = dt.Rows[r]; for (int c = 0; c < dt.Columns.Count; c++) { arr[r, c] = dr[c]; } } Excel.Range c1 = (Excel.Range)wsh.Cells[topRow, 1]; Excel.Range c2 = (Excel.Range)wsh.Cells[topRow + dt.Rows.Count - 1, dt.Columns.Count]; Excel.Range range = wsh.get_Range(c1, c2); range.Value = arr; 

बेशक आपको एक इंटरमीडिएट डेटाटेबल का उपयोग करने की ज़रूरत नहीं है जैसा मैंने किया था, कोड अवतरण केवल यह प्रदर्शित करने के लिए है कि एक कॉल को कैसे कार्यपत्रक पर लिखा जा सकता है।

पॉइंटर्स लोगों के लिए धन्यवाद- मान बनाम मूल्य 2 तर्क मुझे खोज परिणामों का एक अलग सेट मिला जो मुझे इसका एहसास हुआ कि इसका उत्तर क्या है। संयोग से, वैल्यू प्रॉपर्टी एक पैरामीटिज्ड प्रॉपर्टी है, जिसे सी # में एक एक्सेसर के माध्यम से एक्सेस किया जाना चाहिए। ये get_Value और set_Value कहा जाता है, और एक वैकल्पिक एन्यूम मान लेते हैं। अगर किसी की दिलचस्पी है, तो यह अच्छी तरह से बताता है

हालांकि, Value2 प्रॉपर्टी के माध्यम से असाइनमेंट करना संभव है, जो बेहतर है क्योंकि इंटरॉप डॉक्युमेंटेशन ने get_Value और set_Value विधियों के इस्तेमाल के खिलाफ सिफारिश की है, क्योंकि मेरी समझ से परे कारणों के लिए।

कुंजी वस्तुओं की सरणी के आयाम लगता है कॉल करने के लिए सरणी को दो-आयामी घोषित किया जाना चाहिए, भले ही आप केवल एक आयामी डेटा निर्दिष्ट कर रहे हों।

मैंने एक object[NumberofRows,1] रूप में मेरी डेटा सरणी की घोषणा की और असाइनमेंट कॉल ने काम किया।

आप अपने डेटा को एक रिकॉर्डसेट में डाल सकते हैं और Excel की CopyFromRecordset विधि का उपयोग कर सकते हैं – यह सेल-बाय-सेल को लोकप्रिय बनाने से बहुत तेज है

आप इस कोड का उपयोग कर डेटासेट से एक रिकॉर्डसेट बना सकते हैं। आपको यह देखने के लिए कुछ परीक्षण करना होगा कि इस पद्धति का उपयोग कर आप वर्तमान में जो कर रहे हैं उसके मुकाबले तेजी से है।

किसी कारण के लिए, 2 आयामी सरणी में कनवर्ट करना मेरे लिए काम नहीं करता था लेकिन निम्नलिखित दृष्टिकोण किया:

 public void SetRow(Range range, string[] data) { range.get_Resize(1, data.Length).Value2 = data; } 

सरणी परिभाषा की तरह की कुंजी लगता है: मेरे मामले में यह 17 आइटमों का एक आयाम सरणी है, जिसे दो आयाम सरणी में कनवर्ट करना होता है

स्तंभों के लिए परिभाषा: वस्तु [,] सरणी = नई वस्तु [17, 1];

पंक्तियों के लिए परिभाषा वस्तु [,] अर्रे = नया ऑब्जेक्ट [1,17];

मान 2 के लिए कोड समान स्थितियों में दोनों स्थितियों में होता है। सेल बदलें = सक्रियवकर्सेट.गेट_रेंज (रेंज); cell.Value2 = सरणी;

एलजी जॉर्ज

मेरे मामले में, प्रोग्राम डाटाबेस को क्वेरी करता है जो एक डाटाग्रीड दृश्य देता है। मैं फिर एक सरणी के लिए उस की प्रतिलिपि बनाएँ। मुझे बस बनाई गई सरणी का आकार मिलता है और फिर सरणी को Excel स्प्रेडशीट में लिखना। यह कोड लगभग दो सेकंड में 5000 से अधिक लाइन डेटा दिखाता है।

 //private System.Windows.Forms.DataGridView dgvResults; dgvResults.DataSource = DB.getReport(); Microsoft.Office.Interop.Excel.Application oXL; Microsoft.Office.Interop.Excel._Workbook oWB; Microsoft.Office.Interop.Excel._Worksheet oSheet; try { //Start Excel and get Application object. oXL = new Microsoft.Office.Interop.Excel.Application(); oXL.Visible = true; oWB = (Microsoft.Office.Interop.Excel._Workbook)(oXL.Workbooks.Add("")); oSheet = (Microsoft.Office.Interop.Excel._Worksheet)oWB.ActiveSheet; var dgArray = new object[dgvResults.RowCount, dgvResults.ColumnCount+1]; foreach (DataGridViewRow i in dgvResults.Rows) { if (i.IsNewRow) continue; foreach (DataGridViewCell j in i.Cells) { dgArray[j.RowIndex, j.ColumnIndex] = j.Value.ToString(); } } Microsoft.Office.Interop.Excel.Range chartRange; int rowCount = dgArray.GetLength(0); int columnCount = dgArray.GetLength(1); chartRange = (Microsoft.Office.Interop.Excel.Range)oSheet.Cells[2, 1]; //I have header info on row 1, so start row 2 chartRange = chartRange.get_Resize(rowCount, columnCount); chartRange.set_Value(Microsoft.Office.Interop.Excel.XlRangeValueDataType.xlRangeValueDefault, dgArray); oXL.Visible = false; oXL.UserControl = false; string outputFile = "Output_" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".xlsx"; oWB.SaveAs("c:\\temp\\"+outputFile, Microsoft.Office.Interop.Excel.XlFileFormat.xlWorkbookDefault, Type.Missing, Type.Missing, false, false, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing); oWB.Close(); } catch (Exception ex) { //... } 

जब आप एक एक्सेल शीट में 1 डी अर्रे लिखना चाहते हैं तो आपको इसे स्थानांतरित करना होगा और आपको 1 कॉलम ([एन, 1]) के साथ 2 डी सरणी बनाने की ज़रूरत नहीं है जैसा मैंने ऊपर पढ़ा था! यहां कोड का एक उदाहरण है:

  wSheet.Cells(RowIndex, colIndex).Resize(RowsCount, ).Value = _excel.Application.transpose(My1DArray) 

एक अच्छा दिन है, गाइल्स