我想从PowerPoint幻灯片中提取数据,然后将它们粘贴到 Excel工作簿中,其中PowerPoint中的每张幻灯片对应于 Excel工作簿中的工作簿,反之亦然(从Excel到PowerPoint)。VSTO PowerPoint/Excel Interaction
我该怎么做?我提取了数据PowerPoint,但现在如何使它发送到Excel的数据 ?我有什么选择/可能性?
我使用VSTO用C#,请告诉我的解决方案为Office 2003/2007
我想从PowerPoint幻灯片中提取数据,然后将它们粘贴到 Excel工作簿中,其中PowerPoint中的每张幻灯片对应于 Excel工作簿中的工作簿,反之亦然(从Excel到PowerPoint)。VSTO PowerPoint/Excel Interaction
我该怎么做?我提取了数据PowerPoint,但现在如何使它发送到Excel的数据 ?我有什么选择/可能性?
我使用VSTO用C#,请告诉我的解决方案为Office 2003/2007
他曼苏尔,
你的问题是有点开放式的,我真的不知道什么样的您尝试将其放入Excel中的PowerPoint值,但您肯定可以使用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应用程序实例,使应用程序可见(你可能不希望这样做,但在测试的时候会很有用),打开一个新的工作簿,然后将字符串值“Hello World”分配到工作簿中第一个工作表的单元格A1中。
我不知道你在PowerPoint中检索数据的种类,但Excel单元格可以处理大多数的标准值类型,如字符串,双,布尔,日期时间等
该解决方案将与两个或者没有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样品的人...
删除分号。
空白替换Type.Missing的任何实例(即 “没有空间”)
更换get_range()
与.Range()
更换set_value()
与.Value()
Imports Excel = Microsoft.Office.Interop.Excel
声明顶端你的班级。
嘿谢谢!欣赏它! – Justin 2009-07-29 19:26:30