2009-06-09 9 views
1

Ich möchte Daten aus PowerPoint-Folien extrahieren und dann in Excel-Arbeitsmappe einfügen, wo jede Folie in PowerPoint einem Blatt in Excel-Arbeitsmappe und umgekehrt (von Excel zu PowerPoint) entspricht.VSTO PowerPoint/Excel Interaktion

Wie mache ich das? Ich extrahierte die Daten PowerPoint aber jetzt, wie mache ich es senden an Daten nach Excel? Welche Möglichkeiten habe ich?

Ich benutze VSTO mit C#, bitte sagen Sie mir Lösungen sowohl für Büro 2003/2007

Antwort

3

er Manzoor,

Ihre Frage ist ein wenig offen zu Ende, und ich bin nicht wirklich sicher, welche Art von PowerPoint-Werten, die Sie versuchen, in Excel zu platzieren, aber Sie könnten sicherlich Excel-Automatisierung verwenden, um Ihr Ziel zu erreichen. Zum Beispiel so etwas wie dieses:

void AutomateExcelExample() 
{ 
    Excel.Application excelApp = new Excel.Application(); 
    excelApp.Visible = true; 

    Excel.Workbook workbook = excelApp.Workbooks.Add(Type.Missing); 
    Excel.Worksheet worksheet = (Excel.Worksheet)workbook.Worksheets[1]; 
    Excel.Range range = worksheet.get_Range("A1", Type.Missing); 

    range.set_Value(Type.Missing, "Hello World"); 

    MessageBox.Show("Intentional pause so you can see the result."); 

    // Cleanup: 
    GC.Collect(); 
    GC.WaitForPendingFinalizers(); 

    Marshal.FinalReleaseComObject(range); 
    Marshal.FinalReleaseComObject(worksheet); 

    workbook.Close(false, Type.Missing, Type.Missing); 
    Marshal.FinalReleaseComObject(workbook); 

    excelApp.Quit(); 
    Marshal.FinalReleaseComObject(excelApp); 
} 

Im Beispiel oben, öffnet sich der Code eine neue Excel-Anwendungsinstanz, macht die Anwendung sichtbar ist (die Sie wahrscheinlich nicht tun wollen, aber kann nützlich sein, wenn bei der Prüfung), öffnet eine neue Arbeitsmappe und weist dann der Zelle A1 des ersten Arbeitsblatts in der Arbeitsmappe den Zeichenfolge-Wert "Hello World" zu.

Ich weiß nicht, welche Art von Powerpoint-Daten, die Sie abrufen, sondern eine Zelle Excel können die meisten Standardwerttypen handhaben wie string, double, Bool, Datetime usw.

Diese Lösung wird sowohl die Arbeit mit oder ohne VSTO, und funktioniert für Excel-Versionen 2007 und höher sowie für Excel-Versionen 2003 und darunter.

Hilft Ihnen diese Hilfe?

Mike

4

Diese Probe hauptsächlich mit Ausnahme der Bereinigungsroutine korrekt ist, die falsch ist ...

Der Teil

// Cleanup:  
GC.Collect();  
GC.WaitForPendingFinalizers(); 

Bedürfnisse an das Ende dieses Verfahrens wie so bewegt werden, ..

Marshal.FinalReleaseComObject(range);  
Marshal.FinalReleaseComObject(worksheet);  
workbook.Close(false, Type.Missing, Type.Missing);  
Marshal.FinalReleaseComObject(workbook);  
excelApp.Quit();  
Marshal.FinalReleaseComObject(excelApp); 

// move deterministic call to garbage collector to AFTER release 
// of all COM objects. 
GC.Collect();  
GC.WaitForPendingFinalizers(); 

GC.Collect(); 

Dies ist, weil es keinen Sinn gibt, die endgültige zu versuchen Warteschlange von COM-Objekten, bevor die meisten dieser Objekte sogar in die Finalisierungswarteschlange geschoben wurden. Ebenso wird das vorläufige Aufrufen von GC.Collect nur zu einer zusätzlichen Durchquerung der Objekte im Speicher führen, die sich negativ auf die Leistung auswirken und nicht garantieren, dass Objekte bereinigt werden.

Auch ein weiteres Problem mit diesem Beispiel, warum verwenden Sie Set_Value und get_Range Methoden? das scheint unnötig zu sein.

In Bezug auf die Frage, ich denke, Sie müssen einige foreach Anweisungen hinzufügen, um die Folien im Präsentationsobjekt durchlaufen, und sobald Sie die gewünschten Daten von jedem gesammelt haben, fügen Sie eine neue Folie im Rahmen von die aktuelle Folieniteration.

heißt

foreach slide in Presentation.Slides() 
{ 
    string data = getData(slide); 
    Excel.WorkSheet worksheet = workbook.Sheets.Add(Type.Missing); 
    worksheet.Range("A1").Value = data; 
} 
// you will need to write the getData method yourself... 

VB.NET Seite Frage ... Für die Person über VB.Net Probe der obigen fragen ...

  1. Entfernen Sie die Semikolons.

  2. Ersetzen Sie alle Instanzen von Type.Missing mit BLANK (dh "keinen Platz")

  3. ersetzen get_range() mit .Range()

  4. set_value() Ersetzen mit .Value()

  5. hinzufügen Imports Excel = Microsoft.Office.Interop.Excel Anweisung an die Spitze deiner Klasse.
+0

hey danke! bin dankbar! – Justin

+0

kein Problem, nächstes Mal geben Sie eine Verbesserung, wenn es Ihnen hilft oder Sie es sachlich richtig finden. –