Powerpoint не может открыть файл - PullRequest
3 голосов
/ 17 января 2010

Я разрабатываю программу на 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, но у обеих проблем одна и та же.

Есть ли способ избежать этой странной проблемы?

Ответы [ 8 ]

6 голосов
/ 11 сентября 2012

Ответ гораздо проще: приложение 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);
1 голос
/ 08 марта 2013
        ProcessStartInfo ten_ct = new ProcessStartInfo();
        ten_ct.FileName = "POWERPNT.EXE";
        ten_ct.Arguments = @"D:\project\GiaoAn\GiaoAn\MyPpt.pptx";
        Process.Start(ten_ct);
1 голос
/ 17 сентября 2012

У меня была такая же проблема при попытке открыть существующую презентацию PowerPoint, пока я не обнаружил, что Visual Basic для приложений (VBA) не был установлен в моих вариантах установки Office, как описано здесь:

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

Видимо, эта проблема возникает только при работе с PowerPoint, так как у меня нет проблем при работе с файлами Excel и Word.

Проблема исчезла, как только я восстановил свой Office, включая VBA для установки.

Надеюсь, это поможет!

1 голос
/ 16 января 2012

У меня была похожая проблема с PowerPoint.Я обнаружил, что метод Presentations.Open не работает, если у меня не открыта PowerPoint.

Одним из возможных решений является установка PowerPointApplication.Visible = MsoTriState.msoTrue Однако это приведет к физическому открытию PowerPoint, что, вероятно, нежелательно.

Я решил свою проблему, установив последний аргумент метода Opento msoFalse, который указывает, что окно PowerPoint не должно открываться на сервере, что более желательно.

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

Посмотрите эту статью базы знаний MSDN для получения дополнительной информации о различных параметрахметода Open.

1 голос
/ 18 января 2010

Вы пытались не устанавливать TriState, как это?

Object oMiss = System.Reflection.Missing.Value; 
Presentation pres = pres_set.Open(ref path, ref oMiss, ref oMiss, ref oMiss); 
0 голосов
/ 29 января 2012

Я решаю эту проблему, используя:

        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;
        }
0 голосов
/ 02 августа 2010

Попробуйте это:

Presentation pres = pres_set.Open(path, 
  Microsoft.Office.Core.MsoTriState.msoFalse, 
  Microsoft.Office.Core.MsoTriState.msoTrue, 
  Microsoft.Office.Core.MsoTriState.msoFalse);
0 голосов
/ 17 января 2010

Я видел подобные проблемы с Excel, даже когда я пытаюсь запустить его как пользователь с файлом командной строки для открытия. Так что, возможно, с вашей программой все в порядке. Когда я делаю это как пользователь, обычно это работает во второй раз.

Так что мой совет будет либо

1) Чтобы ваша программа сначала попыталась открыть Power Point без файла, подождите (начните с 5 секунд), а затем попытайтесь загрузить файл.

или

2) Ваша программа может перехватить исключение и просто попытаться открыть файл еще раз, если он потерпит неудачу (и если вы обнаружите, что это работает, вы должны добавить максимальное количество попыток, чтобы программа не зацикливалась при попытке сделать это весь день). При желании вы также можете проверить, существует ли файл (если это возможно в вашем сценарии - но, похоже, это не та проблема, с которой вы сейчас столкнулись).

...