Программно сохранить как PowerPoint 2007 (PPTX), от PowerPoint 2003

StackOverflow https://stackoverflow.com/questions/3145396

Вопрос

Мне нужно иметь возможность сэкономить презентации (программно) в 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.

(Я не мог получить метод изменения реестра, упомянутый для работы для меня, не открывая презентацию.)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top