1

私は C# と PowerPoint で苦労しています。リンクが手動に設定されている場合に C# を使用して ppt のリンクを更新する方法について以前に投稿しましたが、応答がなかったため、リンクを設定して問題を回避しようと考えました。ファイルを自動に変更し、C# でファイルを開くと、ファイルが更新され、ファイルが保存され、分割されて別のファイル名で保存されますが、これほど簡単であるとは証明されていません。

私が知る必要があるのは、リンクを解除する方法だけです。私はいくつかの VBA を知っており、それらを壊すコードを書きましたが、RunMacro メソッドを使用して C# でマクロを呼び出すと、使用しているメソッドで動作していないようです (? - C# は初めてなので、これがなぜなのか完全には理解できませんが、Google で「マクロ PowerPoint C# を実行する」と検索すると、私が実際に実行しようとした方法がわかるはずです。

私のスクリプトは次のようになります

Using PowerPoint = Microsoft.Office.Interop.PowerPoint;

public void Main()
    {

        PowerPoint.Application ppt = new PowerPoint.Application();
        PowerPoint.Presentation PRS = ppt.Presentations.Open(@"Filename.pptm",
        Microsoft.Office.Core.MsoTriState.msoFalse, Microsoft.Office.Core.MsoTriState.msoFalse, Microsoft.Office.Core.MsoTriState.msoTrue);


        PRS.UpdateLinks();
        PRS.Save
        //here is where I need to break the links
        PRS.SaveAs(@"filename with links broken.pptm", 
            Microsoft.Office.Interop.PowerPoint.PpSaveAsFileType.ppSaveAsOpenXMLPresentationMacroEnabled, MsoTriState.msoTrue);
        PRS.Close(); 
       ppt.Quit();
}

ファイルを開く前に linkformat を manual に設定しようとしましたが、既に作成されている図形には影響せず、後でプログラム内で作成された新しい図形にのみ影響します。

4

2 に答える 2

2

リンクを解除することも含む、Powerpoint で同様のプロジェクトを実行しました。私のプログラムでは、Excel ファイルから読み取り、このデータを取得して Powerpoint プレゼンテーションに入れています。私の Powerpoint テンプレート ファイルには、Excel ファイルへのすべてのリンクがレイアウトされ、希望どおりに書式設定されています。プログラムの実行が開始され、Excel ファイルがいっぱいになります。Excel への書き込みが完了したら、Powerpoint と UpdateLinks() をプレゼンテーションに開きます。リンクが更新されたら、Powerpoint の図形で for ループを使用してリンクを解除します。その後、ドキュメントを保存して閉じます。以下は、各 ppt ファイル テンプレートに基づいて Powerpoint ファイルを作成するために使用する関数です (この例では、各 ppt ファイルにはスライドが 1 つしか含まれていないため、複数の ppt ファイルを反復処理します。

public void CreatePowerpoint()
    {
        string[] fileArray = Directory.GetFiles(@"C:\Users\Me\Desktop\test");
        Microsoft.Office.Interop.PowerPoint.Application pptApp = new Microsoft.Office.Interop.PowerPoint.Application();
        for (int i = 0; i < fileArray.Length; i++)
        {
            string file = fileArray[i];

            Microsoft.Office.Interop.PowerPoint.Presentation powerpoint = pptApp.Presentations.Open(file);
            powerpoint.UpdateLinks();

            Microsoft.Office.Interop.PowerPoint.Slides slides = powerpoint.Slides;
            Microsoft.Office.Interop.PowerPoint.Slide slide = slides[1];
            Microsoft.Office.Interop.PowerPoint.Shapes pptShapes = (Microsoft.Office.Interop.PowerPoint.Shapes)slide.Shapes;

            foreach (Microsoft.Office.Interop.PowerPoint.Shape y in pptShapes)
            {
                Microsoft.Office.Interop.PowerPoint.Shape j = (Microsoft.Office.Interop.PowerPoint.Shape)y;
                try
                {
                    //If auto link update is disabled for links
                    //j.LinkFormat.j.Update();
                    if (j.LinkFormat != null)
                    {
                        j.LinkFormat.BreakLink();
                    }
                }
                catch (Exception)
                {

                }
            }

            powerpoint.SaveAs(@"C:\Users\Me\Desktop\test" + i + ".pptx");
            powerpoint.Close();
            Thread.Sleep(3000);
        }
        pptApp.Quit();
    }
于 2015-03-06T20:41:21.570 に答える
-1

もちろん、ファイルを開く前に変更しても、開いていないファイルには影響しません。各スライドおよび各図形の図形コレクションを反復処理します。

If .Type = msoLinkedOLEObject Then
    .LinkFormat.BreakLink
End If

msoLinkedOLEObject = 10

于 2012-12-12T02:21:22.487 に答える