我想从 PowerPoint 幻灯片中提取数据,然后将它们粘贴到 Excel 工作簿中,其中 PowerPoint 中的每张幻灯片对应于 Excel 工作簿中的一个工作表,反之亦然(从 Excel 到 PowerPoint)。
我该怎么做呢?我提取了 PowerPoint 中的数据,但现在如何将其发送到 Excel 中?我有什么选择/可能性?
我正在使用带有 C# 的 VSTO,请告诉我 Office 2003/2007 的解决方案
我想从 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 语句来循环演示对象中的幻灯片,一旦您从每个幻灯片中收集了所需的数据,在当前幻灯片迭代的范围内添加一张新幻灯片.
IE
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 示例的人...
删除分号。
用 BLANK 替换任何 Type.Missing 实例(即“无空格”)
替换get_range()
为.Range()
替换set_value()
为.Value()
Imports Excel = Microsoft.Office.Interop.Excel
在班级顶部添加一个声明。他曼祖尔,
您的问题有点开放式,我不确定您尝试将哪种 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 应用程序实例,使应用程序可见(您可能不想这样做,但在测试时很有用),打开一个新工作簿,然后分配字符串值“Hello World " 到工作簿中第一个工作表的单元格 A1 中。
我不知道您要检索哪种 PowerPoint 数据,但 Excel 单元格可以处理大多数标准值类型,例如字符串、双精度、布尔值、日期时间等。
此解决方案在有或没有 VSTO 的情况下都适用,并且适用于 Excel 版本 2007 及更高版本以及 Excel 版本 2003 及更低版本。
这有助于您入门吗?
麦克风