c# - VSTO PowerPoint/Excel 交互

标签 c# .net excel vsto powerpoint

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

我该怎么做?我提取了数据 PowerPoint,但现在我该如何制作它 将数据发送到 Excel?我有哪些选择/可能性?

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

最佳答案

除了清理例程是错误的之外,这个示例基本上是正确的...

部分

// 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 对象被插入终结队列之前尝试终结 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 的任何实例替换为 BLANK(即“无空格”)

  3. get_range()替换为.Range()

  4. set_value()替换为.Value()

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

关于c# - VSTO PowerPoint/Excel 交互,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/969343/

相关文章:

c# - 如何通过 linq 查询使用索引从列表中检索值?

c# - 我如何告诉 Resharper 以不同方式设置这些字段属性的格式?

.net - 通过合并两个配置文件来创建 System.Configuration.Configuration?

java - 是否有与 .Net 中的 Predicate<T> 方法等效的 Java 1.5?

vba - Excel 根据列名称而不是单元格名称查找数据

c# - 区分事件 TAB 上的 F2 按键

c# - CS0121 调用泛型容器的索引器时方法调用不明确

c# - 组合多个表达式树

excel - 为什么在使用 For Each Next 循环之前不需要设置对象变量?

php excel reader - 忽略带有特殊符号的单元格