之前转了一个文: https://blog.csdn.net/wuzhong8809/article/details/88399897
“经常遇到MYSQL导出长数字或纯数字字符串(如身份证、卡券号、条码、流水号等)到csv或excel文件,用excel打开会显示为科学记数法,甚至后几位转为0。这是由Excel的特性决定的:Excel显示11位以上的数字时,会自动转化为科学计数法,如果长度大于15位,15位以后数字还会转成0。”
结合一个实例说明一下:
数据
导出命令
mysql -uroot -p1 -e "select * from test_device_info where test_collection_id = 116" table_name > /home/zonson/a.xls
用notepad打开是这样的
excel打开是这样的
提示格式不一致。
问题
注意,这里原始数据: 8765432106543211 直接变成了 8765432106543210
解决方法1
mysql -uroot -p1 -e "select concat('\'', sn) as sn from test_device_info where test_collection_id = 116" table_name> /home/zonson/a2.xls
解决方法2
带了一个点,不是特别满意,最后笔者还是改用java代码来做excel文件的生成,其实也不麻烦,示例代码如下:
private void writeRow(HSSFSheet spreadSheet, int rowIndex, String sn, String imei, String imei2,
String note) {
HSSFRow row;
HSSFCell cell;
row = spreadSheet.createRow((short)rowIndex);
cell = row.createCell(0);
cell.setCellType(CellType.STRING);
cell.setCellValue(sn);
cell = row.createCell(1);
cell.setCellType(CellType.STRING);
cell.setCellValue(imei);
}
public File generateExcelFile() {
String fileName = "/tmp/export/test.xls";
File file = new File(fileName);
FileOutputStream fos;
try {
HSSFWorkbook workBook = new HSSFWorkbook();
HSSFSheet spreadSheet = workBook.createSheet("data");
// 替换为:将数据库中的数据读到JAVA集合,再依次写入EXCEL
writeRow(spreadSheet, 0, "SN1", "IMEI1", "IMEI2", "NOTE1");
writeRow(spreadSheet, 1, "SN2", "IMEI3", "IMEI4", "NOTE2");
fos = new FileOutputStream(fileName);
workBook.write(fos);
} catch (Exception e1) {
e1.printStackTrace();
}
return file;
}