1

我想避免生成的电子表格包含名为“Sheet1”等的空/多余工作表。我想我可以通过指定工作簿应该有多少张这样的方式来做到这一点:

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

...但是除了我创建的工作表之外,我仍然得到一个不需要的“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 并不能解决问题,我需要做些什么来防止这些垃圾表出现?

4

1 回答 1

3

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

[...] 如果省略此参数,Microsoft Excel 会创建一个带有许多空白工作表的新工作簿(工作表的数量由SheetsInNewWorkbook属性设置)。

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

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

同样来自Template参数文档:

如果此参数是常量,则新工作簿包含指定类型的单个工作 。可以是以下Microsoft.Office.Interop.Excel.XlWBATemplate 常量之一:xlWBATChartxlWBATExcel4IntlMacroSheetxlWBATExcel4MacroSheetxlWBATWorksheet.

因此,另一种方法是:

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

它只是重命名单个创建的工作表。

于 2015-12-15T23:33:15.633 回答