1

ソースである1つのチャートを含むExcelシートがあります。私の目標は、3 枚のスライドを含むパワーポイント プレゼンテーションです。スライド #3 を Excel ファイルのチャートで更新する必要があります。

アプリケーションを実行した後、pptx ファイルを開こうとすると、「Powerpoint でコンテンツに問題が見つかりました」というメッセージが表示されます。修復した後、正しいスライドを更新していないことを示すスライド #2 に常に空白のスライドが表示されることに気付きました。

スライド番号に基づいてスライドに移動するにはどうすればよいですか。(パワーポイント スライドと Excel チャートにチャート タイトルがありません) また、無効なコンテンツ エラーが発生するのはなぜですか。

大変お世話になりました。ありがとう

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using OpenXmlPkg = DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Presentation;
using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Spreadsheet;

namespace ExportChart
{
class Program
{
    static void Main(string[] args)
    {
        string SourceFile = "Projected Sales.xlsx";
        string TargetFile = "Projected Sales.pptx";
        string targetppt = "Generatedppt.pptx";

        ChartPart chartPart;
        ChartPart newChartPart;
        SlidePart slidepartbkMark = null;
        string chartPartIdBookMark = null;

        File.Copy(TargetFile, targetppt, true);

        //Powerpoint document 
        using (OpenXmlPkg.PresentationDocument pptPackage = OpenXmlPkg.PresentationDocument.Open(targetppt, true))
        {

            OpenXmlPkg.PresentationPart presentationPart = pptPackage.PresentationPart;

            var secondSlidePart = pptPackage.PresentationPart.SlideParts.Skip(1).Take(1);
            foreach (var slidepart in pptPackage.PresentationPart.SlideParts)
            {

            slidepartbkMark = slidepart;

                if (slidepart.GetPartsCountOfType<ChartPart>() != 0)
                {
                    chartPart = slidepart.ChartParts.First();
                    chartPartIdBookMark = slidepart.GetIdOfPart(chartPart);
                    slidepart.DeletePart(chartPart);
                    slidepart.Slide.Save();
                }

                //return;
            }

            newChartPart = slidepartbkMark.AddNewPart<ChartPart>(chartPartIdBookMark);

            ChartPart saveXlsChart = null;
            using (SpreadsheetDocument xlsDocument = SpreadsheetDocument.Open(SourceFile.ToString(), true))
            {
                WorkbookPart xlsbookpart = xlsDocument.WorkbookPart;

                foreach (var worksheetPart in xlsDocument.WorkbookPart.WorksheetParts)
                {
                    if (worksheetPart.DrawingsPart != null)
                        if (worksheetPart.DrawingsPart.ChartParts.Any())
                        {
                            saveXlsChart = worksheetPart.DrawingsPart.ChartParts.First();
                        }
                }


                newChartPart.FeedData(saveXlsChart.GetStream());
                slidepartbkMark.Slide.Save();
                xlsDocument.Close();
                pptPackage.Close();
            }
        }
    }
}     

}

4

1 に答える 1

2

スライド番号でスライドを識別する方法を探している人がいる場合は、次のことを行う必要があります

//Get the relationship id 
SlideIdList s = documentPart.Presentation.SlideIdList;
SlideId nslideid = (SlideId)s.ElementAt(slideno-1); //slide no is the number of the slide
string slidRelId = nslideid.RelationshipId;

次に、ループを使用して各スライドを繰り返します。foreach ループ内に次のコードを追加して、スライドに特定の関係 ID があるかどうかを確認します。

//  get the relationshipid of the current slide 
    string thisSlideno = documentPart.GetIdOfPart(slidePart);
    if (thisSlideno == slidRelId)
    {
        //do your actions
    }

これが役立つことを願っています

于 2012-04-30T12:46:09.027 に答える