Excel Interop – 在所有其他人之后添加一个新的工作表

我正在尝试将新的工作表添加到Excel工作簿,并将其作为C#Excel Interop中的书中的最后一个工作表。

这看起来很简单,我认为下面的代码会做到这一点:

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是未处理的 – 从HRESULTexception:0x800A03EC

我在Microsoft.com上find了这个页面 , 这个页面build议我尝试先添加表格,然后移动它,所以我尝试了如下所示。 我知道这个网页的目标是Excel 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); } } } 

我得到了与上面相同的错误。 我也试过将我最后一张工作表的名字作为string传递给AddMove方法中的After参数,没有快乐!

这就是我所尝试的,所以我的问题是如何将工作表添加到Excel工作簿,并使这个工作簿中的最后一张表使用C#Excel互操作?

谢谢

看看这里的文档http://msdn.microsoft.com/en-us/library/microsoft.office.tools.excel.worksheet.move(v=vs.80).aspx ,它表明'后'对象不是一个数字的位置; 它是表示要放置工作表的工作表的对象。 代码可能应该像(未经testing):

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

这应该做的工作:

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

这是对我来说唯一的方法:

 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);