为什么我得到一个多余的 sheet,即使我明确地将 sheet 计数设置为 1?

Why am I getting a superfluous sheet even though I'm explicitly setting sheet count to 1?

我想避免生成的传播sheets 具有 empty/superfluous sheets 命名为 "Sheet1" 等。我想我可以通过指定一个工作簿应该有多少 sheet 来做到这一点:

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

...但除了我创建的 sheet 之外,我仍然收到不需要的 "Sheet1"。这是相关代码:

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);
}

因此,由于在 Excel.Application 实例中将 SheetsInNewWorkbook 设置为 1 并不能解决问题,我需要做些什么来防止这些流浪汉 sheet 出现?

您的问题的答案可以在 Workbook.Add 方法的 Template 参数的文档中找到。

[...] If this argument is omitted, Microsoft Excel creates a new workbook with a number of blank sheets (the number of sheets is set by the SheetsInNewWorkbook property).

您的代码省略了它,因此它为您创建了一个作品sheet(因为您已将 SheetsInNewWorkbook 设置为 1.

属性 也被限制在 1 到 255 之间,因此您无法添加没有 sheet 的工作簿(除非您使用文件模板)。

同样来自 Template 参数文档:

If this argument is a constant, the new workbook contains a single sheet of the specified type. Can be one of the following Microsoft.Office.Interop.Excel.XlWBATemplate constants: xlWBATChart, xlWBATExcel4IntlMacroSheet, xlWBATExcel4MacroSheet, or 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);

这只是重命名了创建的单曲 sheet。