java导出excel封装



import org.apache.commons.collections.CollectionUtils;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;
import java.util.Map;


@Component
public class ExcelComponent {

    /**
     * 生成Excel
     * @param input
     * @return
     * @throws Exception
     */
    public HSSFWorkbook generateExcel(ExcelFormatInput input) throws Exception{
        try {
            // step1: 参数校验
            this.checkParams(input);

            // step2: 构建excel表头及大体样式
            HSSFWorkbook wb = new HSSFWorkbook();
            HSSFCellStyle cellStyle = wb.createCellStyle();
            cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
            HSSFSheet sheet = wb.createSheet(input.getSheetName());
            HSSFRow row = sheet.createRow(0);
            row.setHeight((short) (26.25 * 15));
            for (int i = 0,length = input.getCellNameArray().length; i < length; i++) {
                row.createCell(i).setCellValue(input.getCellNameArray()[i]);
                sheet.setColumnWidth(i,(short) (26.25 * 200));
            }

            // step3: 构建数据行
            for (int i = 0,size = input.getDataList().size(); i <size; i++) {
                Map<String,Object> map = input.getDataList().get(i);
                HSSFRow rows = sheet.createRow(i + 1);
                for (int j = 0,length = input.getDataCloumnNameArray().length; j < length; j++) {
                    rows.setHeight((short) (26.25 * 15));
                    rows.createCell(j).setCellValue(String.valueOf(map.get(input.getDataCloumnNameArray()[j])));
                }
            }
            return wb;
        } catch (Exception e) {
            e.printStackTrace();
            throw new Exception("生成Excel失败"+e.getMessage());
        }
    }

    /**
     * 参数校验
     * @param input
     */
    private void checkParams(ExcelFormatInput input) throws Exception{
        if (StringUtils.isEmpty(input.getSheetName()))
            throw new Exception("sheetName不能为空");

        if (CollectionUtils.isEmpty(input.getDataList()))
            throw new Exception("数据列表dataList不能为空");

        if (input.getCellNameArray() == null || input.getCellNameArray().length == 0)
            throw new Exception("excel列名列表cellNameArray不能为空");

        if (input.getDataCloumnNameArray() == null || input.getDataCloumnNameArray().length == 0)
            throw new Exception("数据字段列表dataCloumnNameArray不能为空");

        if (input.getDataCloumnNameArray().length != input.getCellNameArray().length)
            throw new Exception("数据字段列表dataCloumnNameArray与excel列名列表cellNameArray不匹配");
    }
}


import java.io.Serializable;
import java.util.List;
import java.util.Map;

public class ExcelFormatInput implements Serializable {

    private static final long serialVersionUID = 8249936897348760813L;

    private String[] CellNameArray;

    private String[] dataCloumnNameArray;

    private String sheetName;

    private List<Map<String,Object>> dataList;

    public String[] getCellNameArray() {
        return CellNameArray;
    }

    public void setCellNameArray(String[] cellNameArray) {
        CellNameArray = cellNameArray;
    }

    public String[] getDataCloumnNameArray() {
        return dataCloumnNameArray;
    }

    public void setDataCloumnNameArray(String[] dataCloumnNameArray) {
        this.dataCloumnNameArray = dataCloumnNameArray;
    }

    public String getSheetName() {
        return sheetName;
    }

    public void setSheetName(String sheetName) {
        this.sheetName = sheetName;
    }

    public List<Map<String, Object>> getDataList() {
        return dataList;
    }

    public void setDataList(List<Map<String, Object>> dataList) {
        this.dataList = dataList;
    }

    public ExcelFormatInput() {
    }

    public ExcelFormatInput(String[] cellNameArray, String[] dataCloumnNameArray, String sheetName, List<Map<String, Object>> dataList) {
        CellNameArray = cellNameArray;
        this.dataCloumnNameArray = dataCloumnNameArray;
        this.sheetName = sheetName;
        this.dataList = dataList;
    }
}

主方法:

