我正在尝试将新工作表添加到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上找到this page,建议我先尝试添加表单,然后移动它,所以我尝试了如下所示。我知道这个网页的目标是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
和Add
方法中的Move
参数,没有任何乐趣!
这就是我尝试过的,所以我的问题是如何将工作表添加到Excel工作簿并使用C#Excel Interop将其作为工作簿中的最后一个工作表?
由于
答案 0 :(得分:48)
查看此处的文档http://msdn.microsoft.com/en-us/library/microsoft.office.tools.excel.worksheet.move(v=vs.80).aspx,表明'after'对象不是数字位置;它是表示您要在后面放置工作表的工作表的对象。代码可能应该是(未经测试的):
workbook.Sheets.Add(After: workbook.Sheets[workbook.Sheets.Count]);
答案 1 :(得分:6)
这应该做的工作:
wSheet.Move(Missing.Value, workbook.Sheets[workbook.Sheets.Count]);
答案 2 :(得分:3)
这是对我有用的唯一方法:
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);
答案 3 :(得分:-1)
对我有用
WorkBook.Worksheets.Add(
System.Reflection.Missing.Value,
WorkBook.Worksheets[WorkBook.Worksheets.Count],
1,
System.Reflection.Missing.Value);