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