0

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

尝试解释或访问此数据源第 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");
    }
4

1 回答 1

2

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

BindCellData旨在将单个变量值绑定到单元格。BindCellData的参数是一个Object,它是您要导入的单个值,一个String,它是数据标记的名称,以及一个DataBindingProperties对象,用于自定义您希望如何导入数据。

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

ProductID: %%=$Production

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

BindRowData采用单行值并将它们导入数据标记,无论数据标记是在同一行还是模板文件中的其他配置。您需要为数据源中的每一列数据设置一个数据标记,您已经完成了这项工作。

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

于 2013-07-03T11:40:40.753 回答