如何使用Delphi正确设置公式的Excel NumberFormat属性?
当从我的Delphi程序通过OLE自动化Excel,并尝试将单元格的NumberFormat属性设置为“常规”并编写公式时,Excel使用此通知引发exception:
项目X.exe引发exception类EVariantInvalidOpError与消息“无效的变体操作”。
换句话说,我的问题是:哪个NumberFormat是包含像concatenate这样的文本函数的公式单元格的最佳格式?
这里是我的示例代码:
USE System.Win.ComObj; procedure TForm1.Btn_1Click(Sender: TObject); var XL: variant; Sheet, WorkBook: variant; begin try XL := GetActiveOleObject('Excel.Application'); except XL := CreateOleObject('Excel.Application'); end; XL.Visible := False; WorkBook:=XL.WorkBooks.Add; Sheet:=XL.WorkBooks[1].WorkSheets.Add; Sheet.Name := 'Test-Sheet'; Sheet.Cells[1, 1]:='col1'; Sheet.Cells[1, 1].Font.Bold := True; Sheet.Cells[1, 1].Font.Size := 10; Sheet.Cells[1, 2]:='col2'; Sheet.Cells[1, 2].Font.Bold := True; Sheet.Cells[1, 2].Font.Size := 10; Sheet.Cells[1, 3]:='Basic Formula'; Sheet.Cells[1, 3].Font.Bold := True; Sheet.Cells[1, 3].Font.Size := 10; Sheet.Cells[1, 3].numberformat := 'General'; Sheet.Cells[1, 4]:='Text function '; Sheet.Cells[1, 4].Font.Bold := True; Sheet.Cells[1, 4].Font.Size := 10; Sheet.Cells[1, 4].numberformat := 'General'; Sheet.Cells[2, 1].Value := '1000'; Sheet.Cells[2, 2].Value := '500'; // or := 'abcxyz' for concat Sheet.Cells[2, 3].Value := '=A2+B2'; //this one is ok Sheet.Cells[2, 4].Value := '=CONCATENATE(A2;B2)'; //this one raised exception... XL.WorkBooks[XL.WorkBooks.Count].SaveAs( ExtractFileDir( Application.ExeName ) +'\Test.xls' ,51 ); XL.ActiveWorkbook.Close(0); XL.Quit; end;
从文档 :
要合并文本和数字,请使用CONCATENATE函数,&符号运算符(&)或TEXT函数和&符号运算符。
当您使用CONCATENATE()
函数时,参数以逗号( ,
)分隔,而不是分号( ;
),或者与&符号( &
)分隔;
尝试这个
Sheet.Cells[2, 4].Formula := '=Sum(A1:A10)';
要么
Sheet.Range['A11', 'A11'].Formula := '=Sum(A1:A10)';