以下のコードを使用して、RAD Studio XE7 の C++Builder から .xlsx ファイルを開こうとしています。
#include "ComObj.hpp"
Variant Excel = CreateOleObject("Excel.Application");
Variant Books = Excel.OlePropertyGet("Workbooks");
Excel.OlePropertySet("Visible", true);
// An escape character is missing but the problem remains
Books.OleProcedure("Open", L"D:\1.xlsx"); // exception here
ただし、最後の行で例外が発生し、次のメッセージが表示されます。
Project2.exe は例外クラス EOleException を発生させ、「残念ながら、ファイル TRUE.xlsx が見つかりませんでした。移動、名前変更、または削除された可能性がありますか?'.
Delphi のコードは正常に動作しているようです。
uses ComObj;
var
Excel, Books: Variant;
begin
Excel := CreateOleObject('Excel.Application');
Books := Excel.Workbooks;
Excel.Visible := True;
Books.Open('D:\1.xlsx'); // code passes
end;
誰かが解決策を知っていますか?
Update1: VB の次のコードも正常に動作します。
Sub Button1_Click()
Dim xlApp As Excel.Application
Dim xlBooks As Excel.Workbooks
Set xlApp = CreateObject("Excel.Application")
Set xlBooks = xlApp.Workbooks
xlApp.Visible = True
xlBooks.Open ("D:\1.xlsx")
End Sub
Update2: 生の文字列リテラルを送信すると、同じ例外が発生します。
Books.OleProcedure("Open", uR"(D:\1.xlsx)");
環境の問題でもないようです。この例をいくつかのコンピューターでテストしましたが、効果はありませんでした。