/*--------------------------------------导出开始--------------------------------------------------*/@Overridepublic void downloadFile(HttpServletRequest request, HttpServletResponse response, Map<String, Object> map) {List<EquipmentVO> safeCommonManagers = this.baseMapper.selectEquipmentList4Excel(map);try{//1、创建导出excel必要对象//创建XSSFWorkbook对象XSSFWorkbook wkb = new XSSFWorkbook();XSSFCellStyle style= wkb.createCellStyle();setDefaultStyle(style);XSSFFont font = wkb.createFont();font.setFontName("宋体");font.setFontHeightInPoints((short)12);style.setFont(font);XSSFCellStyle styleTitle = wkb.createCellStyle();setDefaultStyle(styleTitle);XSSFFont fontTitle = wkb.createFont();fontTitle.setFontName("微软雅黑");fontTitle.setFontHeightInPoints((short)12);fontTitle.setColor(XSSFFont.COLOR_RED);styleTitle.setFont(fontTitle);//创建XSSFSheet对象XSSFSheet sheet = wkb.createSheet("设备台账表");//         //1、第一行表头:箱动态报表(报表时间:2020-04-30 08:00) 合并1行,61列
//          sheetMerageRegion(sheet,0,0,0,10);
//          XSSFRow title = sheet.createRow(0);
//          XSSFCell title10Cel0 = title.createCell(0, XSSFCell.CELL_TYPE_STRING);
//          title10Cel0.setCellStyle(styleTitle);
//          title10Cel0.setCellValue("设备台账表");
//          //创建空cell
//          createVoidCell(title,1,10,styleTitle);//3、设置第二行表头String [] titleStr = {"设备类型","规格型号","发动机参数","变速箱参数","整机参数","吊具参数","臂架参数","使用单位","资产单位","负责人","生产厂家","供应商","出场时间"};XSSFRow title2 = sheet.createRow(0);//创建单元格并设置单元格内容;设置小表头for(int i=0 ; i<titleStr.length ; i++ ){XSSFCell temp = title2.createCell(i, XSSFCell.CELL_TYPE_STRING);temp.setCellValue(titleStr[i]);temp.setCellStyle(styleTitle);}//设置内容//1、定义起始行、结束行int startRow = 1;for(EquipmentVO bean : safeCommonManagers){XSSFRow row = sheet.createRow(startRow);//列数int j = 13;XSSFCell[] cell = new XSSFCell[j];cell = setValue(cell,j,row,style);int n = 0;//设备类型cell[n++].setCellValue(ObjectUtils.isEmpty(bean.getDeviceTypeName())?"":bean.getDeviceTypeName());//规格型号cell[n++].setCellValue(ObjectUtils.isEmpty(bean.getDeviceSpec())?"":bean.getDeviceSpec());//发动机参数cell[n++].setCellValue(ObjectUtils.isEmpty(bean.getEngineParam())?"":bean.getEngineParam());//变速箱参数cell[n++].setCellValue(ObjectUtils.isEmpty(bean.getTransmissionParam())?"":bean.getTransmissionParam());//整机参数cell[n++].setCellValue(ObjectUtils.isEmpty(bean.getCompleteParam())?"":bean.getCompleteParam());//吊具参数cell[n++].setCellValue(ObjectUtils.isEmpty(bean.getSpreaderParam())?"":bean.getSpreaderParam());//臂架参数cell[n++].setCellValue(ObjectUtils.isEmpty(bean.getBoomParam())?"":bean.getBoomParam());//使用单位cell[n++].setCellValue(ObjectUtils.isEmpty(bean.getCompanyUseName())?"":bean.getCompanyUseName());//资产单位cell[n++].setCellValue(ObjectUtils.isEmpty(bean.getCompanyHaveName())?"":bean.getCompanyHaveName());//负责人cell[n++].setCellValue(ObjectUtils.isEmpty(bean.getLeaderName())?"":bean.getLeaderName());//生产厂家cell[n++].setCellValue(ObjectUtils.isEmpty(bean.getManufacturer())?"":bean.getManufacturer());//供应商cell[n++].setCellValue(ObjectUtils.isEmpty(bean.getSupplier())?"":bean.getSupplier());//出场时间cell[n++].setCellValue(ObjectUtils.isEmpty(bean.getProductionTime())?"":dateFormat(bean.getProductionTime()));startRow ++;}String fileName = "excel导出";setSizeColumn(sheet,61,2);//3、输出excel对象//输出Excel文件OutputStream output = response.getOutputStream();String userAgent = request.getHeader("USER-AGENT");fileName = getFileName(userAgent, fileName);response.reset();//导出xls格式
//          response.setContentType("application/msexcel; charset=UTF-8");//导出为xlsx格式response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");response.setHeader("Content-Disposition", "attachment;filename=" + fileName + ".xlsx");response.setCharacterEncoding("UTF-8");wkb.write(output);output.close();}catch(Exception e){log.error("设备台账表excel出错:",e);}}private void setDefaultStyle(XSSFCellStyle style) {
//        style.setAlignment(HSSFCellStyle.ALIGN_CENTER);//水平居中
//        style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);//垂直居中
//        style.setBorderBottom(HSSFCellStyle.BORDER_THIN); //下边框
//        style.setBorderLeft(HSSFCellStyle.BORDER_THIN);//左边框
//        style.setBorderTop(HSSFCellStyle.BORDER_THIN);//上边框
//        style.setBorderRight(HSSFCellStyle.BORDER_THIN);//右边框}private void sheetMerageRegion(XSSFSheet sheet, int startrow, int overrow, int startcol, int overcol) {sheet.addMergedRegion(new CellRangeAddress(startrow, overrow,startcol, overcol));}private void createVoidCell(XSSFRow title, int start, int count, XSSFCellStyle style){for(int i=start;i<=count;i++){XSSFCell cell = title.createCell(i, XSSFCell.CELL_TYPE_STRING);cell.setCellStyle(style);cell.setCellValue("");}}private void setSizeColumn(XSSFSheet sheet, int size, int rowNumStart) {for (int columnNum = 0; columnNum < size; columnNum++) {int columnWidth = sheet.getColumnWidth(columnNum) / 256;for (int rowNum = rowNumStart; rowNum < sheet.getLastRowNum(); rowNum++) {XSSFRow currentRow;//当前行未被使用过if (sheet.getRow(rowNum) == null) {currentRow = sheet.createRow(rowNum);} else {currentRow = sheet.getRow(rowNum);}if (currentRow.getCell(columnNum) != null) {XSSFCell currentCell = currentRow.getCell(columnNum);if (currentCell.getCellType() == XSSFCell.CELL_TYPE_STRING) {int length = currentCell.getStringCellValue().getBytes().length;if (columnWidth < length) {columnWidth = length;}}}}sheet.setColumnWidth(columnNum, columnWidth * 256);}}public String getFileName(String userAgent, String fileName) throws UnsupportedEncodingException {// IE浏览器if (StringUtils.contains(userAgent, "MSIE")) {fileName = URLEncoder.encode(fileName, "UTF8");// google,火狐浏览器} else if (StringUtils.contains(userAgent, "Mozilla")) {fileName = new String(fileName.getBytes(), "ISO8859-1");// 其他浏览器} else {fileName = URLEncoder.encode(fileName, "UTF8");}return fileName;}public String dateFormat(Date date){try{if(ObjectUtils.isEmpty(date)){return "";}SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");return sdf.format(date);}catch (Exception e){return "";}}private XSSFCell[] setValue(XSSFCell[] cell,int j,XSSFRow row,XSSFCellStyle style){for(int a=0;a<j;a++){cell[a] = row.createCell(a,XSSFCell.CELL_TYPE_STRING);cell[a].setCellStyle(style);}return cell;}/*--------------------------------------导出结束--------------------------------------------------*/

此为输出xlsx格式。

如果需要xls格式。将所有XSSF改为HSSF,并修改response.setContentType为被注释掉的代码,以及前端按钮方法的type为type: "application/vnd.ms-excel"

//前端//导出按钮方法
onExport() {ptExport().then(res => {const link = document.createElement('a');let blob = new Blob([res.data], {type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"});let objectUrl = URL.createObjectURL(blob);link.href = objectUrl;link.download = '普通管理人员统计';link.click();URL.revokeObjectURL(objectUrl);})},// 接口
export const ptExport = (data) => {return request({url: '/api/XXX-XXX/XXXXX/export',method: 'get',responseType: 'blob',data})
}

参考代码

https://blog.csdn.net/a602049511/article/details/52367563

使用POI导出Excel,以及xls和xlsx格式问题相关推荐

  1. POI 导出excel带小数点的数字格式显示不对解决方法

    POI 导出excel带小数点的数字格式显示不对解决方法 参考文章: (1)POI 导出excel带小数点的数字格式显示不对解决方法 (2)https://www.cnblogs.com/firstd ...

  2. java xlsx怎么转换成excel格式_python小工具 | Excel的xls和xlsx格式文件转换

    众所周知Excel文件格式转换可以通过"另存为"的方式转换格式,可以说是简单方便,但是对于大量文件转换或者经常重复进行转换操作时,这种方法就很不方便. 显然利用程序对xls和xls ...

  3. python win32选取文件夹_python小工具 | Excel的xls和xlsx格式文件转换

    众所周知Excel文件格式转换可以通过"另存为"的方式转换格式,可以说是简单方便,但是对于大量文件转换或者经常重复进行转换操作时,这种方法就很不方便. 显然利用程序对xls和xls ...

  4. java 使用 jacob 实现 将 freemarker 导出的 XML 格式的 excel 转 xls、xlsx 格式

    最近项目上有一个导出复杂excel的需求,发现无论是使用 poi 还是使用阿里巴巴的 easyexcel ,实际上都是编程式的方式,实现起来代码比较复杂而且不便于维护,于是决定采用 freemarke ...

  5. Apache POI 读写 Excel file (.xls or .xlsx)

    Apache POI 是 Apache 软件基金会的开放源码函式库,POI 提供 API 给 Java 程序对 Microsoft Office 格式档案读和写的功能. 这里演示了 POI 对新版 E ...

  6. php导出excel(xls或xlsx)(解决长数字显示问题)

    1)demo $titles = array('订单号','商品结算码','合同号','供应商名称','专柜','商品名称','商品货号','商品单价','商品总价','供应商结算金额','商品数量' ...

  7. 实现Excel文件xls与xlsx格式批量互相转换

    目录 python实现方法 VBA实现方法 python实现方法 将文件夹中的所有xls或xlsx文件转换为xlsx或xls文件 import win32com.client as win32 # 需 ...

  8. POI导出excel并设置单元格样式和单元格内容中文自适应

    本案例生产环境真是案例POI导出: 开发环境:idea+mybaits3+spring4+springmvc4+maven3+mysql5.7 poi依赖: <dependency>< ...

  9. r语言导出文件为xlxs_R语言学习——R读取txt、csv、xls和xlsx格式文件

    最近项目中运用到了R读取文件数据,所以把相关好用的.经过验证的方法总结了一下,有效避免下次入坑. 1. R读取txt文件 使用R读取txt文件直接使用read.table()方法进行读取即可,不需要加 ...

  10. java poi对excel xls和xlsx格式文件导入导出

    一)poi简介 Apache POI项目是用于基于Microsoft的OLE 2复合文档格式开发文件格式的纯Java端口的主项目. 官网POI API地址:https://poi.apache.org ...

最新文章

  1. 厉害了,为了干掉 HTTP ,Spring团队又开源 nohttp 项目!
  2. 想自学stm32不知道怎么买板子?我来告诉你新手该买哪一个!
  3. Silverlight为什么要使用程序扩展服务
  4. WinCE Heartbeat Message的实现
  5. 2018-10-04-Python全栈开发-day61-DJANGO-MODELS操作补充
  6. Spark入门(十一)之排序
  7. go的一个不太理解的赋值问题
  8. 从Oracle到PostgreSQL:最全控制文件
  9. 使用 XML Schema 定义元素的基本知识--1
  10. Apache Storm技术实战之2 -- BasicDRPCTopology
  11. 无线充U型超声波电动牙刷方案开发
  12. 前端pdf禁止下载功能
  13. POSTGRESQL 一个“大” SQL 的优化历险记
  14. lisp实心圆点怎么画_cad中怎么样画实心圆点
  15. 概率论各种基础分布期望和方差推导过程汇总
  16. SqlServer中sql执行顺序
  17. ROS TF 常用接口函数
  18. APC PowerChute Business Edition 安装中的vmware问题
  19. python中的for语句涉及的序列可以是( )-Python for循环语句
  20. VTK从分割好的体数据获取等值面的方法(MarchingCube)

热门文章

  1. 「开机自启」macOS如何关闭开机自启动软件?
  2. Dosbox 修改分辨率
  3. git的使用(开发常用到的)
  4. 【Git】使用手册02--在本地玩转代码
  5. 武汉理工大学 大数据架构与模式期末复习
  6. 奇异值分解(SVD)详解及其应用
  7. 2019一级消防工程师视频课件下载【全三科】
  8. docker推送镜像至阿里私有镜像仓库
  9. 马云《功守道》完整版 网友:天下武功 唯钱不破
  10. 从键盘输入一个字符串,然后提取其中的数字字符,将其排列在其他字符之后,例如,输入字符串“this’7is89#@hg”排列后的结果为“thisis#@hg’789”。