0

我正在从 xlx/xlxs 文件中检索数据。我实际上是在使用 ExcelDataReader 库将数据保存到使用 ExcelDataReader 插件的 DataSet 中。

excelReader = ExcelReaderFactory.CreateBinaryReader(stream);
excelDataTable = excelReader.AsDataSet(conf);

现在我正在尝试将 System.Data.DataSet 转换为强类型数据集。

public DocAdmin.GHDefinitionDataTable ConvertDataTable(DataTable dtOriginal)
    {

        DocAdmin.GHDefinitionDataTable ghDefiniton = new DocAdmin.GHDefinitionDataTable();
        int ExcelRowNumber = 1;
        foreach (DataRow row in dtOriginal.Rows)
        {
            ++ExcelRowNumber;
            try
            {
                ghDefinition.ImportRow(row);
            }
            catch (ArgumentException ex)
            {
                OperationMessage message = new OperationMessage();
                this.ShowMessage(message );
            }

        }
        return ghDefinition;
    }

我收到此异常消息:

输入字符串的格式不正确。无法存储在 SAHasta 列中。预期类型为十进制。

这是因为我故意在单元格上设置“NULL”值。

我想显示一条指定行号(Excel 文件上的单元格编号)的消息,我正在使用 ++ExcelRowNumber 来显示这一点,但我不知道如何从强类型中获取列名和数据类型数据集给了我例外。我知道例外为自己指定:无法存储在 SAHasta 列中,但我必须用西班牙语编写自定义消息。

我想知道是否有办法从异常中获取列名和数据类型。我想向用户指定给出问题的值,以便他可以修改 excel 文件并再次上传。

在此先感谢并为我的英语感到抱歉。

4

1 回答 1

0

像这样简单的事情来获得失败的行呢?

public DocAdmin.GHDefinitionDataTable ConvertDataTable(DataTable dtOriginal)
{

    DocAdmin.GHDefinitionDataTable ghDefiniton = new DocAdmin.GHDefinitionDataTable();
    int ExcelRowNumber = 1;
    foreach (DataRow row in dtOriginal.Rows)
    {
        ++ExcelRowNumber;
        try
        {
            ghDefinition.ImportRow(row);
        }
        catch (ArgumentException ex)
        {
          System.Windows.Forms.MessageBox.Show("Error on line " + ExcelRowNumber)
        }

    }
    return ghDefinition;
}

要了解 Import 模块失败的确切值,您需要查看 DocAdmin.GHDefinitionDataTable 定义本身。如果不知道那一点是如何工作的,就很难说清楚。

于 2018-03-21T12:45:30.440 回答