2

简而言之,这是我的问题。我正在使用 OfficeWriter 的演示版来确定它是否适合我们的 porpuses。特别是我准备了一个由 8 个占位符组成的 Excel 模板,代表 4 个数据表的 XY 列,以及一个 Excel 散点图,我在其中添加了 4 个系列,并参考了相应的列对。在此处输入图像描述 在我的代码中,我根据列表中的项目多次复制此模板,并以我的项目名称命名这些复制的工作表(我为此使用 wb.CopySheet(...) 方法)。这里的主要问题是,当我调用“xlt.process()”方法时,它会使用正确的工作表名称正确更新 Y 范围数据标记,但它似乎没有更新 X 范围数据标记。在此处输入图像描述 有人可以帮帮我吗?

4

2 回答 2

2

这似乎是一个错误。当 OfficeWriter 读取图表的值时,属性 .ScatterValues 应该已设置为正确的范围值(例如 =Sheet2!$R$2:$R$2),因此会导致 CopySheet 失败。我已经提交了一个用于修复此错误的开发错误。

要解决此问题,您可以在上面的代码中设置 .ScatterValues(请参阅http://wiki.softartisans.com/display/EW8/Series.ScatterValues)属性:

string templatePath = "input.xlsx";

/* Open the template workbook */
ExcelApplication xla = new ExcelApplication();
var wb = xla.Open(templatePath);

/* Select the template worksheet to copy */
var origWS = wb.Worksheets["Sheet1"];

/* Make a copy of the worksheet with the given name */
var wsName = "Sheet2";
wb.Worksheets.CopySheet(origWS, 1, wsName);

/* For the new worksheet, update the ScatterValues to point to this sheet */
var newWS = wb.Worksheets[wsName];
newWS.Charts[0].SeriesCollection[0].ScatterValues = "=" + wsName + "!$B$27";

/* Create an instance of ExcelTemplate */
ExcelTemplate xlt = new ExcelTemplate();

/* Open the workbook from the ExcelApplication object above */
xlt.Open(xla, wb);

免责声明:我为 OfficeWriter 的制造商 SoftArtisans 工作。

于 2013-04-29T22:33:28.743 回答
1

我喜欢OfficeWriter(免责声明:我是 OfficeWriter 的开发人员),我能够设置一个快速示例来完成此操作:

使用以下代码:

using System; using System.Data; using SoftArtisans.OfficeWriter.ExcelWriter;

namespace ExcelTemplateScatterChart {
    class Program
    {
        static void Main(string[] args)
        {
            /* Create an instance of ExcelTemplate */
            ExcelTemplate xlt = new ExcelTemplate();

            /* Open the template workbook */
            string templatePath = "input.xlsx";
            xlt.Open(templatePath);

            /* Query the database for report data */
            DataTable dt1 = GetTable1();
            DataTable dt2 = GetTable2();

            /* Pass the DataTable to ExcelTemplate */
            xlt.BindData(dt1, "DataTable1", xlt.CreateDataBindingProperties());
            xlt.BindData(dt2, "DataTable2", xlt.CreateDataBindingProperties());

            /* Call the process() method to populate the 
            * template with the data source values
            */
            xlt.Process();

            /* Save the report by streaming it
             * to the client's browser */
            xlt.Save("output.xlsx");
        }

        /// <summary>
        /// This example method generates a DataTable.
        /// </summary>
        static DataTable GetTable1()
        {
            //
            // Here we create a DataTable with four columns.
            //
            DataTable table = new DataTable();
            table.Columns.Add("x", typeof(int));
            table.Columns.Add("y", typeof(int));

            //
            // Here we add three DataRows.
            //
            table.Rows.Add(1, 10);
            table.Rows.Add(2, 20);
            table.Rows.Add(3, 30);
            return table;
        }

        /// <summary>
        /// This example method generates a DataTable.
        /// </summary>
        static DataTable GetTable2()
        {
            //
            // Here we create a DataTable with four columns.
            //
            DataTable table = new DataTable();
            table.Columns.Add("x", typeof(int));
            table.Columns.Add("y", typeof(int));

            //
            // Here we add three DataRows.
            //
            table.Rows.Add(1, 30);
            table.Rows.Add(2, 20);
            table.Rows.Add(3, 10);
            return table;
        }
    } }

我将我的模板设置为:

在此处输入图像描述

并将图表配置为指向数据标记/占位符,例如

在此处输入图像描述

运行代码后,结果输出如下:

在此处输入图像描述

于 2013-04-26T20:07:51.540 回答