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



[SOLVED]调试时遇到此错误,错误如下:

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

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

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

[更新] @AlisonB再次在这个错误上提供了很大的帮助。现在可以调试它,但它显示了另一个错误,如下所示:

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

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

    static void Main(string[] args)
    {
        ExcelTemplate XLT = new ExcelTemplate();
        XLT.Open(@"C:Usersadministrator.EBSDLABDesktopExamplesTest_DBtest.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:Usersadministrator.EBSDLABDesktopExamplesTest_DBproducts.xlsx");
    }

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

BindCellData旨在将单个变量值绑定到一个单元格。BindCellData的参数是一个对象,它是要导入的单个值,一个字符串(它是数据标记的名称),以及一个用于自定义数据导入方式的DataBindingProperties对象。

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

ProductID: %%=$Production

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

BindRowData获取一行值并将它们导入到数据标记中,无论数据标记是在同一行中还是在模板文件中的其他配置中。数据源中的每一列数据都需要一个数据标记,这一点您已经做到了。

有关数据标记语法的更多信息,请参阅我们关于创建数据标记的文档。如果您感兴趣,我们还有一份关于在ExcelTemplate中使用数组作为数据源和导入数据库信息的指南。

最新更新