C# .add(true)“true”参数/参数是什么意思

C# .add(true)“true”参数/参数是什么意思,c#,excel-interop,C#,Excel Interop,我刚刚开始学习C语言,并使用Visual Studio编写程序。在通过互联网和我的C语言书进行了大量搜索之后……并询问了其他有经验的程序员……没有什么可以回答以下问题:add方法中的参数/参数true在以下代码行中意味着什么: var excel = new microsoft.office.interop.excel.application(); var workbook = excel.workbooks.add(true**); add参数通常在括号中没有任何内容,或者可能是1或2来

我刚刚开始学习C语言,并使用Visual Studio编写程序。在通过互联网和我的C语言书进行了大量搜索之后……并询问了其他有经验的程序员……没有什么可以回答以下问题:add方法中的参数/参数true在以下代码行中意味着什么:

var excel = new microsoft.office.interop.excel.application();
var workbook = excel.workbooks.add(true**);  

add参数通常在括号中没有任何内容,或者可能是1或2来表示要打开的工作簿的数量……但是是真的吗?谢谢

这是VSC工作手册的文档。添加…:这是VBA版本的文档:

Office的用于VSTO的COM自动化API肯定需要为C工效学做一些工作。问题是,该方法在.NET参数值中接受COM变量值System.Object,这意味着它将接受您向其抛出的任何内容,并在没有任何编译时类型安全性的情况下对其进行内部处理。这是一个糟糕的API设计,它应该具有类型化重载,而不是重载是具有相同名称但具有强类型参数的不同方法/函数。但我现在抱怨没有意义了:D

更令人困惑的是,从布尔真值到COM变量对象的转换完全是在幕后完成的。但是首先,让我们考虑文档化的、有效的参数值:

可选对象。确定如何创建新工作簿。如果此参数是指定现有Microsoft Excel文件名的字符串,则将使用指定文件作为模板创建新工作簿。如果此参数为常量,则新工作簿包含指定类型的单个工作表。可以是以下XlWBATemplate常量之一:xlWBATChart、xlWBATExcel4IntlMacroSheet、xlWBATExcel4MacroSheet或XLWBATSHEEP。如果省略此参数,Microsoft Excel将创建一个包含大量空白工作表的新工作簿。工作表的数量由SheetWWorkbook属性设置

<>……这是一个值得考虑的问题! 我们可以导出重载是什么,然后分别记录它们:

Add-由于参数是可选的,这意味着您可以不带任何参数地调用它。其效果是创建一个新工作簿,其中包含大量空白工作表,而这些空白工作表的数量来自SheetwWorkbook。 工作簿.添加字符串templateFileName-如果参数是字符串,则将其视为模板文件的文件名以供使用。显然,这不能封送到布尔值,因此在您的案例中不会发生这种情况。 工作簿.添加Int32常量-文档中使用了常量一词,我相信它实际上意味着Int32值。它只接受这里定义的XlWBATemplate中的值:-这些值是-4109、4、3和-4167。 文档没有说明如果参数值不是这些值会发生什么。它在您的案例中似乎起作用的事实表明,作为包含bool的COM变量传递的值被忽略了。我不相信运行时会将布尔值封送到Int32,因为变量支持布尔值,即使将其封送到Int32,也可能会出现参数错误,因为XlWBATemplate中未定义1


解决方案:更改工作簿。仅将“真”添加到工作簿。添加并查看行为是否有任何更改。如果没有,则保留零钱;否则,您会在Excel COM API中遇到一些未记录的行为,您应该在代码注释中记录这些行为,并让我们也知道

excel interop是一个可怕的开始学习的地方。文档是好的,尽管add是Pascal格式的。我不知道为什么你的不是真的,它说的是addobject模板,它采用的是枚举而不是布尔值。我认为他们正在抛弃c互操作,转而采用js方法。因此,互操作很有可能永远保持这种状态。@Steve Office的JavaScript API不是用于办公自动化的,它是用于通过用户界面提供各种服务的,虽然在功能上有很多重叠,但丝毫没有迹象表明COM API将被抛弃。C interop API只是一个很薄的包装器,由一个自动程序生成。@Steve和Microsoft都喜欢TypeScript@黛嘿黛…谢谢!感谢您对add的帮助。我会试试你的建议。@Dai刚刚用just add…替换了addtrue,程序的运行结果似乎没有受到任何影响。再次感谢。