CSV与EPPlusparsing问题
我正在使用EPPlus来读取数据。 该数据由.xlsx
或.csv
。
当文件是.csv
文件时,我使用LoadFromText
function。 但EPPlus决定它也必须parsing所有的值, 而不应该这样做 。
例如:
Id;Double; 1;-3,88; ExcelTextFormat format = new ExcelTextFormat(); format.Delimiter = ';'; worksheet.Cells[1, 1].LoadFromText( "file", format );
结果是工作表中的-3,88
值变为: -388
。 我发现这是因为EPPlus将-3,88视为一个数字,并将其parsing为默认文化InvariantCulture
,在这种情况下(类似于) us-US
。
我如何实现EPPlus加载csv而不parsing? (将所有值作为string)
EPPlus似乎总是使用en-US
格式parsing导入的数据。 因此,首先将十进制值的列作为string导入。 这样就没有企图转换。
ExcelTextFormat format = new ExcelTextFormat { Delimiter = ';', DataTypes = new eDataTypes[] { eDataTypes.Number, eDataTypes.String } };
并且,在为您的本地化导入了正确的小数点分隔符后,将值循环,将它们转换为十进制并设置正确的数字格式。
int columnNumber = 2; for (int i = 2; i <= rowCount; i++) { worksheet.Cells[i, columnNumber].Style.Numberformat.Format = "0.00"; worksheet.Cells[i, columnNumber].Value = Convert.ToDecimal(worksheet.Cells[i, columnNumber].Value); }