java导出excel表格进行判断和时间日期格式设置

这篇博客介绍了如何使用Java后端代码实现Excel导出,并进行了数据判断和日期格式设置。通过ExportExcelUtil工具类,结合Integer类型的数据判断(如性别、状态)和日期格式转换(如使用DateUtil格式化为'yyyy-MM-dd'),实现了更易读的Excel表格内容。

后端代码实现例子:

在这里我定义一个 content

我获取的数据库值就会从0开始对应

list是数据库调用数据的定义值

具体例子判断和日期格式定义成yyyy--mm-dd例子如

@ResponseBody

@RequestMapping("/exportExcel")
    public void export(HttpServletRequest request, HttpServletResponse response) throws Exception {

...

List<WorkerEntity> list = getWorkerService().getExportWorkers(weParam);

String title = "xxxx";

String[] Mytitle = {"姓名", "性别",''创建日期''};

String sheetName = "xxx档案";

int a = list.size();
String content[][] = new String[a][];

for (int i = 0; i < list.size(); i++) {

content[i] = new String[Mytitle.length];

content[i][0] = list.get(i).getChineseName();

content[i][1] = list.get(i).getSex() == 0 ? "男" : "女";

content[i][2] = String.valueOf(DateUtil.format(list.get(i).getCreateDate(), DatePattern.NORM_DATE_FORMATTER));

}

//创建HSSFWorkbook
HSSFWorkbook wb = ExportExcelUtil.getHSSFWorkbook(sheetName, Mytitle, title, content, null);

try {
            String name = "xxxx.xls";      //  文件名
            OutputStream os = response.getOutputStream();  // 取得输出流
            response.reset(); // 清空输出流
            response.setHeader("Content-Disposition", "attachment;filename=" + name + ";filename*=utf-8''"
                    + URLEncoder.encode(name, "UTF-8"));  // 设定输出文件头
            response.setContentType("application/msexcel");// 定义输出类型
            wb.write(os);
            os.flush();
            os.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

注意:

1.ExportExcelUtil是一个导出的excel格式定义,例子:

<dependency>
            <groupId>org.meteor</groupId>
            <artifactId>meteor-mgr</artifactId>
            <version>0.0.1.2-SNAPSHOT</version>
</dependency>

具体代码:

package org.meteor.mgr.utils;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFDataFormat;
import org.apache.poi.hssf.usermodel.HSSFFont;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.util.CellRangeAddress;

@SuppressWarnings("deprecation")
public class ExportExcelUtil {
     /**
      *   * 导出Excel
      * @param sheetName sheet名称
      * @param titleColumn 列标题
      * @param title 标题
      * @param values 表内容
      * @param wb  HSSFWorkbook对象
      * @return
      */
    public static HSSFWorkbook getHSSFWorkbook(String sheetName,String []titleColumn,String title,String [][]values, HSSFWorkbook wb){

        // 第一步,创建一个HSSFWorkbook,对应一个Excel文件
        if(wb == null){
            wb = new HSSFWorkbook();
        }

        // 第二步,在workbook中添加一个sheet,对应Excel文件中的sheet
        HSSFSheet sheet = wb.createSheet(sheetName);
        //创建表名的样式
        HSSFCellStyle tableNamestyle = wb.createCellStyle();
        tableNamestyle.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 创建一个居中格式
        sheet.autoSizeColumn((short)0);
        tableNamestyle.setBorderBottom(HSSFCellStyle.BORDER_THIN); //下边框
        tableNamestyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);//左边框
        tableNamestyle.setBorderTop(HSSFCellStyle.BORDER_THIN);//上边框
        tableNamestyle.setBorderRight(HSSFCellStyle.BORDER_THIN);//右边框
        //设置字体
        HSSFFont tableNamefont =wb.createFont();
        tableNamefont.setFontHeightInPoints((short) 14); //字体高度
        tableNamefont.setColor(HSSFFont.COLOR_NORMAL); //字体颜色
        tableNamefont.setFontName("宋体"); //字体
        tableNamefont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); //宽度
        tableNamestyle.setFont(tableNamefont);
        
        
        //创建第一行
        HSSFRow row = sheet.createRow(0);
        //设置合并单元格样式
        setCellBorder(1,titleColumn.length-1,row,tableNamestyle);
        //单元格合并
        CellRangeAddress cra =new CellRangeAddress(0, 0, 0, titleColumn.length-1);
        sheet.addMergedRegion(cra);
        //声明列对象
        HSSFCell cell = null;
        cell=row.createCell(0);
        cell.setCellValue(title);
        /**设置单元格格式为文本格式*/
        HSSFDataFormat format = wb.createDataFormat();
        tableNamestyle.setDataFormat(format.getFormat("@"));
        cell.setCellStyle(tableNamestyle);//设置单元格格式为"文本"
        cell.setCellType(HSSFCell.CELL_TYPE_STRING);

        
        
        // 第三步,在sheet中添加表头第0行,注意老版本poi对Excel的行数列数有限制
        row = sheet.createRow(1);

        // 第四步,创建单元格,并设置值表头 设置表头居中
        HSSFCellStyle titlestyle = wb.createCellStyle();
        titlestyle.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 创建一个居中格式
        sheet.autoSizeColumn((short)0);
        //设置字体
        HSSFFont font =wb.createFont();
        font.setFontHeightInPoints((short) 9); //字体高度
        font.setColor(HSSFFont.COLOR_NORMAL); //字体颜色
        font.setFontName("宋体"); //字体
        font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); //宽度
        titlestyle.setFont(font);
        titlestyle.setBorderBottom(HSSFCellStyle.BORDER_THIN); //下边框
        titlestyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);//左边框
        titlestyle.setBorderTop(HSSFCellStyle.BORDER_THIN);//上边框
        titlestyle.setBorderRight(HSSFCellStyle.BORDER_THIN);//右边框
        
        
         
        //创建单元格样式
        HSSFCellStyle cellstyle = wb.createCellStyle();
        //设置字体
        HSSFFont tableCountfont =wb.createFont();
        tableCountfont.setFontHeightInPoints((short) 10); //字体高度
        tableCountfont.setColor(HSSFFont.COLOR_NORMAL); //字体颜色
        tableCountfont.setFontName("宋体"); //字体
        tableCountfont.setBoldweight(HSSFFont.BOLDWEIGHT_NORMAL); //宽度
        cellstyle.setFont(tableCountfont);
        
        cellstyle.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 创建一个居中格式
        cellstyle.setBorderBottom(HSSFCellStyle.BORDER_THIN); //下边框
        cellstyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);//左边框
        cellstyle.setBorderTop(HSSFCellStyle.BORDER_THIN);//上边框
        cellstyle.setBorderRight(HSSFCellStyle.BORDER_THIN);//右边框

        /**设置单元格格式为文本格式*/
        HSSFDataFormat format1 = wb.createDataFormat();
        cellstyle.setDataFormat(format1.getFormat("@"));
        
        
        
        //创建标题
        for(int i=0;i<titleColumn.length;i++){
            cell = row.createCell(i);
            cell.setCellValue(titleColumn[i]);
            cell.setCellStyle(titlestyle);
        }

        //创建内容
        for(int i=0;i<values.length;i++){
             HSSFCell cellcell = null;
            row = sheet.createRow(i + 2);
            for(int j=0;j<values[i].length;j++){
                //将内容按顺序赋给对应的列对象
                cellcell=row.createCell(j);
                cellcell.setCellValue(values[i][j]);
                cellcell.setCellStyle(cellstyle);
                cellcell.setCellType(HSSFCell.CELL_TYPE_STRING);
            }
            
        }
        // 设置为根据内容自动调整列宽    
        for (int k = 0; k < values[0].length; k++) {
            sheet.autoSizeColumn(k);
            HSSFCellStyle cellstyle1 = wb.createCellStyle();
            HSSFDataFormat format2 = wb.createDataFormat();
            cellstyle1.setDataFormat(format2.getFormat("@"));
            sheet.setDefaultColumnStyle(k, cellstyle1);
        }
        setSizeColumn(sheet, values[0].length);
        return wb;
    }

     /**
      * 自适应宽度(中文支持)
      * @param sheet
      * @param size
      */
     public static void setSizeColumn(HSSFSheet sheet, int size) {

         for (int columnNum = 0; columnNum < size; columnNum++) {
             int columnWidth = sheet.getColumnWidth(columnNum) / 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(columnNum) != null) {
                     HSSFCell currentCell = currentRow.getCell(columnNum);
                     if (currentCell.getCellType() == HSSFCell.CELL_TYPE_STRING) {
                         int length = currentCell.getStringCellValue().getBytes().length;
                         if (columnWidth < length) {
                             columnWidth = length;
                         }
                     }
                 }
             }
             sheet.setColumnWidth(columnNum, columnWidth * 256);
         }
     }
     /**   
      * 合并单元格加边框  水平   
      * @param sheet   
      * @param region   
      * @param cs
      * 参数说明:start和并的第二列,end为合并的最后一列,row就为当前行,style样式(里面有设置边框)
        例如从0-10列合并: ExcelUtil.setCellBorder(2,10,row,style);   这样可以设置   
      */     
     public static void setCellBorder(int start, int end, HSSFRow row,    HSSFCellStyle style) {     
         for(int i=start;i<=end;i++){        
             HSSFCell cell = row.createCell(i);        
             cell.setCellValue("");        
             cell.setCellStyle(style);        
         }     
     }

}

2. Integer类型数据进行判断

往往数据库一些定义判断都是0和1代表好坏等等的判断

就比如性别0是男1是女,0是在职1是离职

content[i][1] = list.get(i).getSex() == 0 ? "男" : "女";

content[i][1] = list.get(i).getQuit()== 0 ? "在职" : "离职";

这样导出的excel就不是0和1这种数字而变成了汉字方便查看

3.日期格式设置

DateUtil是一个需要导入的包

<dependency>
          <groupId>cn.hutool</groupId>
          <artifactId>hutool-all</artifactId>
          <version>5.7.12</version>
 </dependency>

这里有一个时间工具类,具体查看jar包里的源码package cn.hutool.core.date.DateUtil;

这个例子:

content[i][1] = String.valueOf(DateUtil.format(list.get(i).getCreateDate(), DatePattern.NORM_DATE_FORMATTER));

注:把date类型转换成了String,设置导出时间类型为yyyy-MM-dd

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值