//Excel - 带参数属性 import console; import com.excel; console.showLoading(" 正在启动 Excel "); var excel,err = com.excel(); assert(excel,err); excel.alerts = false; /* excel.Visible = true;//显示 Excel 界面 excel.alerts = true;//允许界面提示与屏幕更新 */ var book = excel.WorkBooks.Add(); var sheet = excel.ActiveWorkbook.Sheets(1); var cell = sheet.Cells(1,1); cell.Value2 = "haha"; //Value2是不带参数的属性 /* cell.Value 是带参数的属性, 用 VB代码 可以这样赋值 cell.Value(xlRangeValueDefault) = "值" 很多 COM 控件的范例用的是 VB 代码, aardio 用户看到可能很困惑,为什么可以对函数返回值赋值呢? 其实这是 VB 的一个语法糖,他内部会转换为类似这样的代码: cell.setValue(xlRangeValueDefault,"值") 而上面的(xlRangeValueDefault)是可省略的可选参数, 所以 VB 也可以写为 cell.Value = "值" 这会让 aardio 用户误以为他是无参数的属性。 如果你在 aardio 中写 cell.Value = "值" 实际会转换为 cell.setValue("值2") 当然会报参数错误。 参考: https://docs.microsoft.com/en-us/office/vba/api/excel.range.value */ //aardio 写带参数的属性,需要加上 set 前缀: cell.setValue(excel.xlRangeValueDefault,"值") cell.setValue(,"值2") //aardio 写带参数的属性,并省略可选参数: //aardio 读带参数的属性,需要加上 get 前缀。 console.log( cell.getValue(excel.xlRangeValueMSPersistXML) ) console.log( cell.getValue() ) //这个参数可省略 console.log( cell.Value ) //这样写 aardio 会转换为 cell.getValue() /* aardio 访问 COM 对象成员的规则是这样: ------------------------------------------- comObject.Value 解析为读写COM对象属性。 comObject.getValue() 找到对象名称为 Value 的属性并将其作为读属性函数调用。 comObject.setValue() 找到对象名称为 Value 的属性并将其作为读属性函数调用。 comObject.Value() 找到对象名称为 Value 的成员并将其作为函数调用。 comObject.Value = v 会转换为 comObject.setValue(v) var v = comObject.Value 会转换为 var v = comObject.getValue() 访问 COM 对象的成员最终都会转换为函数调用。 如果在 aardio 代码中写 comObject.Value() 那么 comObject.Value 一定是函数。 但省略调用操作符() 写为comObject.Value 就是访问 COM 对象属性了。 并不是所有COM对象属性都要带上 set,get 前缀去访问。 很明显无参数的属性不需要加前缀。 带参数的属性,如果是只读的属性通常也不需要加前缀。 例如上面代码中的 var cell = sheet.Cells(1,1); 也可以写为 var cell = sheet.getCells(1,1); 但没必要这么写,因为这是一个只读的属性,对方不会混淆你的意图。 但如果你写 cell.Value() Excel 就懵了,你觉得你是要读属性,但 Excel 误以为你是要把单元格的值清空。 */ excel.Quit(); console.pause();