【发布时间】:2020-07-23 17:10:31
【问题描述】:
我正在尝试向 Excel 工作簿添加一个新工作表,并使其成为 C# Excel 互操作书中的最后一个工作表。
看起来很简单,我认为下面的代码可以做到:
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);
}
}
}
我得到与上述相同的错误。我还尝试在 Add 和 Move 方法中将上一个工作表的名称作为字符串作为 After 参数传递,不高兴!
这是我尝试过的,所以我的问题是如何使用 C# Excel Interop 将工作表添加到 Excel 工作簿并使其成为工作簿中的最后一个工作表?
谢谢
【问题讨论】:
-
JMK - 不是您的问题的答案,但可能是对 c# 和 excel 的有用指针。我已经使用 LinqToExcel 库已经有一段时间了,并且真的无法表达与使用互操作方法相比,它的体验有多干净。如果你有时间,看看它是否符合你的要求。 github.com/paulyoder/LinqToExcel 还有code.google.com/p/linqtoexcel
-
@jimtollan 感谢您的提醒,我将重点检查 LinqToExcel,它看起来不错。谢谢!