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

È stato utile?

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.)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top