使用 OleContainer 保存时 Excel 文件损坏

Corrupt Excel File when saving with OleContainer

使用 CPP Builder XE7。使用 OleContainer 保存 Excel 文件会产生损坏的 Excel 文件!

这是简化的代码片段:

OleContainer1->CreateObjectFromFile("input.xlsx", false);
OleContainer1->SaveAs("ouput.xlsx");

另一方面:保存 docx 文件不会以损坏的文件结束。

请指导!

这是我找到的解决方案:

// You have to activate the object before accessing it
OleContainer1->DoVerb(ovShow);

Variant vOLEExcel = OleContainer1->OleObject.GetActiveObject("Excel.Application");

// Get document out of the OLE container
Variant vActiveDocument = vOLEExcel.OlePropertyGet("ActiveWorkBook");

// save it
vActiveDocument.Exec(Procedure("SaveAs") << L"C:\temp\output.xlsx");

// set saved-flag to inhibit save-questions
vActiveDocument.OlePropertySet("Saved", true);