使用OleContainer保存时损坏的Excel文件

Corrupt Excel File when saving with OleContainer

本文关键字:Excel 文件 损坏 OleContainer 保存 使用      更新时间:2023-10-16

使用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);