Подтвердить что ты не робот

Excel Interop - добавьте новый лист после всех остальных

Я пытаюсь добавить новый рабочий лист в книгу Excel и сделать это последним листом в книге в С# 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 в методах Add и Move, без радости!

Вот что я пробовал, поэтому мой вопрос: как добавить лист в книгу Excel и сделать это последним листом в книге с помощью С# Excel Interop?

Спасибо

4b9b3361

Ответ 1

Если посмотреть на документацию здесь http://msdn.microsoft.com/en-us/library/microsoft.office.tools.excel.worksheet.move(v=vs.80).aspx, это означает, что объект "после" не является числовой позицией; это объект, представляющий лист, который вы хотите разместить после своего листа. Вероятно, код должен быть чем-то вроде (untested):

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

Ответ 2

Это должно выполнить задание:

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

Ответ 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);