bferk Ответов: 1

Преобразование PowerPoint в видео


if (path != "")
{
    bool validName = false;
    string nFile = "newFile";

    PowerPoint._Presentation objPres;

    objApp = new PowerPoint.Application();
    objApp.Visible = Microsoft.Office.Core.MsoTriState.msoTrue;
    objApp.WindowState = Microsoft.Office.Interop.PowerPoint.PpWindowState.ppWindowMinimized;

    objPres = objApp.Presentations.Open(txtSearch.Text, MsoTriState.msoTrue, MsoTriState.msoTrue, MsoTriState.msoTrue);
    Console.WriteLine("File name: " + txtSearch.Text);
    try
    {
    
        txtStat.Text = "Starting Conversion";
        
        if (!nFile.Contains(".wmv")) nFile += ".wmv";


                objPres.SaveAs(path + "\\" + nFile, PowerPoint.PpSaveAsFileType.ppSaveAsWMV, MsoTriState.msoTrue);


        txtStat.Text = "Done";
        objPres.Close();
        objApp.Quit();
        
    }
    catch (Exception ex)
    {
        Console.WriteLine(ex);
    }
}
else
{
    MessageBox.Show("Please select a file PowerPoint file to convert");
}


Выше приведен мой я использую, чтобы попытаться конвертировать PowerPoint в видео. Я использую Microsoft.Офис.Взаимодействие.PowerPoint для того, чтобы сделать это. Моя проблема заключается в том, что он преобразует первый слайд, но после этого он отображает действительно странно выглядящие зеленые полосы и странные цвета.

Любая помощь в этом будет очень признательна!

Mike Meinz

Если вы используете File / Save как в PowerPoint без автоматизации (т. е. с помощью клавиатуры), правильно ли он преобразуется?

Также видеть Как освободить com-взаимодействия объектов так называемой программы могут покинуть

[no name]

Когда мы пробуем его в PowerPoint, он работает, но по какой-то причине приведенный выше код этого не делает. Ладно, спасибо за подсказку, я проверю эту статью.

Mike Meinz

Я отправил сообщение Решение 1 и это решает проблему.

Sergey Alexandrovich Kryukov

Почему? Office PowerPoint действительно имеет возможность сохранить его в видео.
—СА

[no name]

Причина, по которой я хочу сделать это в коде, заключается в том, что мне будет отправлено большое количество PowerPoints, которые необходимо преобразовать, поэтому я хочу сделать это, чтобы мне было легче.

Sergey Alexandrovich Kryukov

Понял.
—СА

1 Ответов

Рейтинг:
10

Mike Meinz

Вам нужно подождать, пока видео будет завершено. Ваш код выходит из PowerPoint до того, как видео будет завершено. Ниже приведен пример, который работает.

Записи
* Я изменил вашу переменную path к strPath так что я мог бы использовать Path.Combine.
* Я изменился PowerPoint._Presentation к PowerPoint.Presentation.

Дополнительный
Есть и другие ценности PpMediaTaskStatus что вы должны проверить после того, как while петля. Видеть Перечисление PpMediaTaskStatus[^].

if (!string.IsNullOrEmpty(strPath)) {
	bool validName = false;
	string nFile = "newFile";
	PowerPoint.Application objApp;
	PowerPoint.Presentation objPres;
	objApp = new PowerPoint.Application();
	objApp.Visible = Microsoft.Office.Core.MsoTriState.msoTrue;
	objApp.WindowState = PowerPoint.PpWindowState.ppWindowMinimized;
	objPres = objApp.Presentations.Open(txtSearch.Text, MsoTriState.msoTrue, MsoTriState.msoTrue, MsoTriState.msoTrue);
	Console.WriteLine("File name: " + txtSearch.Text);
	try {
		txtStat.Text = "Starting Conversion";
		if (!nFile.Contains(".wmv")) {
			nFile += ".wmv";
		}
		objPres.SaveAs(System.IO.Path.Combine(strPath, nFile), PowerPoint.PpSaveAsFileType.ppSaveAsWMV, MsoTriState.msoTrue);
		// Wait for creation of video file
		while (objApp.ActivePresentation.CreateVideoStatus == PowerPoint.PpMediaTaskStatus.ppMediaTaskStatusInProgress || objApp.ActivePresentation.CreateVideoStatus == PowerPoint.PpMediaTaskStatus.ppMediaTaskStatusQueued) {
			Application.DoEvents();
			System.Threading.Thread.Sleep(500);
		}

		txtStat.Text = "Done";
		objPres.Close();
		objApp.Quit();
                // Release COM Objects
		System.Runtime.InteropServices.Marshal.FinalReleaseComObject(objPres);
		objPres = null;
		System.Runtime.InteropServices.Marshal.FinalReleaseComObject(objApp);
		objApp = null;
		GC.Collect();
		GC.WaitForPendingFinalizers();

	} catch (Exception ex) {
		Console.WriteLine(ex);
	}
} else {
	MessageBox.Show("Please select a file PowerPoint file to convert");
}


idle63

настоящий эксперт.

Member 12978737

Привет Майк,
Мы сделали именно то,что указано в приведенном выше посте, хотя это работает на IIS Express, то есть Visual stdio, когда мы развертываем на сервере IIS созданное видео не вставляет существующие видео на слайды powerpoint. Код создал финальное видео из power point без видео, которые присутствуют на отдельных слайдах презентации.
Какие-нибудь исправления для этого ?

Mike Meinz

Wow! It has been almost seven years since I wrote that answer. Totally forgot about it.

See <a href="https://support.microsoft.com/en-us/office/turn-your-presentation-into-a-video-c140551f-cb37-4818-b5d4-3e30815c3e83">Turn your presentation into a video - PowerPoint</a>[<a href="https://support.microsoft.com/en-us/office/turn-your-presentation-into-a-video-c140551f-cb37-4818-b5d4-3e30815c3e83" target="_blank" title="New Window">^</a>] What parts of a presentation won't be included in a video? section.

If the information on that page does not help in your case, your can use video editing software to edit the newly saved PowerPoint video file inserting the videos used within your original PowerPoint file. I use CyberLink PowerDirector.

Mike Meinz

Извините, у меня нет опыта работы с IIS Express. Когда вы найдете решение, Пожалуйста, добавьте его сюда, чтобы другие могли извлечь выгоду.

Это может быть связано с тем, что при использовании Visual Studio вы находитесь в более разрешительной среде. Или же может быть так, что версия PowerPoint и любые модули, используемые PowerPoint для создания видео, отличаются на сервере IIS от сервера IIS Express. На сервере IIS может находиться более старая версия PowerPoint и/или поддерживающих модулей, которая не воспроизводит встроенные видео.