我想从PowerPoint幻灯片中提取数据,然后将其粘贴到 Excel工作簿,其中PowerPoint中的每个幻灯片对应于一个工作表 Excel工作簿,反之亦然(从Excel到PowerPoint)。
我该怎么做?我提取了数据PowerPoint,但现在我如何制作它 发送到Excel的数据?我有哪些选择/可能性?
我在V#中使用VSTO,请告诉我Office 2003/2007的解决方案
答案 0 :(得分:4)
这个样本主要是正确的,除了清理程序错误...
部分
// 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样本的人......
删除分号。
将任何Type.Missing实例替换为BLANK(即“无空格”)
将get_range()
替换为.Range()
将set_value()
替换为.Value()
Imports Excel = Microsoft.Office.Interop.Excel
语句。答案 1 :(得分:3)
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,也可以不使用VSTO,适用于Excel 2007及以上版本以及Excel 2003及以下版本。
这有助于您入门吗?
麦克