我想从PowerPoint幻灯片中提取数据,然后将它们粘贴到Excel工作簿中,其中PowerPoint中的每张幻灯片都对应于Excel工作簿中的一个工作表,反之亦然(从Excel到PowerPoint)。
我该怎么做呢?我提取了数据PowerPoint,但现在如何使其发送到数据到Excel?我有什么选择/可能性?
我正在使用VSTO和C#,请告诉我Office2003/2007的解决方案
发布于 2009-06-12 16:22:51
他是曼祖尔
你的问题有点开放式,我不太确定你想把什么样的Excel值放入PowerPoint中,但你肯定可以使用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单元格可以处理大多数标准值类型,如字符串、双精度、布尔值、DateTime等。
此解决方案可以使用VSTO,也可以不使用VSTO,并且适用于Excel版本2007和更高版本以及Excel版本2003和更低版本。
这对你入门有帮助吗?
麦克
发布于 2009-07-28 15:20:14
这个样本基本上是正确的,除了清理例程是错误的…
那部分
// 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示例的人...
删除带有空白的semi-colons.
.Range()
get_range()
.Value()
Imports Excel = Microsoft.Office.Interop.Excel
get_range()
to the top of your class。https://stackoverflow.com/questions/969343
复制