Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Excel互操作-在所有其他工作表之后添加新工作表_C#_Excel_Interop - Fatal编程技术网

C# Excel互操作-在所有其他工作表之后添加新工作表

C# Excel互操作-在所有其他工作表之后添加新工作表,c#,excel,interop,C#,Excel,Interop,我正在尝试将新工作表添加到Excel工作簿中,并使其成为C#Excel Interop中书中的最后一个工作表 这看起来很简单,我认为下面的代码可以做到: using System.Runtime.InteropServices; using Excel = Microsoft.Office.Interop.Excel; namespace ConsoleApplication2 { class Program { static void Main(string[

我正在尝试将新工作表添加到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);
        }
    }
}
我得到了与上面相同的错误。我还尝试在
Add
Move
方法中将上一张工作表的名称作为字符串作为
After
参数传递,没有乐趣

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


感谢查看此处的文档,它表明“after”对象不是数字位置;它是表示要定位工作表的工作表的对象。代码可能类似(未测试):


这应该可以做到:

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);
它对我有用

WorkBook.Worksheets.Add(
    System.Reflection.Missing.Value,
    WorkBook.Worksheets[WorkBook.Worksheets.Count], 
    1, 
    System.Reflection.Missing.Value);

这不是
Move
方法的参数,而是
Add
方法的参数!非常感谢!现在已经测试过了。这很有道理。正如您所说,新工作表不是在数字之后插入的,而是在该编号位置的工作表之后插入的(Excel为基数1)。如果是XLSM file.JMK,则在Add()调用中得到了一个COMException-这不是对您的问题的回答,但可能是c#和Excel的有用指针。我已经使用LinqToExcel库很长一段时间了,真的无法表达它与使用互操作方法相比有多干净。如果你有时间,看看它是否符合你的要求。另外@jimtollan谢谢你的提醒,我会特别关注LinqToExcel,它看起来不错。谢谢
WorkBook.Worksheets.Add(
    System.Reflection.Missing.Value,
    WorkBook.Worksheets[WorkBook.Worksheets.Count], 
    1, 
    System.Reflection.Missing.Value);