Программно сохранить как PowerPoint 2007 (PPTX), от PowerPoint 2003
-
01-10-2019 - |
Вопрос
Мне нужно иметь возможность сэкономить презентации (программно) в PowerPoint 2003 в качестве OpenXML («.pptx»). Я установил пакет совместимости Microsoft Office. Это действительно позволяет мне выполнить «Сохранить как презентацию PowerPoint 2007» от PowerPoint 2003.
Как я могу сделать это программно? (например, VBA)
Я старался Presentation.SaveAs
: Пока нет присущей PpSaveAsFileType
Valuum Value в PowerPoint 2003 для ppSaveAsOpenXMLPresentation
, Я сделал программу, которая печатает PpSaveAsFileType
значения и выяснили, что во время выполнения, ppSaveAsOpenXMLPresentation = 24
.
Тем не менее, я попробовал:SaveAs(@"c:\temp\saveas\pupik.pptx", (PpSaveAsFileType) ((int) 24), MsoTriState.msoTrue);
И получил исключение «Неверное значение перечисления»
Любые идеи, как сделать эту работу?
(PS - Я знаю, что этот вопрос уже прописал несколько человек в Интернете, но никаких решений не было предложено.)
Спасибо, arie.
Решение
Редактировать> Некоторые грамматики
Формат PPTX AFAIK не поддерживает презентации с поддержкой Macrobable, поэтому, если ваш код находится в презентации, вы пытаетесь сохранить, он не будет работать.
У меня сейчас нет Excel 2003, но Если пакет совместимости включил опцию «PPTX» В диалоговом окне конфигурации формат сохранения по умолчанию, и вы пытаетесь сохранить другую презентацию Я думаю, вы можете, если вы используете что-то вроде:
MyOtherPresentation.SaveAs "C:\Mypres", ppSaveAsDefault
Обратите внимание, что это может работать только в том случае, если презентация не была сохранена до формата PPT
РЕДАКТИРОВАТЬ
Если вышеизложенное не работает, вы можете попробовать другой подход. Сохраните файл в старом формате и вызовите программу преобразования:
PPCNVCom.exe.
Видеть здесь Для примера (используя wordconv.exe, но по сути тот же)
Убедитесь, что все обновления Office установлены, потому что если не заканчивается программа, не заканчивая отчетность об ошибке и ничего не делать.
оф
Видеть здесь для инструкций
А также здесь Для хорошего обсуждения
HTH!
Другие советы
Хитрость состоит в том, чтобы изменить формат сохранения по умолчанию приложения в реестре, а затем сохранить и, наконец, снова восстановить исходный формат сохранения.
Соответствующий ключ
Software\Microsoft\Office\11.0\PowerPoint\Options
Создать DWORD
значение с именем DefaultFormat
и установите его на 0x21, чтобы сохранить как PPTX.
public void SomeMethod()
{
...
using (PptxSaver pptxSaver = new PptxSaver())
{
presentation.SaveAs("sample.pptx")
}
...
}
class PptxSaver : IDisposable
{
private const string OptionKey = @"Software\Microsoft\Office\11.0\PowerPoint\Options";
private const string OptionValue = "DefaultFormat";
private const int SaveFormatPptx = 0x21;
private int oldFormat;
public PptxSaver()
{
using (RegistryKey key = Registry.CurrentUser.OpenSubKey(OptionKey, true))
{
oldFormat = (int)key.GetValue(OptionValue, -1);
key.SetValue(OptionValue, SaveFormatPptx, RegistryValueKind.DWord);
}
}
public void Dispose()
{
// Delete the value
using (RegistryKey key = Registry.CurrentUser.OpenSubKey(OptionKey, true))
{
if (oldFormat == -1)
{
key.DeleteValue(OptionValue);
}
else
{
key.SetValue(OptionValue, oldFormat);
}
}
}
}
Я использовал ppcnvcom.exe, но обратите внимание, что в отличие от значительного объема сообщений, которые я использовал только коммутатор -oice без переключателя -NME
Для VBA это работает:
Sub TestSaveas()
SaveAs "c:\somefilepath\"
End sub
Private Sub SaveAs(fp As String)
Dim dlgSaveAs As FileDialog
Dim strMyFile As String
Set dlgSaveAs = Application.FileDialog(msoFileDialogSaveAs)
With dlgSaveAs
.InitialFileName = fp
If .Show = -1 Then
strMyFile = .SelectedItems(1)
Application.ActivePresentation.SaveAs strMyFile
'MsgBox strMyFile
''-- save your file to strMyFile here
Else
MsgBox "File not saved"
End If
End With
dlgSaveAs.Execute
Set dlgSaveAs = Nothing
End Sub
Я знаю, что это старый вопрос, но я недавно посмотрел на проблему:
Presentation.SaveCopyAs "c:\temp\saveas\pupik.pptx"
вместо SaveAs
. Отказ Хорошо работает, независимо от того, оригинал находится в формате PPT- или PPTX.
(Я не мог получить метод изменения реестра, упомянутый для работы для меня, не открывая презентацию.)