我正在开发一个使用Delphi Pascal打开XLSX文件并在其上写入单元格的小工具。在使用Office 2013和Office 365的计算机上,它的行为有所不同。
代码如下:
var
ExcelApp: OleVariant;
anExcelFileName: String;
begin
try
ExcelApp := CreateOleObject('Excel.Application');
anExcelFileName := 'D:\sample.xlsx';
ExcelApp.Workbooks.Open(anExcelFileName);
ExcelApp.Visible := True;
ExcelApp.Workbooks[1].Sheets[1].Range['A1'].Value := 'HELLO';
except
on E: Exception do
showMessage('Error on something: ' + E.Message);
end;
end;
在Office 2013中,代码将访问驱动器D中的sample.xlsx文件,将其打开,然后在单元格A1中写入HELLO。
在Office 365中,该代码将打开两个文件。首先,它将打开sample.xlsx并打开一个新的空白工作簿,并在新的空白工作簿中编写HELLO。
如何在Office 365中获得旧行为?
答案 0 :(得分:12)
您的代码失败,因为它假设您打开的工作簿将是工作簿集合中的第一个,并且这种假设并不总是成立。
Workbooks.Open
返回新打开的工作簿。将该对象用于将来对工作簿的引用。像这样:
var
ExcelApp, Workbook: OleVariant;
anExcelFileName: String;
begin
try
ExcelApp := CreateOleObject('Excel.Application');
anExcelFileName := 'D:\sample.xlsx';
Workbook := ExcelApp.Workbooks.Open(anExcelFileName);
ExcelApp.Visible := True;
Workbook.Sheets[1].Range['A1'].Value := 'HELLO';
except
on E: Exception do
showMessage('Error on something: ' + E.Message);
end;
end;