Programmatically enregistrer en tant que PowerPoint 2007 (.pptx), à partir de PowerPoint 2003
-
01-10-2019 - |
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
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.)