java后端实现,下载自定义生成EXCEL表格

定义Excel表结构

设置输出文件名、设置协议头

public void fileDownload(HttpServletResponse response, String chooseDate) {
    
    
 Date date = new Date();
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyMMdd");
        String fileName = "Date" + simpleDateFormat.format(date) + ".xls";
        response.setContentType("application/vnd.ms-excel;charset=utf-8");
        response.setHeader("Content-disposition", "attachment;filename=" + fileName);

设置表头

        String[] headers = {
    
    "序号", "文章标题", "发布时间", "文章ID", "状态", "一级分类", "二级分类", "三级分类", "总浏览量", "总点赞量", "作者"};
        try {
    
    
            HSSFWorkbook workbook = new HSSFWorkbook();
            HSSFSheet sheet = workbook.createSheet("知识库总明细表数据导出");
            // 设置表头
            HSSFRow row = sheet.createRow(0);
            for (int i = 0; i < headers.length; i++) {
    
    
                HSSFCell cell = row.createCell(i);
                HSSFRichTextString text = new HSSFRichTextString(headers[i]);
                cell.setCellValue(text);
            }
            sheet.setColumnWidth(1, 256 * 72);
            sheet.setColumnWidth(2, 256 * 18);
            sheet.setColumnWidth(5, 256 * 18);
            sheet.setColumnWidth(6, 256 * 36);
            sheet.setColumnWidth(7, 256 * 36);
            sheet.setColumnWidth(8, 256 * 18);
     
      

对定义好的表结构进行添置

通过sheet.createRow(rowNum) 进行定位要赋值的行

   int rowNum = 1;
for (int i = 0; i < reportKnDetailEntityList.size(); i++) {
    
    
HSSFRow row1 = sheet.createRow(rowNum);
                    // 序号
                    row1.createCell(0).setCellValue(i + 1);
                    // 文章标题
                    String reportTitle = reportKnDetailEntity.getTitle();
                    if (StringUtils.isNotBlank(reportTitle)) {
    
    
                        row1.createCell(1).setCellValue(reportTitle);
                    }
                    // 发布时间
                    Date publishedTime = reportKnDetailEntity.getPublishedDate();
                    if (ObjectUtils.allNotNull(publishedTime)) {
    
    
                        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
                        row1.createCell(2).setCellValue(simpleDateFormat.format(publishedTime));
rowNum++; 
                 }
                    }
            workbook.write(outputStream);
            outputStream.close();

————————————————————————
完整代码

/**
     * 导出
     *
     * @param response
     */
    @RequestMapping(value = "/service/fileDownload", method = {
    
    RequestMethod.GET, RequestMethod.POST})
    public void fileDownload(HttpServletResponse response, String chooseDate) {
    
    
        Date date = new Date();
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyMMdd");
        String fileName = "Date" + simpleDateFormat.format(date) + ".xls";
        response.setContentType("application/vnd.ms-excel;charset=utf-8");
        response.setHeader("Content-disposition", "attachment;filename=" + fileName);
        try {
    
    
            reportKnDetailService.fileDownload(response.getOutputStream(), chooseDate);//response.getOutputStream() 用于输出字符流数据或者二进制的字节流数据都可以
        } catch (Exception e) {
    
    
            e.printStackTrace();
        }
    }
  public void fileDownload(OutputStream outputStream, String addDate) {
    
    
        String[] headers = {
    
    "序号", "文章标题", "发布时间", "文章ID", "状态", "一级分类", "二级分类", "三级分类", "总浏览量", "总点赞量", "作者"};
        try {
    
    
            HSSFWorkbook workbook = new HSSFWorkbook();
            HSSFSheet sheet = workbook.createSheet("知识库总明细表数据导出");
            // 设置表头
            HSSFRow row = sheet.createRow(0);
            for (int i = 0; i < headers.length; i++) {
    
    
                HSSFCell cell = row.createCell(i);
                HSSFRichTextString text = new HSSFRichTextString(headers[i]);
                cell.setCellValue(text);
            }
            sheet.setColumnWidth(1, 256 * 72);
            sheet.setColumnWidth(2, 256 * 18);
            sheet.setColumnWidth(5, 256 * 18);
            sheet.setColumnWidth(6, 256 * 36);
            sheet.setColumnWidth(7, 256 * 36);
            sheet.setColumnWidth(8, 256 * 18);
            int rowNum = 1;
            List<ReportKnDetailEntity> reportKnDetailEntityList = reportKnDetailMapper.getReportDetailList(addDate);
            if (reportKnDetailEntityList != null && reportKnDetailEntityList.size() > 0) {
    
    
                for (int i = 0; i < reportKnDetailEntityList.size(); i++) {
    
    
                    ReportKnDetailEntity reportKnDetailEntity = reportKnDetailEntityList.get(i);
                    HSSFRow row1 = sheet.createRow(rowNum);
                    // 序号
                    row1.createCell(0).setCellValue(i + 1);
                    // 文章标题
                    String reportTitle = reportKnDetailEntity.getTitle();
                    if (StringUtils.isNotBlank(reportTitle)) {
    
    
                        row1.createCell(1).setCellValue(reportTitle);
                    }
                    // 发布时间
                    Date publishedTime = reportKnDetailEntity.getPublishedDate();
                    if (ObjectUtils.allNotNull(publishedTime)) {
    
    
                        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
                        row1.createCell(2).setCellValue(simpleDateFormat.format(publishedTime));
                    }
                    //文章ID
                    Integer knowledgeId = reportKnDetailEntity.getKnowledgeNumber();
                    if (knowledgeId != null) {
    
    
                        row1.createCell(3).setCellValue(knowledgeId);
                    }
                    //状态
                    String status = reportKnDetailEntity.getStatus();
                    if (StringUtils.isNotBlank(status)) {
    
    
                        row1.createCell(4).setCellValue(status);
                    }
                    // 一级分类
                    String repository = reportKnDetailEntity.getCollectionValid();
                    String repositoryValue = knowledgeRepositoriesMapper.getKnowledgeRepositoriesCn(repository);
                    if (repositoryValue == null)
                        repositoryValue = knowledgeRepositoriesMapper.getKnowledgeRepositoriesEn(repository);
                    if (StringUtils.isNotBlank(repository)) {
    
    
                        row1.createCell(5).setCellValue(repositoryValue);
                    }
                    // 二级分类
                    String category = reportKnDetailEntity.getCategoryValid();
                    String categoryValue = knowledgeCategoryMapper.getKnowledgeCategoryCn(category);
                    if (categoryValue == null) categoryValue = knowledgeCategoryMapper.getKnowledgeCategoryEn(category);
                    if (StringUtils.isNotBlank(category)) {
    
    
                        row1.createCell(6).setCellValue(categoryValue);
                    }
                    // 三级分类
                    String subCategory = reportKnDetailEntity.getSubcategoryValid();
                    String subCategoryValue = knowledgeSubCategoryMapper.getKnowledgeSubCategoryCn(subCategory);
                    if (subCategoryValue == null)
                        subCategoryValue = knowledgeSubCategoryMapper.getKnowledgeSubCategoryEn(subCategory);
                    if (StringUtils.isNotBlank(subCategory)) {
    
    
                        row1.createCell(7).setCellValue(subCategoryValue);
                    }
                    // 总浏览量
                    Integer countViews = reportKnDetailEntity.getCountView();
                    if (countViews == null) countViews = 0;
                    row1.createCell(8).setCellValue(countViews.toString());
                    // 总点赞量
                    Integer countHelpful = reportKnDetailEntity.getCountHelpful();
                    if (countHelpful == null) countHelpful = 0;
                    row1.createCell(9).setCellValue(countHelpful.toString());
                    // 作者
                    String author = reportKnDetailEntity.getCreatedBy();
                    if (StringUtils.isNotBlank(author)) {
    
    
                        row1.createCell(10).setCellValue(author);
                    }
                    rowNum++;
                }
            }
            workbook.write(outputStream);
            outputStream.close();
        } catch (Exception e) {
    
    
            e.printStackTrace();
        }
    }

猜你喜欢

转载自blog.csdn.net/qq_36737214/article/details/119180656