我想從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