Почему я получаю лишний лист, хотя я явно устанавливаю количество листов в 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);
Который просто переименовывает единственный созданный лист.