0

グラフ (棒グラフ) を含む Excel ファイルが 1 つあります。3 つのスライドを含む PowerPoint プレゼンテーションもあります。エクセルシートにもパワーポイントのスライドにも「表題」はありませんのでご注意ください。スライド 2 のグラフを Excel ファイルのグラフで更新する必要があります。

このフォーラムを検索したところ、タイトルを使用して新しいスライドを作成したり、チャートを更新したりする方法が見つかりました。

どんな助けでも大歓迎です。御時間ありがとうございます

編集:あなたの解決策は良いですが、特定のスライドのグラフを置き換える方法については役に立ちません。私の質問では、3 つのスライドがあると述べました。具体的には、スライド 2 のグラフを更新したいと考えています。グラフのタイトルがないため、スライド番号に基づいて置き換えるグラフを見つける必要があります。これはどのように行われますか?再度、感謝します。

4

1 に答える 1

1

これは、次の手順に従って実行できます: (注: パワーポイントがターゲットで、エクセルがソースです)

  1. ターゲットを開き、置換する ChartPart を見つけます。ChartPart がある親 SlidePart への参照を保持し、ChartPart の RelationshipId を SlidePart にコピーしてから、ChartPart をターゲットから削除します。
  2. ソースを保存し、ファイルを開いたままにします。

            foreach (var slidePart in targetPPT.PresentationPart.SlideParts)
            {
                if (slidePart.ChartParts.Any())
                {
                    slidePartBookMark = slidePart;
    
                    var chartPart = slidePart.ChartParts.First();
                    chartPartIdBookMark = slidePart.GetIdOfPart(chartPart);
                    slidePart.DeletePart(chartPart);
                    slidePart.Slide.Save();
                    return;
                }
            }
    
  3. ソースを開き、ターゲットにコピーする ChartPart を見つけます。ソースのどこかにある WorksheetPart の DrawingsPart になります。ChartPart への参照を保持し、ファイルを開いたままにします。

            foreach (var worksheetPart in sourceXls.WorkbookPart.WorksheetParts)
            {
                if (worksheetPart.DrawingsPart != null)
                    if (worksheetPart.DrawingsPart.ChartParts.Any())
                    {
                        saveXlsChart = worksheetPart.DrawingsPart.ChartParts.First();
                        return;
                    }
    
            }
    
  4. 手順 1 の SlidePart 参照で、RelationshipId を使用して AddNewPart 呼び出しで新しい ChartPart を作成します。

        var newChartPart = slidePartBookMark.AddNewPart<ChartPart>(chartPartIdBookMark);
    
  5. ここにある FeedData/GetStream アイデアを使用して、手順 4 で作成した新しい chartpart にソース チャートのコンテンツをコピーします。スライドを保存し、ファイルを閉じます。

        newChartPart.FeedData(saveXlsChart.GetStream());
        slidePartBookMark.Slide.Save();
        sourceXls.Close();
        targetPPT.Close();
    

それぞれ 1 つのグラフのみを含む単純なソース/ターゲットで動作させることができました。ファイルがより複雑な場合、検索ロジックは First() 以上になります。

お役に立てれば。

于 2012-04-22T22:11:34.933 に答える