35

我正在尝试向 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 未处理 - 来自 HRESULT 的异常:0x800A03EC

我在 Microsoft.com 上找到了这个页面,它建议我先尝试添加工作表,然后再移动它,所以我尝试了如下所示。我知道这个网页以 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);
        }
    }
}

我得到与上面相同的错误。我还尝试将上一个工作表的名称作为字符串作为After参数传递给AddandMove方法,不高兴!

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

谢谢

4

4 回答 4

66

查看此处的文档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]); 
于 2012-08-28T09:28:26.037 回答
8

这应该做的工作:

wSheet.Move(Missing.Value, workbook.Sheets[workbook.Sheets.Count]);
于 2013-07-12T09:27:20.077 回答
5

这是对我有用的唯一方法:

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);
于 2014-01-29T22:31:35.283 回答
-1

这个对我有用

WorkBook.Worksheets.Add(
    System.Reflection.Missing.Value,
    WorkBook.Worksheets[WorkBook.Worksheets.Count], 
    1, 
    System.Reflection.Missing.Value);
于 2020-07-23T08:13:15.407 回答