Excel导出

关于Excel导出

项目描述:本项目采用框架为前后端分离,后端应用的是SpringBoot,前端采用的是node.js,Excel导出主要可以有一下几种方法实现:

1、在后端通过HSSFWorkbook生成二进制文件流,前端通过Blob来生成文件后,通过href链接过去,(但是Blob不兼容Ie)代码如下:

**生成WorkBoot文件,service代码如下**:
public Workbook exportArrangeDuty(ArrangeDutyConditionVo conditionVo) {
        Workbook workbook = null;
        try{
            workbook = new HSSFWorkbook();
            Sheet sheet0 = workbook.createSheet();
            sheet0.setDefaultColumnWidth((short)20);
            Row row0 = sheet0.createRow(0); 
            String headers[] = 
                    new String[]{"序号","编码","姓名","权名称","地点","号码","开始日期","结束日期","类型"};
            for(int i=0;i<headers.length;i++){
                Cell cell = row0.createCell(i);
                HSSFRichTextString text = new HSSFRichTextString(headers[i]);
                cell.setCellValue(text);
            }
            List<ArrangeDutyVo> arrangeDutyVoList = this.queryArrangeDuty(conditionVo);
            int index = 0;
            int num = 1;//序号
            HSSFCellStyle cellStyle = (HSSFCellStyle) workbook.createCellStyle();
            HSSFDataFormat format= (HSSFDataFormat) workbook.createDataFormat();
            cellStyle.setDataFormat(format.getFormat("yyyy-MM-dd HH:mm:ss"));
            for (ArrangeDutyVo arrangeDutyVo : arrangeDutyVoList) {
                index++;
                Row row = sheet0.createRow(index);
                Cell cell0 = row.createCell(0);
                cell0.setCellValue(num++);
                Cell cell1 = row.createCell(1);
                cell1.setCellValue(arrangeDutyVo.getUserCode());
                Cell cell2 = row.createCell(2);
                cell2.setCellValue(arrangeDutyVo.getUserName());
                Cell cell3 = row.createCell(3);
                cell3.setCellValue(arrangeDutyVo.getPermitComName());
                Cell cell4 = row.createCell(4);
                cell4.setCellValue(arrangeDutyVo.getDutyAddress());
                Cell cell5 = row.createCell(5);
                cell5.setCellValue(arrangeDutyVo.getTelPhone());
                Cell cell6 = row.createCell(6);
                cell6.setCellStyle(cellStyle);
                cell6.setCellValue(arrangeDutyVo.getDutyBeginTime());
                Cell cell7 = row.createCell(7);
                cell7.setCellStyle(cellStyle);
                cell7.setCellValue(arrangeDutyVo.getDutyEndTime());
                Cell cell8 = row.createCell(8);
                if(null == arrangeDutyVo.getCaseType() || "".equals(arrangeDutyVo.getCaseType())){
                    cell8.setCellValue("所有");
                }else{
                    cell8.setCellValue(arrangeDutyVo.getCaseType());
                }
            }
        }catch(Exception e){
//          e.printStackTrace();
            throw new BusinessException("导出文件异常,请稍后再试", false);
        }
        return workbook;
    }
**api代码如下**
@RequestMapping(value = "/exportArrangeDuty")
public ResponseEntity<Resource> exportArrangeDuty(HttpServletRequest request,ArrangeDutyConditionVo conditionVo,HttpServletResponse response){
    ByteArrayOutputStream bos = null;
    String filename = "测试.xlsx";
    try {
        Workbook workbook = arrangeDutyService.exportArrangeDuty(conditionVo);
        bos = new ByteArrayOutputStream();
        workbook.write(bos);
        workbook.close();
        HttpHeaders headers = new HttpHeaders();
        headers.add("Cache-Control", "public no-cache, no-store, must-revalidate");
        headers.add("Pragma", "no-cache");
        headers.add("Expires", "0");
        headers.add("charset", "utf-8");

// headers.add(“filename”, filename);
//设置下载文件名
filename = URLEncoder.encode(filename, “UTF-8”);
headers.add(“Content-Disposition”,”attachment;filename=\”” + filename + “\”“);
Resource resource = new InputStreamResource(new ByteArrayInputStream(bos.toByteArray()));
// return ResponseEntity.ok().headers(headers).contentType(MediaType.parseMediaType(“application/x-msdownload”)).body(resource);
return ResponseEntity.ok().headers(headers).contentType(MediaType.parseMediaType(“application/x-msdownload”)).body(resource);
} catch (IOException e) {
if (null != bos) {
try {
bos.close();
} catch (IOException e1) {
e1.printStackTrace();
}
}
}
return null;
}
前端代码如下:
_exportExcel(){
var url = window._domain + “/arrangeduty/exportArrangeDuty”;
var xhr = new XMLHttpRequest();
xhr.open(‘POST’,url, true);
// alert($(‘#searchForm’).serialize());
xhr.setRequestHeader(‘Content-Type’, ‘application/x-www-form-urlencoded’);
xhr.responseType = “blob”;
xhr.onload = function() {
if (this.status == 200) {
var filename=”测试.xls”;
var linkElement = document.createElement(‘a’);
var blob = this.response;
var url = window.URL.createObjectURL(blob);
linkElement.setAttribute(‘href’, url);
linkElement.setAttribute(“download”,filename);

            var clickEvent = new MouseEvent("click", {
                "view": window,
                "bubbles": true,
                "cancelable": false
            });
            linkElement.dispatchEvent(clickEvent);
        }
    }
    xhr.send($('#searchForm').serialize());
  }

