{Updated} OfficeWriter错误:数据源绑定名称必须是唯一的

时间:2013-07-03 07:53:52

标签: c# console-application officewriter

[已解决] 调试时遇到此错误,错误如下:

  

尝试解释或访问此数据源第0行中GetColumnNumber(Name)的数据字段时出错

     

无法为数据标记访问此字段名称或索引< %% = Production.ProductID>

     

解决方案:数据标记从%% = Production.ProductID替换为%% = $ Production

[增订] 的 @AlisonB再次对错误提供了很大的帮助。现在可以调试它,但它显示另一个错误:

  

所有数据源必须是唯一的。名称“生产”和工作表“已用于数据源。

如何在读者或IdSQL旁边使用名称放入XLT.BindCellData()?因为如果我使用阅读器,我会有这个错误。 IdSQL也是如此。但是如果我删除了while语句,它可以调试,但excel文件将在所有单元格中显示为System.Data.SqlClient.SqlDataReader而不是实际数据。

    static void Main(string[] args)
    {
        ExcelTemplate XLT = new ExcelTemplate();
        XLT.Open(@"C:\Users\administrator.EBSDLAB\Desktop\Examples\Test_DB\test.xlsx");
        DataBindingProperties dataProps = XLT.CreateDataBindingProperties();

        var strCon = ConfigurationManager.ConnectionStrings["Production"].ConnectionString;
        SqlConnection sqlCon = new SqlConnection(strCon);

        string IdSQL = "SELECT Name, Size, Color FROM Production.Product";
        sqlCon.Open();

        SqlCommand cmd = new SqlCommand(IdSQL, sqlCon);
        SqlDataReader reader = cmd.ExecuteReader();

        while(reader.Read())
        {
            XLT.BindCellData(IdSQL, "Production", dataProps);
        }

        XLT.BindCellData(reader, "Production", dataProps);
        XLT.Process();
        XLT.Save(@"C:\Users\administrator.EBSDLAB\Desktop\Examples\Test_DB\products.xlsx");
    }

1 个答案:

答案 0 :(得分:2)

模板文件中的语法与您在代码中进行的数据绑定调用不兼容。

BindCellData旨在将单个变量值绑定到单元格。 BindCellData 的参数是 Object ,它是您要导入的单个值, String ,它是数据的名称标记和 DataBindingProperties 对象,用于自定义导入数据的方式。

此方法调用的相应数据标记语法是%% = $ DataMarkerName,其中“DataMarkerName”是传递给 BindCellData 的值。要与您发布的代码匹配,您的数据标记应为:

ProductID: %%=$Production

您还可以更改正在进行的方法调用,以匹配模板中数据标记的排列;在这种情况下,您需要的方法调用是BindRowData

无论数据标记是在同一行还是模板文件中的其他配置,

BindRowData 都会获取单行值并将其导入数据标记。您需要为数据源中的每一列数据建立一个数据标记,这是您已经完成的。

有关数据标记语法的详细信息,请参阅Creating Data Markers上的文档。如果您有兴趣,我们还有关于使用arrays as data sources in ExcelTemplateimporting database information的指南。