Powerpoint无法打开文件

时间:2010-01-17 15:53:00

标签: c# vsto powerpoint

我正在开发一个创建PowerPoint演示文稿的C#程序。但是,我遇到了以下说明的问题:

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库,但两者都存在同样的问题。

有没有办法避免这个奇怪的问题?

8 个答案:

答案 0 :(得分:6)

答案要简单得多:Powerpoint应用程序需要现有文件。

我只是遇到了相同的异常,因为我使用了相对路径,而PowerPoint试图打开相对于PowerPoint.exe而不是Program.exe的文件。

通过在调用open-method之前添加类似的内容,可以快速解决此问题:

// 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);

答案 1 :(得分:1)

你有没有试过像这样设置TriState?

Object oMiss = System.Reflection.Missing.Value; 
Presentation pres = pres_set.Open(ref path, ref oMiss, ref oMiss, ref oMiss); 

答案 2 :(得分:1)

我遇到了与PowerPoint类似的问题。我发现我的Presentations.Open方法失败,除非我打开PowerPoint。

一个可能的解决方案是设置PowerPointApplication.Visible = MsoTriState.msoTrue但是,这会导致PowerPoint在物理上打开,这可能是不受欢迎的。

我通过将Open方法的最后一个参数设置为msoFalse解决了我的问题,它指定不应该在服务器上打开PowerPoint窗口,这是更理想的。

Presentations.Open(inputFileName, 
                   MsoTriState.msoFalse, 
                   MsoTriState.msoTrue,
                   MsoTriState.msoFalse);

请查看this MSDN KB article以获取有关Open方法的不同参数的更多信息。

答案 3 :(得分:1)

我在尝试打开现有的PowerPoint演示文稿时遇到了同样的问题,直到我发现我的Office安装选项中没有安装Visual Basic for Applications(VBA),如下所述:

http://www.debugging.com/bug/22261

显然,只有在使用PowerPoint时才会出现此问题,因为我在操作Excel和Word文件时没有任何问题。

一旦我修复了Office,问题就消失了,包括VBA到安装。

希望它有所帮助!

答案 4 :(得分:1)

        ProcessStartInfo ten_ct = new ProcessStartInfo();
        ten_ct.FileName = "POWERPNT.EXE";
        ten_ct.Arguments = @"D:\project\GiaoAn\GiaoAn\MyPpt.pptx";
        Process.Start(ten_ct);

答案 5 :(得分:0)

我已经在Excel中看到过这样的问题,即使我尝试以具有要打开的命令行文件的用户身份启动它。所以你的程序可能没有任何问题。当我以用户身份执行此操作时,通常它会第二次运行。

所以我的建议是

1)为了让您的程序在没有文件的情况下首先尝试打开Power Point,请等待(以5秒开始),然后让它尝试加载文件。

2)你的程序可以捕获异常,只是尝试再次打开文件如果失败(如果你发现它有效,你应该添加最大尝试次数,所以程序不会循环尝试这样做一整天)。您也可以选择检查文件是否存在(如果您的方案中存在这种情况 - 但听起来这不是您目前面临的问题)。

答案 6 :(得分:0)

试试这个:

Presentation pres = pres_set.Open(path, 
  Microsoft.Office.Core.MsoTriState.msoFalse, 
  Microsoft.Office.Core.MsoTriState.msoTrue, 
  Microsoft.Office.Core.MsoTriState.msoFalse);

答案 7 :(得分:-2)

我使用以下方法解决了这个问题:

        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;
        }