ВСТО PowerPoint / Excel Взаимодействие - PullRequest
1 голос
/ 09 июня 2009

Я хочу извлечь данные из слайдов PowerPoint, а затем вставить их в Книга Excel, где каждый слайд в PowerPoint соответствует листу в Книга Excel и наоборот (из Excel в PowerPoint).

Как мне это сделать? Я извлек данные PowerPoint, но теперь, как мне это сделать отправить данные в Excel? Какие варианты / возможности у меня есть?

Я использую VSTO с C #, скажите, пожалуйста, решения для Office 2003/2007

Ответы [ 2 ]

4 голосов
/ 29 июля 2009

Этот образец в основном правильный, за исключением процедуры очистки, которая неправильна ...

часть

// 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);

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

GC.Collect();

Это связано с тем, что нет смысла пытаться завершить очередь объектов COM до того, как большинство этих объектов будут помещены в очередь завершения. Аналогичным образом упреждающий вызов GC.Collect просто вызовет дополнительный обход объектов в памяти, что окажет негативное влияние на производительность и не будет гарантировать очистку объектов.

Также другая проблема с этим примером, почему вы используете методы Set_Value и get_Range? это кажется ненужным.

С точки зрения вопроса, я думаю, вам нужно будет добавить некоторые операторы foreach для циклического перемещения по слайдам в объекте презентации, и как только вы соберете нужные данные, добавьте новый слайд в область действия. текущая итерация слайда.

т.е.

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 ... Для человека, спрашивающего о VB.Net образец выше ...

  1. Удалить точку с запятой.

  2. Заменить все экземпляры Type.Missing на ПУСТО (то есть "без пробелов")

  3. Заменить get_range() на .Range()

  4. Заменить set_value() на .Value()

  5. Добавьте оператор Imports Excel = Microsoft.Office.Interop.Excel в начало вашего класса.
3 голосов
/ 13 июня 2009

Him Manzoor,

Ваш вопрос немного открытый, и я не совсем уверен, какие значения PowerPoint вы пытаетесь поместить в Excel, но вы наверняка могли бы использовать Excel Automation для достижения своей цели. Например, что-то вроде этого:

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);
}

В приведенном выше примере код открывает новый экземпляр приложения Excel, делает приложение видимым (что, вероятно, вам не нужно делать, но может быть полезно при тестировании), открывает новую книгу и затем присваивает строковое значение «Hello World» в ячейку A1 первого листа в книге.

Я не знаю, какие данные PowerPoint вы извлекаете, но ячейка Excel может обрабатывать большинство стандартных типов значений, таких как string, double, bool, DateTime и т. Д.

Это решение будет работать как с VSTO, так и без него, и будет работать в версиях Excel 2007 и выше, а также в версиях Excel 2003 и ниже.

Помогает ли это вам начать?

Mike

...