Java Excel下载的方法

导出excel表格
/**
* 导出Excel
* @response
* @param exportData 导出值
* @param elements 要素代码
* @param sheetName Sheet名称
* @param titleName 标题名称
* @return fileName 自动生成文件名
*/
public static String exportExcel(HttpServletRequest request, List exportData, List elements, String sheetName, String titleName) throws IOException, WriteException, IllegalAccessException, NoSuchMethodException, InvocationTargetException {
//放在admin文件夹下 没有登录无法下载
String fileName =”E:/气象数据/”+ UUID.randomUUID().toString().replace(“-“,”“)+”.cvs”;//文件名

/*File exportfile = new File(request.getServletContext().getRealPath(fileName));
if(!exportfile.getParentFile().exists()){
    exportfile.getParentFile().mkdirs();
}*/
File file = new File(fileName);
if(!file.getParentFile().exists()){
    file.getParentFile().mkdirs();
}
//输出流
FileOutputStream os = new FileOutputStream(fileName);

//cvs 文件内容
StringBuffer cvsbuffer = new StringBuffer();
if(titleName!=null && titleName.length()>0){
    cvsbuffer.append("\""+titleName+"\"\n");
}

//根据指定的字段参数读取对象中的值
int columnSize = elements.size();
if(columnSize>0) {
    cvsbuffer.append("\"序号\"");
    for(int i=0;i<elements.size();i++) {
        ElementCodeTables ele = elements.get(i);
        cvsbuffer.append("\""+ele.getEleName()+"\"");
        if(i<elements.size()-1){
            cvsbuffer.append("\t");
        }
    }
    cvsbuffer.append("\n");//换行

    int row = 2;
    for(Object obj:exportData) {
        cvsbuffer.append("\""+(row-1)+"\"");
        for(ElementCodeTables element:elements) {
            //通过属性名取值
            Object value = ((JSONObject)obj).get(element.getEleCode());
            cvsbuffer.append("\""+value+"\"");
            if((row-1)<elements.size()){
                cvsbuffer.append("\t");
            }
        }
        cvsbuffer.append("\n");//换行
        row++;
    }
}

os.write(cvsbuffer.toString().getBytes());
os.flush();
os.close();
return fileName;

}
public static void excel(HttpServletResponse response, List exportData, List elements, String titleName) throws IOException, WriteException, IllegalAccessException, NoSuchMethodException, InvocationTargetException {
String fname = titleName;
OutputStream os;
try {
os = response.getOutputStream();
response.reset();
response.setCharacterEncoding(“UTF-8”);
fname = URLEncoder.encode(fname,”UTF-8”);
response.setHeader(“Content-Disposition”,
“attachment;filename=” + new String(fname.getBytes(“UTF-8”), “GBK”) + “.xlsx”);
response.setContentType(“application/msexcel”);

    WritableWorkbook workbook = Workbook.createWorkbook(os);
    WritableSheet sheet = workbook.createSheet("数据统计",0);
    sheet.setColumnView(1,20);
    sheet.setColumnView(3,15);
    sheet.mergeCells(0,0,elements.size()+2,0);
    WritableFont wf = new WritableFont(WritableFont.COURIER,20,WritableFont.NO_BOLD);
    WritableCellFormat wcf = new WritableCellFormat(wf);
    wcf.setAlignment(jxl.format.Alignment.CENTRE);
    wcf.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE);
    wcf.setBorder(Border.ALL, BorderLineStyle.DASH_DOT);
    Label lable = new Label(0,0,titleName,wcf);
    sheet.setRowView(0,600,false);
    sheet.addCell(lable);

    // 创建要显示的内容,创建一个单元格,第一个参数为列坐标,第二个参数为行坐标,第三个参数为内容
    WritableFont underline = new WritableFont(WritableFont.TAHOMA, 10, WritableFont.NO_BOLD);
    WritableCellFormat greyBackground = new WritableCellFormat(underline);
    greyBackground.setWrap(true);
    // 设置背景颜色为灰色
    greyBackground.setBorder(Border.ALL, BorderLineStyle.MEDIUM);
    // 单元格中的内容水平方向居中
    greyBackground.setAlignment(jxl.format.Alignment.CENTRE);
    // 单元格的内容垂直方向居中
    greyBackground.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE);
    Label no = new Label(0,1,"序号",greyBackground);
    sheet.addCell(no);
    int cell = 1;
    int row = 1;
    for(ElementCodeTables ect : elements){
        WritableCell ele = new Label(cell,row,ect.getEleName(),greyBackground);
        sheet.setRowView(row,500,false);
        sheet.addCell(ele);
        cell++;
    }
    row = 2;
    for(Object obj:exportData) {
        cell = 1;
        for(ElementCodeTables element:elements) {
            //通过属性名取值
            Object value = ((JSONObject)obj).get(element.getEleCode());
            WritableCell sort = new Label(0,row,row-1+"",greyBackground);
            sheet.addCell(sort);
            WritableCell elel = new Label(cell,row,value.toString(),greyBackground);
            sheet.setRowView(row,500,false);
            sheet.setColumnView(cell,15);
            sheet.addCell(elel);
            cell++;
        }
        row++;
    }

    workbook.write();
    workbook.close();
    os.close();
} catch (IOException e) {
    e.printStackTrace();
} catch (WriteException e) {
    e.printStackTrace();
} finally {

}

}

/**
* 大量数据的输出
* @param response
* @param exportData
* @param elements
* @param titleName
* @throws IOException
* @throws WriteException
* @throws IllegalAccessException
* @throws NoSuchMethodException
* @throws InvocationTargetException
*/
public static void exportData(HttpServletResponse response, List exportData, List elements, String titleName) throws IOException, WriteException, IllegalAccessException, NoSuchMethodException, InvocationTargetException {
OutputStream os = null;
try {
response.setCharacterEncoding(“UTF-8”);
response.setContentType(“application/force-download”); // 设置下载类型
String filename = titleName+”.xlsx”;
response.setHeader(“Content-Disposition”, “attachment;filename=” + filename); // 设置文件的名称
os = response.getOutputStream(); // 输出流
SXSSFWorkbook wb = new SXSSFWorkbook(1000);//内存中保留 1000 条数据,以免内存溢出,其余写入 硬盘
//获得该工作区的第一个sheet
Sheet sheet1 = wb.createSheet(“sheet1”);
int excelRow = 0;
//标题行
Row titleRow = (Row) sheet1.createRow(excelRow++);
for (int i = 0; i < elements.size(); i++) {
Cell cell = titleRow.createCell(i);
cell.setCellValue(elements.get(i).getEleName());
}

    if (exportData != null && exportData.size() > 0) {
        for (int i = 0; i < exportData.size(); i++) {
            //明细行
            Row contentRow = (Row) sheet1.createRow(excelRow++);
            for (int j = 0; j < elements.size(); j++) {
                Cell cell = contentRow.createCell(j);
                Object value = ((JSONObject)exportData.get(i)).get(elements.get(j).getEleCode());
                cell.setCellValue(value.toString());
            }
        }
    }
    wb.write(os);
} catch (Exception e) {
    e.printStackTrace();
} finally {
    try {
        if (os != null) {
            os.close();
        }
    } catch (IOException e) {
        e.printStackTrace();
    } // 关闭输出流
}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值