hutool工具包导出excel文件filename乱码与中文列宽自适应问题

1 篇文章 0 订阅

hutool工具包导出excel文件filename乱码与中文列宽自适应问题

*话不多说,直接代码~~~~*
修改之前:

/**
     * 导出excel
     */
    public static void downloadExcel(List<Map<String, Object>> list, HttpServletResponse response) throws IOException {
        String tempPath = SYS_TEM_DIR + IdUtil.fastSimpleUUID() + ".xlsx";
        File file = new File(tempPath);
        BigExcelWriter writer = ExcelUtil.getBigWriter(file);
        // 一次性写出内容,使用默认样式,强制输出标题
        writer.write(list, true);
        SXSSFSheet sheet = (SXSSFSheet)writer.getSheet();
        //上面需要强转SXSSFSheet  不然没有trackAllColumnsForAutoSizing方法
        sheet.trackAllColumnsForAutoSizing();
        //列宽自适应
        writer.autoSizeColumnAll();
        //response为HttpServletResponse对象
        response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8");
        //test.xls是弹出下载对话框的文件名,不能为中文,中文请自行编码
        response.setHeader("Content-Disposition", "attachment;filename=file.xlsx");
        ServletOutputStream out = response.getOutputStream();
        // 终止后删除临时文件
        file.deleteOnExit();
        writer.flush(out, true);
        //此处记得关闭输出Servlet流
        IoUtil.close(out);
    }

修改之后:

/**
     * 导出excel
     * 增加自定义excel名称功能
     */
    public static void downloadExcel(List<Map<String, Object>> list, String fileName, HttpServletResponse response) throws IOException {
        String tempPath = SYS_TEM_DIR + IdUtil.fastSimpleUUID() + ".xlsx";
        File file = new File(tempPath);
        BigExcelWriter writer = ExcelUtil.getBigWriter(file);
        // 一次性写出内容,使用默认样式,强制输出标题
        writer.write(list, true);
        SXSSFSheet sheet = (SXSSFSheet) writer.getSheet();
        //上面需要强转SXSSFSheet  不然没有trackAllColumnsForAutoSizing方法
        sheet.trackAllColumnsForAutoSizing();
        //列宽自适应
        writer.autoSizeColumnAll();
        //默认取第一行数据,解决中文自适应宽度不足问题
        if (sheet != null && sheet.getRow(1) != null) {
            int physicalNumberOfCells = sheet.getRow(1).getPhysicalNumberOfCells();
            for (int i = 0; i < physicalNumberOfCells; i++) {
                // 调整每一列宽度
                sheet.autoSizeColumn((short) i);
                // 解决自动设置列宽中文失效的问题
                sheet.setColumnWidth(i, sheet.getColumnWidth(i) * 17 / 10);
            }
        }
        //response为HttpServletResponse对象
        response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8");
        //test.xls是弹出下载对话框的文件名,不能为中文,中文请自行编码
        response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF8") + ".xlsx");
        ServletOutputStream out = response.getOutputStream();
        // 终止后删除临时文件
        file.deleteOnExit();
        writer.flush(out, true);
        //此处记得关闭输出Servlet流
        IoUtil.close(out);
    }
PHP导出Excel文件时,可以通过设置列宽来实现列宽自适应。具体的实现步骤如下: 1. 在写入单元格数据之前,先获取列宽度,可以通过计算单元格内容的字符长度来确定列宽度。 2. 在写入单元格数据的同时,设置单元格的列宽度。 下面是一个示例代码,可以实现导出Excel文件列宽自适应: ```php // 创建Excel文件 $spreadsheet = new \PhpOffice\PhpSpreadsheet\Spreadsheet(); $sheet = $spreadsheet->getActiveSheet(); // 写入数据 $sheet->setCellValue('A1', '姓名'); $sheet->setCellValue('B1', '年龄'); $$sheet->setCellValue('C1', '邮箱'); // 设置列宽度 $sheet->getColumnDimension('A')->setWidth($this->getColumnWidth('姓名')); $sheet->getColumnDimension('B')->setWidth($this->getColumnWidth('年龄')); $sheet->getColumnDimension('C')->setWidth($this->getColumnWidth('邮箱')); // 获取单元格内容的字符长度,计算列宽度 function getColumnWidth($content) { $length = mb_strlen($content, 'UTF-8'); $width = $length * 1.2; if ($width < 10) { return 10; } else { return $width; } } // 输出Excel文件 $writer = new \PhpOffice\PhpSpreadsheet\Writer\Xlsx($spreadsheet); $writer->save('example.xlsx'); ``` 在上面的例子中,我们使用了 PhpSpreadsheet 库来创建和操作 Excel 文件。getColumnWidth() 函数用来计算单元格列宽度,字符长度乘以1.2得到的结果即为列宽度。最后,我们通过 PhpSpreadsheet 库的 Writer 类将 Excel 文件输出到指定的文件路径中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值