Programmatically enregistrer en tant que PowerPoint 2007 (.pptx), à partir de PowerPoint 2003

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

Question

Je dois être en mesure d'enregistrer des présentations (programatically) dans PowerPoint 2003 OpenXML ( ".pptx"). J'ai installé le pack de compatibilité Microsoft Office. Cela me permet en effet d'effectuer « Enregistrer sous PowerPoint 2007 » à partir de PowerPoint 2003.

Comment puis-je faire programme? (Par exemple VBA)

J'ai essayé Presentation.SaveAs: Bien qu'il n'y ait pas PpSaveAsFileType valeur intrinsèque ENUM dans PowerPoint 2003 pour ppSaveAsOpenXMLPresentation, j'ai fait un programme qui imprime les valeurs PpSaveAsFileType et a découvert que lors de l'exécution, ppSaveAsOpenXMLPresentation = 24.

Cependant, j'ai essayé: SaveAs(@"c:\temp\saveas\pupik.pptx", (PpSaveAsFileType) ((int) 24), MsoTriState.msoTrue);

Et a obtenu une exception "non valide Enumération Valeur"

Toutes les idées comment faire ce travail?

(PS -. Je sais que cette question a déjà été posée par plusieurs personnes sur le web, mais aucune solution n'a été proposée)

Merci, Arie

Était-ce utile?

La solution

Edition> la grammaire

AFAIK le format pptx ne prend pas en charge les présentations macro-activé, donc si votre code est dans la présentation que vous essayez d'enregistrer, il ne fonctionnera pas.

Je n'ai pas Excel 2003 à portée de main maintenant, mais si le pack de compatibilité activé l'option « pptx » dans la boîte de dialogue Configuration, enregistrement par défaut Format, et que vous essayez de sauver Une autre présentation Je suppose que vous pouvez, si vous utilisez quelque chose comme:

 MyOtherPresentation.SaveAs "C:\Mypres", ppSaveAsDefault

S'il vous plaît noter que cela peut fonctionner que si la présentation n'a pas encore été enregistré au format ppt

EDIT

Si cette procédure ne fonctionne pas, vous pouvez essayer une approche différente. Enregistrez le fichier dans l'ancien format et l'appel d'un programme de conversion:

ppcnvcom.exe   Voir ici pour un exemple (en utilisant wordconv.exe, mais essentiellement les mêmes)
  Assurez-vous d'avoir toutes les mises à jour de bureaux installés, parce que sinon la fin du programme   ne signalent aucune erreur et ne rien faire.

ofc   Voir pour les instructions
  Et pour bonne discussion

HTH!

Autres conseils

Une astuce consiste à modifier le format d'enregistrement par défaut de l'application dans le Registre, puis enregistrez et enfin pour restaurer l'original format d'enregistrement à nouveau.

La touche correspondante est

Software\Microsoft\Office\11.0\PowerPoint\Options

Créez une valeur DWORD avec le nom DefaultFormat et mis à 0x21 pour enregistrer en tant que 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);
            }
        }
    }       
}

J'utilisé ppcnvcom.exe mais note que, contrairement à une quantité considérable de messages que je l'interrupteur -oice sans le commutateur -NMe

Pour VBA fonctionne ce:

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

Je sais que c'est une vieille question, mais je me suis autour du problème en utilisant récemment:

Presentation.SaveCopyAs "c:\temp\saveas\pupik.pptx"

au lieu de SaveAs. Fonctionne bien, quelle que soit wether l'original est en ppt- ou pptx format.

(je ne pouvais pas obtenir la méthode de changement de registre mentionné à travailler pour moi sans rouvrir la présentation.)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top