1

PowerPoint スライドからデータを抽出し、それらを Excel ワークブックに貼り付けたいと考えています。ここで、PowerPoint の各スライドは Excel ワークブックのシートに対応し、その逆 (Excel から PowerPoint へ) も同様です。

どうすればいいですか?データ PowerPoint を抽出しましたが、データを Excel に送信するにはどうすればよいですか? どのようなオプション/可能性がありますか?

C# で VSTO を使用しています。Office 2003/2007 の両方のソリューションを教えてください。

4

2 に答える 2

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 を呼び出すと、メモリ内のオブジェクトの余分なトラバーサルが発生するだけで、パフォーマンスに悪影響を及ぼし、オブジェクトがクリーンアップされる保証はありません。

このサンプルのもう 1 つの問題は、なぜ 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サンプルについて質問する人のために...

  1. セミコロンを削除します。

  2. Type.Missing のすべてのインスタンスを BLANK に置き換えます (つまり、「スペースなし」)。

  3. get_range()と置き換えます.Range()

  4. set_value()と置き換えます.Value()

  5. Imports Excel = Microsoft.Office.Interop.Excelクラスの先頭にステートメントを追加します。
于 2009-07-28T23:20:13.610 に答える
3

彼マンズール、

あなたの質問は少しオープンエンドであり、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 セルは、string、double、bool、DateTime などのほとんどの標準的な値の型を処理できます。

このソリューションは、VSTO の有無にかかわらず機能し、Excel バージョン 2007 以降および Excel バージョン 2003 以下で機能します。

これは始めるのに役立ちますか?

マイク

于 2009-06-13T00:22:50.937 に答える