VSTO PowerPoint / Excel交互

我想从PowerPoint幻灯片中提取数据,然后将其粘贴到Excel工作簿中,其中PowerPoint中的每个幻灯片对应于Excel工作簿中的工作表,反之亦然(从Excel到PowerPoint)。

我该怎么做呢? 我提取了数据PowerPoint,但现在如何使它发送到Excel的数据? 我有什么select/可能性?

我在C#中使用VSTO,请告诉我Office 2003/2007的解决scheme

他Manzoor,

你的问题是一个开放的结局,我不确定你试图把什么样的PowerPoint值放入Excel中,但你当然可以使用Excel自动化来实现你的目标。 例如,像这样的东西:

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应用程序实例,使应用程序可见(您可能不希望这样做,但在testing时可能会有用),打开一个新工作簿,然后将string值“Hello World “放入工作簿中第一个工作表的单元格A1中。

我不知道您正在检索什么样的PowerPoint数据,但Excel单元格可以处理大多数标准值types,如string,double,bool,DateTime等。

这个解决scheme可以在有或没有VSTO的情况下工作,并且可以用于Excel版本2007及更高版本,以及Excel版本2003和更低版本。

这有助于你开始吗?

麦克风

这个例子主要是正确的,除了清理程序是错误的…

那个部分

 // 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. 用BLANKreplaceType.Missing的任何实例(即“无空格”)

  3. get_range()replace.Range()

  4. .Value()replaceset_value() .Value()

  5. 将一个Imports Excel = Microsoft.Office.Interop.Excel语句添加到您的类的顶部。