我有一个使用COM访问PowerPoint的应用程序,以便从PowerPoint文件导出缩略图。导出后,将显示缩略图。我正在将缩略图导出到我的应用程序的本地appdata文件夹,以便缓存导出的缩略图。这是一个简化的例子:
uses
MSPPT2000, Office2000, PngImage;
var
FPP: TPowerPointApplication;
FPres: TPowerPointPresentation;
FileName, ExportFolder: string;
begin
FileName := Edit1.Text;
FPP := TPowerPointApplication.Create(nil);
FPP.Connect;
FPres := TPowerPointPresentation.Create(nil);
FPres.ConnectTo(FPP.Presentations.Open(FileName, msoTrue, msoTrue, msoFalse));
ExportFolder := GetFolder_LocalAppData + 'PowerPointExportTest'; // 'C:\Users\Testuser\AppData\Local\PowerPointExportTest'
ForceDirectories(ExportFolder);
FPres.Slides.Item(1).Export(ExportFolder + '\Page1.png', 'PNG', 200, 100);
FPres.Free;
FPP.Free;
Image1.Picture.LoadFromFile(ExportFolder + '\Page1.png');
end;
此代码已运行多年,但现在用户已从Microsoft Store安装了PowerPoint 365。 Image1.Picture.LoadFromFile
调用失败并显示EFOpenError
,因为缩略图不存在。
并不是拇指不存在,而是写入不同于我要求的文件夹:
C:\Users\Testuser\AppData\Local\Packages\Microsoft.Office.Desktop_8wekyb3d8bbwe\LocalCache\Local\PowerPointExportTest\Page1.png
。
现在看起来PowerPoint已成为UWP应用程序,并且使用桌面桥来虚拟化文件夹。
我现在可以对此路径进行硬编码,但这感觉不对。使用Win32应用程序访问导出的thumb文件的官方方法是什么?
try
Image1.Picture.LoadFromFile(ExportFolder + '\Page1.png');
except
on E: EFOpenError do
begin
ShowMessage('File not found in the expected place, trying hard coded alternative path');
Image1.Picture.LoadFromFile(GetFolder_LocalAppData + 'Packages\Microsoft.Office.Desktop_8wekyb3d8bbwe\LocalCache\Local\PowerPointExportTest\Page1.png');
end;
end;