Livello di programmazione salvare come PowerPoint 2007 (pptx), da PowerPoint 2003
-
01-10-2019 - |
Domanda
ho bisogno di essere in grado di salvare le presentazioni (programatically) in PowerPoint 2003 come OpenXML ( ".pptx"). Ho installato il Microsoft Office Compatibility Pack. Questo permette infatti me per eseguire "Salva come PowerPoint 2007 Presentazione" da PowerPoint 2003.
Come posso fare questo a livello di codice? (Ad esempio VBA)
ho provato Presentation.SaveAs
:
Mentre non v'è alcun valore intrinseco enum PpSaveAsFileType
in PowerPoint 2003 per ppSaveAsOpenXMLPresentation
, ho fatto un programma che stampa i valori PpSaveAsFileType
e ho scoperto che durante la fase di esecuzione, ppSaveAsOpenXMLPresentation = 24
.
Tuttavia, ho provato:
SaveAs(@"c:\temp\saveas\pupik.pptx", (PpSaveAsFileType) ((int) 24), MsoTriState.msoTrue);
E ottenuto un eccezione "non valido Enumeration Valore"
Tutte le idee su come fare questo lavoro?
(PS -. Sono consapevole che la questione è stata già chiesto da più persone sul web, ma nessuna soluzione è stata offerta)
Grazie, Arie
Soluzione
Modifica> Alcuni grammatica
Per quanto ne sappia il formato PPTX non supporta presentazioni con attivazione macro, quindi se il vostro codice è nella presentazione che si sta tentando di salvare, non funzionerà.
Non ho Excel 2003 a portata di mano ora, ma se il pacchetto di compatibilità abilitata l'opzione "pptx" nella finestra di configurazione, formato di salvataggio predefinito, e si sta tentando di salvare un'altra presentazione Credo che si può, se si usa qualcosa come:
MyOtherPresentation.SaveAs "C:\Mypres", ppSaveAsDefault
Si noti che questo può funzionare solo se la presentazione non era stato salvato prima in formato ppt
Modifica
Se quanto sopra non funziona, si potrebbe provare un approccio diverso. Salvare il file nel vecchio formato e la chiamata di un programma di conversione:
ppcnvcom.exe
Vedere qui per un esempio (utilizzando wordconv.exe, ma essenzialmente la stessa)
Siate sicuri di avere tutti gli aggiornamenti di Office installati, perché se non le estremità del programma
segnalazione nessun errore e non fare nulla.
ofc
Vedere qui per le istruzioni
E qui per un buona discussione
HTH!
Altri suggerimenti
Un trucco è quello di modificare il formato di salvataggio predefinito dell'applicazione nel Registro di sistema, quindi salvare e, infine, per ripristinare l'originale formato di salvataggio di nuovo.
La chiave pertinente è
Software\Microsoft\Office\11.0\PowerPoint\Options
creare un valore DWORD
con il nome DefaultFormat
e impostarlo su 0x21 per salvare come 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);
}
}
}
}
Ho usato ppcnvcom.exe ma nota che a differenza di una notevole quantità di messaggi che ho usato solo l'interruttore -oice senza l'opzione -nme
Per VBA funziona questo:
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
So che questa è una vecchia questione, ma ho avuto tutto il problema di recente utilizzando:
Presentation.SaveCopyAs "c:\temp\saveas\pupik.pptx"
al posto di SaveAs
. Funziona bene, a prescindere che scendessimo l'originale è in ppt- o pptx formato.
(non ho potuto ottenere il metodo Registro cambiamento menzionato al lavoro per me senza riaprire la presentazione.)