我正在导入csv文件。我导入的单元格值类似于1.00E + 13,必须读取为10023000000000(实际扩展值)。 我正在使用OpenCSV。
注意:我通过对XLS和XLSX文件使用apache POI实现了这一点,因为POI不支持CSV我使用的是OpenCSV。
POI针对上述情况的解决方案是:obj
如何在OpenCSV中实现这一目标?
提前致谢。
答案 0 :(得分:0)
如果您自己从csvReader解析字符串,Kenny的答案就已经过时了。我唯一担心的是csv文件是字符串,所以输入必须是1.0023E + 13而不是1.00E + 13。
所有这些都说opencsv中有另一种方式,那就是CsvToBean类。您可以使用公共getter和setter创建一个具有所需值的类,然后CsvToBean将为您处理转换,如下面的传递测试所示。
public class CsvToBeanDoubleTest {
private static final double DOUBLE_NUMBER = 10023000000000d;
private static final String TEST_STRING = "name,orderNumber,doubleNum\n" +
"kyle,abc123456,10023000000000\n" +
"jimmy,def098765,1.0023E+13 ";
private CSVReader createReader() {
return createReader(TEST_STRING);
}
private CSVReader createReader(String testString) {
StringReader reader = new StringReader(testString);
return new CSVReader(reader);
}
private MockBean createMockBean(String name, String orderNumber, double num) {
MockBean mockBean = new MockBean();
mockBean.setName(name);
mockBean.setOrderNumber(orderNumber);
mockBean.setDoubleNum(num);
return mockBean;
}
@Test
public void parseBeanWithNoAnnotations() {
HeaderColumnNameMappingStrategy<MockBean> strategy = new HeaderColumnNameMappingStrategy<MockBean>();
strategy.setType(MockBean.class);
CsvToBean<MockBean> bean = new CsvToBean<MockBean>();
List<MockBean> beanList = bean.parse(strategy, createReader());
assertEquals(2, beanList.size());
assertTrue(beanList.contains(createMockBean("kyle", "abc123456", DOUBLE_NUMBER)));
assertTrue(beanList.contains(createMockBean("jimmy", "def098765", DOUBLE_NUMBER)));
}
}