Asp.net 如何使用open xml将数据表单数据库绑定到powerpoint中的现有表

Asp.net 如何使用open xml将数据表单数据库绑定到powerpoint中的现有表,asp.net,openxml,openxml-sdk,presentationml,Asp.net,Openxml,Openxml Sdk,Presentationml,我使用openxml从一个web应用程序创建了一个powerpoint。我创建了一个带有图表的ppt,并在openxml sdk生产力工具中打开了ppt,我修改了来自数据库的图表数据生成的代码,我为其创建的代码将图表数据修改为 为sdk中的代码创建了一个类,在该类中,我添加了以下链接 ChartPart chartPart1 = slidePart1.AddNewPart<ChartPart>("rId3"); GenerateChartPart1Content(c

我使用openxml从一个web应用程序创建了一个powerpoint。我创建了一个带有图表的ppt,并在openxml sdk生产力工具中打开了ppt,我修改了来自数据库的图表数据生成的代码,我为其创建的代码将图表数据修改为

为sdk中的代码创建了一个类,在该类中,我添加了以下链接

 ChartPart chartPart1 = slidePart1.AddNewPart<ChartPart>("rId3");
        GenerateChartPart1Content(chartPart1);
       // This is below code added
        #if true    // Injects the chart part modification process
                    var chartModifier1 = new ChartPartModifier();
                    chartModifier1.UpdateSecondChartPart(chartPart1);
        #endif

        EmbeddedPackagePart embeddedPackagePart1 = chartPart1.AddNewPart<EmbeddedPackagePart>("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "rId2");
        GenerateEmbeddedPackagePart1Content(embeddedPackagePart1);
ChartPart chartPart1=slidePart1.AddNewPart(“rId3”);
GenerateChartPart1内容(图表Part1);
//这是下面添加的代码
#如果为true//则注入图表零件修改过程
var chartModifier1=新的ChartPartModifier();
chartModifier1.UpdateSecondChartPart(chartPart1);
#恩迪夫
EmbeddedPackagePart embeddedPackagePart1=chartPart1.AddNewPart(“application/vnd.openxmlformats of cedocument.spreadsheetml.sheet”,“rId2”);
GenerateEmbeddedPackagePart1内容(嵌入式PackagePart1);
并为ChartPartModifier()创建了一个类

public void UpdateSecondChartPart(ChartPart ChartPart)
{
//搜索SerieText及其值以用动态数据替换它们
var seriesLabels=chartPart.ChartSpace.subjects().ToList();
var seriesValues=chartPart.ChartSpace.subjects().ToList();
var categoryAxis=chartPart.ChartSpace.subjects().ToList();
对于(int i=0;i

像这样,是否有任何方法可以修改表中的数据,如果有,任何人都可以为我提供解决方案。非常感谢。

经过研究,我找到了答案,我能够使用openxml从数据库中更新表值

下面的代码(如果条件)添加在表追加行和graphicdata追加之间

table1.Append(tableProperties1);
        table1.Append(tableGrid1);
        table1.Append(tableRow1);
        table1.Append(tableRow2);
        table1.Append(tableRow3);
        table1.Append(tableRow4);
        table1.Append(tableRow5);
        table1.Append(tableRow6);
        table1.Append(tableRow7);

 #if true    // Injects the table modification process
        TableModifier tableModifier = new TableModifier();//Create a class
        tableModifier.UpdateTable(table1);//Send the table object of which you wanted to update
 #endif
        graphicData1.Append(table1);

        graphic1.Append(graphicData1);
在TableModifier类中

using DocumentFormat.OpenXml.Drawing;
using DocumentFormat.OpenXml.Packaging;

public class TableModifier
{
    public TableModifier()
    {
        this.SetupDataSource();
    }

    public void UpdateTable(Table table)
    {
        var rows = table.Descendants<TableRow>().ToList();

        for (int r = 0; r < rows.Count(); ++r)
        {
            var yourRow = this._rows[r];
            var cells = rows[r].Descendants<TableCell>().ToList();

            for (int c = 0; c < cells.Count(); ++c)
            {
                var yourCell = yourRow.Cells[c];
                var text = cells[c].Descendants<Text>().FirstOrDefault();
                if (text != null)
                {
                    text.Text = yourCell.Value;
                }
            }
        }
    }

    private void SetupDataSource()
    {
        this._rows.Add(new Row()
        {
            Cells = new List<Cell>()
            {
                new Cell(){ Value = "Products" },
                new Cell(){ Value = "2010" },
                new Cell(){ Value = "2011" },
                new Cell(){ Value = "2012" },
            }
        });

        for (int i = 0; i < 6; ++i)
        {
            var productName = string.Format("Product {0}", (char)(i + 'A'));

            this._rows.Add(new Row()
            {
                Cells = new List<Cell>()
                {
                    new Cell(){ Value = productName },
                    new Cell(){ Value = "10%" },
                    new Cell(){ Value = "20%" },
                    new Cell(){ Value = "30%" },
                }
            });
        }
    }

    #region Private Data Structure

    private class Row
    {
        public List<Cell> Cells { get; set; }
    }

    private class Cell
    {
        public string Value { get; set; }
    }

    #endregion

    private List<Row> _rows = new List<Row>();
}
使用DocumentFormat.OpenXml.Drawing;
使用DocumentFormat.OpenXml.Packaging;
公共类表修饰符
{
公共表修饰符()
{
这是SetupDataSource();
}
公共void UpdateTable(表)
{
var rows=table.subjects().ToList();
对于(int r=0;r
您是否愿意分享从web应用程序创建带图表的PowerPoint的代码。我真的很想看看这个?当然,你能给我发送你的邮件id吗?我可以给你发送代码。嗨,迪内什,我需要在PPTX报告中以表格格式添加数据集中的数据。我有一个模板,其中有4个占位符,需要填充4个不同的数据表。目前,我正在使用该模板创建新幻灯片,并替换文本的占位符,但我无法理解表格。你能告诉我吗。谢谢
using DocumentFormat.OpenXml.Drawing;
using DocumentFormat.OpenXml.Packaging;

public class TableModifier
{
    public TableModifier()
    {
        this.SetupDataSource();
    }

    public void UpdateTable(Table table)
    {
        var rows = table.Descendants<TableRow>().ToList();

        for (int r = 0; r < rows.Count(); ++r)
        {
            var yourRow = this._rows[r];
            var cells = rows[r].Descendants<TableCell>().ToList();

            for (int c = 0; c < cells.Count(); ++c)
            {
                var yourCell = yourRow.Cells[c];
                var text = cells[c].Descendants<Text>().FirstOrDefault();
                if (text != null)
                {
                    text.Text = yourCell.Value;
                }
            }
        }
    }

    private void SetupDataSource()
    {
        this._rows.Add(new Row()
        {
            Cells = new List<Cell>()
            {
                new Cell(){ Value = "Products" },
                new Cell(){ Value = "2010" },
                new Cell(){ Value = "2011" },
                new Cell(){ Value = "2012" },
            }
        });

        for (int i = 0; i < 6; ++i)
        {
            var productName = string.Format("Product {0}", (char)(i + 'A'));

            this._rows.Add(new Row()
            {
                Cells = new List<Cell>()
                {
                    new Cell(){ Value = productName },
                    new Cell(){ Value = "10%" },
                    new Cell(){ Value = "20%" },
                    new Cell(){ Value = "30%" },
                }
            });
        }
    }

    #region Private Data Structure

    private class Row
    {
        public List<Cell> Cells { get; set; }
    }

    private class Cell
    {
        public string Value { get; set; }
    }

    #endregion

    private List<Row> _rows = new List<Row>();
}