我正在使用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类的方法。
任何人都可以帮助我。
由于
答案 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();
}
}