2012-08-28 16 views
20

मैं एक्सेल वर्कबुक में एक नई वर्कशीट जोड़ने की कोशिश कर रहा हूं और इसे सी # एक्सेल इंटरऑप में पुस्तक में अंतिम वर्कशीट बना रहा हूं।एक्सेल इंटरऑप - अन्य सभी के बाद एक नया वर्कशीट जोड़ें

यह वास्तव में सरल लगता है, और मैंने सोचा कि नीचे कोड यह करना होगा:

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

namespace ConsoleApplication2 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      var excel = new Excel.Application(); 

      var workbook = excel.Workbooks.Open(@"C:\test\Test.xlsx"); 
      workbook.Sheets.Add(After: workbook.Sheets.Count); 

      workbook.Save(); 
      workbook.Close(); 

      Marshal.ReleaseComObject(excel); 
     } 
    } 
} 

ऐसा कोई भाग्य।

COMException was unhandled - Exception from HRESULT: 0x800A03EC

मैं Microsoft.com पर this page पाया जो सुझाव दिया मैं कोशिश करते हैं और पहले चादर जोड़ने और फिर ले जाने के लिए यह तो मैं करने की कोशिश की जिन्हें आप नीचे देख कि: मैं इस उपयोगी त्रुटि मिलती है। मुझे पता है कि इस वेबपृष्ठ एक्सेल 95 को लक्षित करता है, लेकिन VBA का उपयोग करें ताकि मुझे उम्मीद थी यह अभी भी काम करेगा वहाँ अभी भी है:

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

namespace ConsoleApplication2 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      var excel = new Excel.Application(); 

      var workbook = excel.Workbooks.Open(@"C:\test\Test.xlsx"); 
      workbook.Sheets.Add(); 
      workbook.Sheets.Move(After: workbook.Sheets.Count); 

      workbook.Save(); 
      workbook.Close(); 

      Marshal.ReleaseComObject(excel); 
     } 
    } 
} 

मैं उपर दिए गए त्रुटि मिलती है। मैंने Add और Move विधियों में After पैरामीटर के रूप में एक स्ट्रिंग के रूप में अपनी आखिरी वर्कशीट का नाम पारित करने का भी प्रयास किया है, कोई खुशी नहीं!

यही मैंने कोशिश की है, इसलिए मेरा सवाल यह है कि मैं Excel कार्यपुस्तिका में वर्कशीट कैसे जोड़ूं और इसे सी # एक्सेल इंटरऑप का उपयोग करके कार्यपुस्तिका में आखिरी शीट कैसे बना सकता हूं?

धन्यवाद

+2

JMK - नहीं आपके मुद्दे का उत्तर लेकिन शायद सी # और एक्सेल के लिए एक सहायक सूचक। मैं कुछ समय के लिए LinqToExcel लाइब्रेरी का उपयोग कर रहा हूं और वास्तव में यह व्यक्त नहीं कर सकता कि इंटरऑप पद्धति का उपयोग करके वीएस क्या अनुभव है। यदि आपके पास समय है, तो यह देखने के लिए देखें कि यह आपकी आवश्यकताओं के अनुरूप होगा या नहीं। https://github.com/paulyoder/LinqToExcel भी http://code.google.com/p/linqtoexcel/ –

+1

@jimtollan सिर के लिए धन्यवाद, मैं LinqToExcel की जांच करने का एक बिंदु बनाउंगा, यह अच्छा लग रहा है। धन्यवाद! – JMK

उत्तर

39

प्रलेखन यहाँ http://msdn.microsoft.com/en-us/library/microsoft.office.tools.excel.worksheet.move(v=vs.80).aspx को देखते हुए, यह इंगित करता है कि 'के बाद' वस्तु एक संख्यात्मक स्थिति नहीं है, यह उस वस्तु का प्रतिनिधित्व करने वाली वस्तु है जिसे आप अपनी चादर को बाद में रखना चाहते हैं।

workbook.Sheets.Add(After: workbook.Sheets[workbook.Sheets.Count]); 
+2

यह 'मूव' विधि के पैरामीटर के रूप में काम नहीं करता है, लेकिन यह 'एड' विधि के लिए पैरामीटर के रूप में काम करता है! आपका बहुत बहुत धन्यवाद! – JMK

+0

अब इसका परीक्षण किया गया है। इसके बहुत सारे अर्थ निकलते हैं। जैसा कि आपने कहा था, नई शीट को संख्या के बाद सम्मिलित नहीं किया जा रहा है, बल्कि उस क्रमांकित स्थिति (एक्सेल के लिए आधार 1) में एक शीट के बाद डाला जा रहा है। –

6

यह काम करना चाहिए::

wSheet.Move(Missing.Value, workbook.Sheets[workbook.Sheets.Count]); 
3

यही एक रास्ता है कि मेरे लिए काम करता है: कोड शायद (untested) की तरह कुछ होना चाहिए

xlWorkSheet = (Microsoft.Office.Interop.Excel.Worksheet)xlWorkBook.Worksheets.Add 
    (System.Reflection.Missing.Value, 
    xlWorkBook.Worksheets[xlWorkBook.Worksheets.Count], 
    System.Reflection.Missing.Value, 
    System.Reflection.Missing.Value); 
संबंधित मुद्दे