为什么即使我明确将纸张数设置为1,我也会得到一张多余的纸张?

时间:2015-12-15 22:24:57

标签: c# excel vba excel-interop excel.application

我想避免生成的电子表格包含名为" 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);
}

...但我仍然得到了一个不受欢迎的" Sheet1"除了我创建的工作表。以下是相关代码:

{{1}}

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

1 个答案:

答案 0 :(得分:3)

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

  

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

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

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

同样来自Template参数文档:

  

如果此参数是常量,则新工作簿包含单个   指定的        类型。可以是以下Microsoft.Office.Interop.Excel.XlWBATemplate之一        常数:xlWBATChartxlWBATExcel4IntlMacroSheetxlWBATExcel4MacroSheet,        或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);

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