2、将数据在后台生成后传到前台,前台生成:

**js代码如下**
 var rows = 0;
        var tblDocument = document;  
        if (!!inWindow && inWindow != "") {  
            if (!document.all(inWindow)) {  
                return null;  
            } else {  
                tblDocument = eval(inWindow).document;  
            }  
        }  
        var curTbl = tblDocument.getElementById(inTbl);  
        if (curTbl.rows.length > 65000) {  
            alert('源行数不能大于65000行');  
            return false;  
        }  
        if (curTbl.rows.length <= 1) {  
                  //  alert('数据源没有数据');  
                  return "";  
              }  
              var outStr = "";  
              if (curTbl != null) {  
                for (var j = 0; j < curTbl.rows.length; j++) {  
                    for (var i = 0; i < curTbl.rows[j].cells.length; i++) {  
                        if (i == 0 && rows > 0) {  
                            outStr += " \t"; rows -= 1;  
                        }  
                        var tc = curTbl.rows[j].cells[i];  
                        if (j > 0 && tc.hasChildNodes() && tc.firstChild.nodeName.toLowerCase() == "input") {  
                            if (tc.firstChild.type.toLowerCase() == "checkbox") { 
                                var rowNum = j;
                                outStr += rowNum + "\t"; 
                                // if (tc.firstChild.checked == true) {  
                                //     outStr += j+1 + "\t";  
                                // } else {  
                                //     continue;  
                                // }  
                            }  
                        } else {  
                            outStr += " " + curTbl.rows[j].cells[i].innerText + "\t";  
                        }  
                        if (curTbl.rows[j].cells[i].colSpan > 1) {  
                            for (var k = 0; k < curTbl.rows[j].cells[i].colSpan - 1; k++) {  
                                outStr += " \t";  
                            }  
                        }  
                        if (i == 0) {  
                            if (rows == 0 && curTbl.rows[j].cells[i].rowSpan > 1) {  
                                rows = curTbl.rows[j].cells[i].rowSpan - 1;  
                            }  
                        }  
                    }  
                    outStr += "\r\n";  
                }  
            } else {  
            outStr = null; alert(inTbl + "不存在!");  
        }  
        return outStr;  
    }  
    function doFileExport(inName, inStr) {  
        var xlsWin = null;  
        if (!!document.all("glbHideFrm")) {  
            xlsWin = glbHideFrm;  
        } else {  
            var width = 1; var height = 1;  
            var openPara = "left=" + (window.screen.width / 2 + width / 2) + ",top=" + (window.screen.height + height / 2) +  
            ",scrollbars=no,width=" + width + ",height=" + height;  
            xlsWin = window.open("", "_blank", openPara);  
        }
        xlsWin.document.write(inStr);
        xlsWin.document.close();  
        xlsWin.document.execCommand('Saveas', true, inName);  
        xlsWin.close();  
    }  
    function Cleanup() {
        window.clearInterval(idTmr);
        CollectGarbage();
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Excel导出Java是指将Java对象中的数据导出Excel表格中。通常情况下,我们需要使用第三方库来实现这个功能,比如Apache POI和EasyExcel等。在Java对象中,我们需要使用注解来标记需要导出的字段,以及字段的顺序、名称、映射关系等信息。在导出时,我们需要将Java对象转换为Excel表格,并设置表头、样式等属性。最后,我们将生成的Excel表格保存到本地或者输出到浏览器中供用户下载。Excel导出Java是指将Java对象中的数据导出Excel表格中。通常情况下,我们需要使用第三方库来实现这个功能,比如Apache POI和EasyExcel等。在Java对象中,我们需要使用注解来标记需要导出的字段,以及字段的顺序、名称、映射关系等信息。在导出时,我们需要将Java对象转换为Excel表格,并设置表头、样式等属性。最后,我们将生成的Excel表格保存到本地或者输出到浏览器中供用户下载。 在上面的引用中,我们可以看到一个Excel导出的注解@ExcelExport,它包含了字段名称、导出排序、导出映射、导出模板示例值等属性。我们还可以看到一个Excel导入的注解@ExcelImport,它用于标记Java实体对象中需要导入的字段,并指定对应的表头名称。 在实际开发中,我们通常会在Controller层中编写导出Excel的代码。我们可以使用第三方库来生成Excel表格,并将其输出到浏览器中供用户下载。同时,我们还可以编写导入Excel的代码,将Excel表格中的数据读取到Java对象中进行处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值