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?
Спасибо
Ответы
Ответ 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);