Powerpoint无法打开文件
我正在开发创建PowerPoint演示文稿的C#程序。但是,我遇到以下指令的问题:Powerpoint无法打开文件
Presentation pres = pres_set.Open(path,
Microsoft.Office.Core.MsoTriState.msoFalse,
Microsoft.Office.Core.MsoTriState.msoTrue,
Microsoft.Office.Core.MsoTriState.msoTrue);
该指令仅在有时才起作用。如果没有,则会显示一条消息“PowerPoint无法打开文件”的消息。当我然后手动打开模板文件时,关闭它并再次执行该函数,大部分时间它将正确执行。
我已经使用了Microsoft Powerpoint 14.0和Microsoft Powerpoint 12.0库,但两者都有相同的问题。
有什么办法可以避免这个奇怪的问题吗?
我已经在Excel中看到类似这样的问题,即使当我尝试以打开的命令行文件的用户身份启动它时也是如此。所以你的程序可能没有什么问题。当我以用户身份执行此操作时,通常它会第二次运行。
所以我的建议是,要么
1)你的程序尝试没有文件先打开电源点,等待(开始5秒),然后把它尝试加载该文件。
或
2)你的程序可以捕获该异常,并简单地尝试打开该文件,如果再失败(如果你发现这个工程,你应该增加尝试的最大数量,所以程序没有按” t循环尝试整天这样做)。你也可以选择查看文件是否存在(如果这是你的场景中的可能性 - 但它听起来不像是目前你面临的问题)。
您是否打开Power Point此代码 Application app = new Application(); app.Visible = Microsoft.Office.Core.MsoTriState.msoTrue; 或者我必须在程序文件文件夹中的某处打开powerpoint.exe? – sander 2010-01-18 18:54:49
你应该尝试两个(如果需要),第一个显然更容易尝试。 – 2010-01-20 03:55:09
您是否尝试过不设置TriState?
Object oMiss = System.Reflection.Missing.Value;
Presentation pres = pres_set.Open(ref path, ref oMiss, ref oMiss, ref oMiss);
我试过这个解决方案,但它给出错误“指定的转换无效” – sander 2010-01-18 18:50:01
试试这个:
Presentation pres = pres_set.Open(path,
Microsoft.Office.Core.MsoTriState.msoFalse,
Microsoft.Office.Core.MsoTriState.msoTrue,
Microsoft.Office.Core.MsoTriState.msoFalse);
我有一个类似的问题与PowerPoint。我发现我的Presentations.Open方法失败,除非我打开PowerPoint。
一个可能的解决方案是设置PowerPointApplication.Visible = MsoTriState.msoTrue
但是,这将导致PowerPoint物理打开,这可能是不受欢迎的。
我通过将Open方法的最后一个参数设置为msoFalse来解决了我的问题,该方法指定不应在服务器上打开PowerPoint窗口,这是更合乎需要的。
Presentations.Open(inputFileName,
MsoTriState.msoFalse,
MsoTriState.msoTrue,
MsoTriState.msoFalse);
有关Open方法的不同参数的更多信息,请参阅this MSDN KB article。
我使用解决这个问题:
var app = new PP.Application();
PP.Presentation pres = null;
try
{
Process.Start(inputFile);
var presCol = app.Presentations;
// Waiting for loading
Thread.Sleep(2000);
pres = presCol[inputFile];
// Your code there
// ...............
}
catch (System.Exception ex)
{
Log.Error(ex.Message);
throw;
}
finally
{
if (pres != null)
{
pres.Close();
}
if (app != null)
{
app.Quit();
}
pres = null;
app = null;
}
等待一个以Thread.Sleep开始的进程是一个非常糟糕的做法(因为你无法预测启动需要多长时间),应该是在任何情况下都避免! – 2014-02-24 14:37:56
答案是简单得多:在PowerPoint应用程序预计现有文件。
我刚刚遇到了相同的异常,因为我使用了相对路径,并且PowerPoint试图打开相对于PowerPoint.exe而不是您的Program.exe的文件。
这个问题可以很快通过调用open-方法之前加入这样的固定:
// Start Powerpoint
var powerpointApp = new Microsoft.Office.Interop.PowerPoint.Application();
// Get a fileInfo object to generate the full path
FileInfo fileInfo = new FileInfo(@"RelativeDir\YourPresentation.pptx");
// Use the full path
powerpointApp.Presentations.Open(fileInfo.FullName, MsoTriState.msoTrue, WithWindow: MsoTriState.msoFalse);
万启动,这解决了我的问题,谢谢你 – 2013-03-27 12:53:09
伟大的答案。谢谢亚历山大! – 2014-11-11 21:25:51
试图打开一个现有的PowerPoint演示文稿,直到我发现,Visual Basic,为我有同样的问题应用程序(VBA)这里描述并没有在我的Office安装选项安装:
http://www.debugging.com/bug/22261
显然,使用PowerPoint工作时,因为我没有PROBL这个问题只发生ems操作Excel和Word文件。
只要我修复了我的Office,包括VBA到安装,问题就消失了。
希望它有帮助!
ProcessStartInfo ten_ct = new ProcessStartInfo();
ten_ct.FileName = "POWERPNT.EXE";
ten_ct.Arguments = @"D:\project\GiaoAn\GiaoAn\MyPpt.pptx";
Process.Start(ten_ct);
如果英语不是您的母语,您有更大的理由使用拼写检查器。这就是说,除了你的拼写外,理解你优秀的英语是没有问题的。 – Zano 2010-01-17 16:02:08
你为什么不接受解决方案?它会帮助其他人。 – Sampath 2013-08-23 05:54:37