mysql导出长数字到excel避免显示为科学记数法 解决方法

之前转了一个文: 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打开是这样的

mysql导出长数字到excel避免显示为科学记数法 解决方法_第1张图片

excel打开是这样的

提示格式不一致。

mysql导出长数字到excel避免显示为科学记数法 解决方法_第2张图片

mysql导出长数字到excel避免显示为科学记数法 解决方法_第3张图片

mysql导出长数字到excel避免显示为科学记数法 解决方法_第4张图片

问题

注意,这里原始数据: 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

mysql导出长数字到excel避免显示为科学记数法 解决方法_第5张图片

解决方法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;
    }

 

你可能感兴趣的:(java,web)