Почему я получаю лишний лист, хотя я явно устанавливаю количество листов в 1?

Я хочу избежать сгенерированных электронных таблиц, имеющих пустые / лишние листы с именем "Sheet1" и тому подобное. Я думал, что смогу сделать это, указав, сколько листов в книге должно быть следующим образом:

_xlApp = new Excel.Application { SheetsInNewWorkbook = 1 };

... Но я все еще получаю нежелательный "Лист1" в дополнение к листу, который я создаю. Вот соответствующий код:

using Excel = Microsoft.Office.Interop.Excel;
. . .
private Excel.Application _xlApp;
private Excel.Workbook _xlBook;
private Excel.Sheets _xlSheets;
private Excel.Worksheet _xlSheet;
. . .
private void InitializeSheet()
{
    _xlApp = new Excel.Application { SheetsInNewWorkbook = 1 };
    _xlBook = _xlApp.Workbooks.Add(Type.Missing);
    _xlBook.Worksheets.Add(Type.Missing, Type.Missing, Type.Missing, Type.Missing);
    _xlSheets = _xlBook.Worksheets;
    _xlSheet = (Excel.Worksheet)_xlSheets.Item[1];
    _xlSheet.Name = String.Format("Price Compliance {0} {1}", _month, _year);
}

Итак, поскольку установка SheetsInNewWorkbook в 1 в экземпляре Excel.Application не помогает, что мне нужно сделать, чтобы эти листы бродяги не появлялись?

1 ответ

Решение

Ответ на ваш вопрос можно найти в документации Template параметр на Workbook.Add метод.

[...] Если этот аргумент пропущен, Microsoft Excel создает новую книгу с количеством пустых листов (количество листов устанавливается SheetsInNewWorkbook имущество).

Ваш код пропускает его, поэтому он создает для вас один рабочий лист (так как вы установили SheetsInNewWorkbook до 1.

Это свойство также ограничено значением от 1 до 255, поэтому вы не можете добавить рабочую книгу без листа (если вы не используете шаблон файла).

Также из Template документация по параметрам:

Если этот аргумент является константой, новая книга содержит один лист указанного типа. Может быть одним из следующих Microsoft.Office.Interop.Excel.XlWBATemplate константы: xlWBATChart, xlWBATExcel4IntlMacroSheet, xlWBATExcel4MacroSheet, или же xlWBATWorksheet,

Таким образом, альтернативный способ сделать это:

_xlApp = new Excel.Application();
_xlBook = _xlApp.Workbooks.Add(Excel.XlWBATemplate.xlWBATWorksheet);
_xlSheets = _xlBook.Worksheets;
_xlSheet = (Excel.Worksheet)_xlSheets.Item[1];
_xlSheet.Name = String.Format("Price Compliance {0} {1}", _month, _year);

Который просто переименовывает единственный созданный лист.

Другие вопросы по тегам