Lis集合通过浏览器导出Excle表

所需依赖

        org.apache.poiooxml-schemas1.1com.alibabafastjson1.2.23cn.hutoolhutool-all4.5.7
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import org.apache.poi.hssf.usermodel.*;
import org.apache.poi.hssf.util.HSSFColor;
import org.apache.poi.ss.util.CellRangeAddress;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;public class ExportExcelUtil {public void termStatiExp(HttpServletRequest request, HttpServletResponse response) {List list = new ArrayList();Student student1 = new Student("张1", "男");Student student2 = new Student("张2", "女");Student student3 = new Student("张三", "女");Student student4 = new Student("张三", "男");list.add(student1);list.add(student2);list.add(student3);list.add(student4);//将对象转换成JSONArrayJSONArray jsonArray = (JSONArray) JSON.toJSON(list);if (jsonArray != null) {String title = "测试表头";String[] rowsName = new String[]{"序号", "姓名", "年龄"};List dataList = new ArrayList();Object[] objs = null;for (int i = 0; i < jsonArray.size(); i++) {JSONObject jsonObj = (JSONObject)JSON.toJSON(jsonArray.get(i));objs = new Object[rowsName.length];objs[0] = i + 1;if (!StrUtil.isBlank(jsonObj.getString("sname"))) {objs[1] = jsonObj.getString("sname");} else {objs[1] = "--";}if (!StrUtil.isBlank(jsonObj.getString("sex"))) {objs[2] = jsonObj.getString("sex");} else {objs[2] = "--";}dataList.add(objs);}ExportExcelUtil ex = new ExportExcelUtil();}}/*** 导出数据*/public void export(HttpServletResponse response, String title, String[] rowName, List dataList)throws Exception {try {// 创建工作簿对象HSSFWorkbook workbook = new HSSFWorkbook();// 创建工作表HSSFSheet sheet = workbook.createSheet(title);// 产生表格标题行HSSFRow rowm = sheet.createRow(0);HSSFCell cellTiltle = rowm.createCell(0);// sheet样式定义【getColumnTopStyle()/getStyle()均为自定义方法 - 在下面 - 可扩展】// 获取列头样式对象HSSFCellStyle columnTopStyle = this.getColumnTopStyle(workbook);// 单元格样式对象HSSFCellStyle style = this.getStyle(workbook);sheet.addMergedRegion(new CellRangeAddress(0, 1, 0, (rowName.length - 1)));cellTiltle.setCellStyle(columnTopStyle);cellTiltle.setCellValue(title);// 定义所需列数int columnNum = rowName.length;// 在索引2的位置创建行(最顶端的行开始的第二行)HSSFRow rowRowName = sheet.createRow(2);// 将列头设置到sheet的单元格中for (int n = 0; n < columnNum; n++) {// 创建列头对应个数的单元格HSSFCell cellRowName = rowRowName.createCell(n);// 设置列头单元格的数据类型cellRowName.setCellType(HSSFCell.CELL_TYPE_STRING);HSSFRichTextString text = new HSSFRichTextString(rowName[n]);// 设置列头单元格的值cellRowName.setCellValue(text);// 设置列头单元格样式cellRowName.setCellStyle(columnTopStyle);}// 将查询出的数据设置到sheet对应的单元格中for (int i = 0; i < dataList.size(); i++) {// 遍历每个对象Object[] obj = dataList.get(i);// 创建所需的行数HSSFRow row = sheet.createRow(i + 3);for (int j = 0; j < obj.length; j++) {// 设置单元格的数据类型HSSFCell cell = null;if (j == 0) {cell = row.createCell(j, HSSFCell.CELL_TYPE_NUMERIC);cell.setCellValue(i + 1);} else {cell = row.createCell(j, HSSFCell.CELL_TYPE_STRING);if (!"".equals(obj[j]) && obj[j] != null) {// 设置单元格的值cell.setCellValue(obj[j].toString());}}// 设置单元格样式cell.setCellStyle(style);}}// 让列宽随着导出的列长自动适应for (int colNum = 0; colNum < columnNum; colNum++) {int columnWidth = sheet.getColumnWidth(colNum) / 256;for (int rowNum = 0; rowNum < sheet.getLastRowNum(); rowNum++) {HSSFRow currentRow;// 当前行未被使用过if (sheet.getRow(rowNum) == null) {currentRow = sheet.createRow(rowNum);} else {currentRow = sheet.getRow(rowNum);}if (currentRow.getCell(colNum) != null) {HSSFCell currentCell = currentRow.getCell(colNum);if (currentCell.getCellType() == HSSFCell.CELL_TYPE_STRING) {if (currentCell.getRichStringCellValue() != null) {int length = currentCell.getStringCellValue().getBytes().length;
//                                if (columnWidth < length) {
//                                    columnWidth = length;
//                                }if (columnWidth < 255 * 256) {sheet.setColumnWidth(colNum, columnWidth < 3000 ? 3000 : columnWidth);} else {sheet.setColumnWidth(colNum, 6000);}}}}}if (colNum == 0) {sheet.setColumnWidth(colNum, (columnWidth - 2) * 256);} else {sheet.setColumnWidth(colNum, (columnWidth + 4) * 256);}}if (workbook != null) {try {String fileName = "Excel-" + title + String.valueOf(System.currentTimeMillis()).substring(4, 13)+ ".xls";String headStr = "attachment; filename=\"" + fileName + "\"";response.setContentType("APPLICATION/OCTET-STREAM");response.setHeader("Content-Disposition", headStr);OutputStream out = response.getOutputStream();workbook.write(out);} catch (IOException e) {e.printStackTrace();}}} catch (Exception e) {e.printStackTrace();}}/*** 列头单元格样式*/public HSSFCellStyle getColumnTopStyle(HSSFWorkbook workbook) {// 设置字体HSSFFont font = workbook.createFont();// 设置字体大小font.setFontHeightInPoints((short) 11);// 字体加粗font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);// 设置字体名字font.setFontName("Courier New");// 设置样式;HSSFCellStyle style = workbook.createCellStyle();// 设置底边框;style.setBorderBottom(HSSFCellStyle.BORDER_THIN);// 设置底边框颜色;style.setBottomBorderColor(HSSFColor.BLACK.index);// 设置左边框;style.setBorderLeft(HSSFCellStyle.BORDER_THIN);// 设置左边框颜色;style.setLeftBorderColor(HSSFColor.BLACK.index);// 设置右边框;style.setBorderRight(HSSFCellStyle.BORDER_THIN);// 设置右边框颜色;style.setRightBorderColor(HSSFColor.BLACK.index);// 设置顶边框;style.setBorderTop(HSSFCellStyle.BORDER_THIN);// 设置顶边框颜色;style.setTopBorderColor(HSSFColor.BLACK.index);// 在样式用应用设置的字体;style.setFont(font);// 设置自动换行;style.setWrapText(false);// 设置水平对齐的样式为居中对齐;style.setAlignment(HSSFCellStyle.ALIGN_CENTER);// 设置垂直对齐的样式为居中对齐;style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);return style;}/*** 列数据信息单元格样式*/public HSSFCellStyle getStyle(HSSFWorkbook workbook) {// 设置字体HSSFFont font = workbook.createFont();// 设置字体大小// font.setFontHeightInPoints((short)10);// 字体加粗// font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);// 设置字体名字font.setFontName("Courier New");// 设置样式;HSSFCellStyle style = workbook.createCellStyle();// 设置底边框;style.setBorderBottom(HSSFCellStyle.BORDER_THIN);// 设置底边框颜色;style.setBottomBorderColor(HSSFColor.BLACK.index);// 设置左边框;style.setBorderLeft(HSSFCellStyle.BORDER_THIN);// 设置左边框颜色;style.setLeftBorderColor(HSSFColor.BLACK.index);// 设置右边框;style.setBorderRight(HSSFCellStyle.BORDER_THIN);// 设置右边框颜色;style.setRightBorderColor(HSSFColor.BLACK.index);// 设置顶边框;style.setBorderTop(HSSFCellStyle.BORDER_THIN);// 设置顶边框颜色;style.setTopBorderColor(HSSFColor.BLACK.index);// 在样式用应用设置的字体;style.setFont(font);// 设置自动换行;style.setWrapText(false);// 设置水平对齐的样式为居中对齐;style.setAlignment(HSSFCellStyle.ALIGN_CENTER);// 设置垂直对齐的样式为居中对齐;style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);return style;}}                        


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章