/**
     * 调账记录数据导出
     * @param acctAdjustQuery
     * @param response
     * @throws Exception
     */
    @RequestMapping("/acctAdjustProcessLogExport")
    public void acctAdjustProcessLogExport(AcctAdjustQuery acctAdjustQuery, HttpServletResponse response, HttpServletRequest request) throws Exception{
        OutputStream os = null;
        try {
            String sheetName = "调账记录";
            String[] cellNameArray = {"调账时间", "订单号", "商户号", "商户名称", "实付金额", "FTP支付结算金额", "代付金额", "FTP代付结算金额", "支付结果", "代付结果", "原支付结果", "原代付结果", "操作人"};
            String[] dataColumnNameArray = {"createTime", "orderNum", "merId", "shopName", "payAmt", "ftpPayCalcAmt", "paidAmt", "ftpPaidCalcAmt", "paySts", "paidSts", "oldPaySts", "oldPaidSts", "createUser"};

            List<Map<String,Object>> dataList = acctAdjustService.queryProcessLogExprotData(acctAdjustQuery);
            ExcelFormatInput input = new ExcelFormatInput(
                    cellNameArray,
                    dataColumnNameArray,
                    sheetName,
                    dataList
            );
            HSSFWorkbook wb = excelComponent.generateExcel(input);
            os = response.getOutputStream();
            response.setContentType("application/vnd.ms-excel;charset=utf-8");
            response.setHeader("Content-disposition",
                    "attachment;filename=" + DownChineseEncode.setFileDownHeader(request, response, "调账记录.xls"));
            wb.write(os);
            os.flush();
            os.close();
        } catch (Exception e) {
            e.printStackTrace();
            throw  new Exception("调账记录导出失败"+e.getMessage());
        } finally {
            if (os != null) {
                try {
                    os.flush();
                    os.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 在Java导出Excel时,可以采用jxl或poi等第三方库进行操作。在导出Excel的过程中,如果Excel文件过大或数据量较多,可能会导致导出时间较长,因此需要添加进度条来提示用户导出的进度。 一般情况下,可以使用Swing组件中的JProgressBar(进度条)来实现进度条效果。在导出Excel的过程中,可以通过不断更新进度条的值来展示进度。在更新进度条时,需要注意线程同步问题,避免出现并发问题。 具体实现步骤如下: 1. 创建一个进度条(JProgressBar)并设定进度条的最大值(即导出数据总量); 2. 在导出Excel数据的过程中,根据实际情况更新进度条的值(使用setValue()方法); 3. 为了避免更新进度条与导出Excel数据的线程冲突,可以使用SwingWorker来进行多线程操作; 4. 在导出完毕后,将进度条设置为完成状态(setValue(maximum))。 同时,为了让用户能够明确了解到导出进度,还可以在进度条下添加文字提示或使用弹窗等方式提醒用户导出的进度。通过以上步骤,即可在Java中实现导出Excel带进度条功能。 ### 回答2: Java导出Excel进度条在实际开发中很常见,对于数据量较大的导出操作尤其有用。常用的实现方式是利用多线程和Ajax技术配合完成。下面简单介绍一下具体步骤: 1. 在服务器端,将导出Excel的代码封装成一个单独的方法,并把方法放入一个线程中运行。 2. 在前端页面中,使用Ajax向服务器端发送请求,触发Excel导出操作,并异步获取服务器端返回的导出进度信息。 3. 在前端页面中实现进度条功能,即获取服务器端返回的导出进度信息,计算已完成的比例,并将进度条实时反映到页面上。 4. 当导出操作完成后,服务器端将导出结果存储到指定的位置并返回导出完成信息给前端页面,此时前端页面可以提示用户下载导出结果。 实现Java导出Excel进度条需要涉及到多线程,Ajax,进度条等相关技术,需要开发人员熟练掌握。正确使用这些技术可以大大提高导出操作的用户体验,减少用户等待时间,提高系统的可用性。 ### 回答3: 在Java中,我们可以使用Apache POI库来创建和操作Excel文件。但是,当我们从数据库或其他数据源中提取大量数据并写入Excel文件时,这可能需要一些时间。在这种情况下,为了提高用户体验并显示进度,我们可以创建一个进度条。 首先,我们需要创建一个工作表,并确定需要写入Excel的列和行的数量。然后,我们可以创建一个进度条的GUI组件并在主线程中运行。我们可以使用Swing的JProgressBar组件,并将其添加到JFrame的容器中。 接下来,我们需要在程序中安排一个方法来更新进度条。在此方法中,我们要计算导出过程的百分比,并将其传递给进度条。在Apache POI中,我们可以使用Row和Cell来写入数据。在写入每个单元格之后,我们可以使用更新百分比的方法来调用进度条,以便在GUI上添加进度。 完成导出后,我们可以使用Swing的JOptionPane来提示用户Excel文件已成功生成,并提供打开文件所需的选项。 最后,为了确保在开始导出之前显示进度条GUI,我们可以使用SwingUtilities工具的invokeLater()方法在事件调度线程上执行GUI初始化任务。这将确保GUI在导出开始之前准备就绪,并且不会与导出线程发生冲突。 总之,Java导出Excel进度条可以通过创建Swing的JProgressBar组件和更新方法来实现。通过在事件调度线程上初始化GUI,并在导出过程中更新进度条,我们可以提高用户体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@淡 定

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值