带有ExcelStorage类的FieldConverter

时间:2013-05-17 16:18:14

标签: c# filehelpers

我正在使用FileHelpers Library 2.0并使用ExcelStorage类从excel文件中读取数据。

我有那些课程

[DelimitedRecord("|")]
public sealed class ServicoOutro
{
    [FieldTrim(TrimMode.Both)]
    [FieldConverter(typeof(MyConverter))] 
    internal Int32 srv_tx_iva;
}

    public class MyConverter : ConverterBase
    {
        public override object StringToField(string from)
        {
            return Convert.ToString(from).Replace("%", "");
        }

        public override string FieldToString(object fieldValue)
        {
            string str = Convert.ToString(fieldValue);

            return str.Replace("%", "");
        }
    }

从excel文件读取数据时:

ExcelStorage pvrOs = new ExcelStorage(typeof(ServicoOutro));
pvrOs.FileName = "fileName.xlsx";
pvrOs.StartRow = 2;
ServicoOutro[] resCc = (ServicoOutro[])pvrOs.ExtractRecords();

不调用MyConverter类的方法。

任何人都可以帮助我。

由于

1 个答案:

答案 0 :(得分:1)

您的MyConverter对于Int32类型的字段不正确。

导入时使用StringToField覆盖。它返回的类型object必须与目标字段的类型匹配,在您的情况下为Int32

导出时使用FieldToString()覆盖。在转换string值为object时,它会告诉引擎如何格式化fieldValue输出。你可以忽略它。

如下所示

public class MyConverter : ConverterBase
{
    public override object StringToField(string from)
    {
        // you might like to check for nulls first...
        string output = from.Replace("%", "");
        // return Int32 because srv_tx_iva is Int32
        return Convert.ToInt32(output); 
    }

    public override string FieldToString(object from)
    {
        return from.ToString();
    }
}