项目中如何下载销售榜单到指定excel表单中

本文详细介绍了如何在项目中通过Java编程,利用Apache POI库从数据库中获取指定年月的销售数据,然后将其整理为Excel表格并下载。包括SQL查询、数据封装、Excel工作簿创建及数据写入过程。
摘要由CSDN通过智能技术生成

项目中如何下载销售榜单到指定excel表单中

功能展示:

选择指定的年份和月份:

点击下载之后:

如何实现:

第一步pom.xml中导入对应的excel相关依赖:

        <!-- https://mvnrepository.com/artifact/org.apache.poi/poi -->
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>3.17</version>
        </dependency>

 

第二步需要查找到某年某月份的订单:这里创建了ProductList对象

因为本项目设计到product对象,order对象,orderitem对象,各自对应的数据库:

product对象:

order对象:

orderitem对象:

SQL语句查询,返回封装成ProductList

    <select id="findProductSalList" resultType="ProductList">
        SELECT products.`name`,SUM(orderitem.buynum) salnum
        FROM products,orders,orderitem
        where orders.paystate=1
        AND orders.id = orderitem.order_id
        AND orderitem.product_id=products.id
        AND YEAR(ordertime) = #{year}
        AND MONTH(ordertime) = #{month}
        GROUP BY products.id
        ORDER BY salnum DESC


    </select>

对应的结果放在

List<ProductList> plists =adminProductService.findProductSalList(year,month);

第三步把查到的结果封装到excel中(关键所在)

    //销售榜单
    @RequestMapping("/download")
    public void download(String year, String month, HttpServletResponse response,HttpServletRequest request) throws IOException {
        List<ProductList> plists =adminProductService.findProductSalList(year,month);

        for (ProductList plist : plists) {
            System.out.println(plist);
        }

        String filename = year + "年" +month + "月销售榜单";
        String sheetName = month + "月销售榜单";
        String titleName = year + "年" + month +"月销售榜单";
        String[] columnName = {"商品名称","商品销量"};

        String[][] dataList = new String[plists.size()][2];
        for (int i=0;i<plists.size();i++){
            dataList[i][0] = plists.get(i).getName();
            dataList[i][1] = plists.get(i).getSalnum();
        }

        //创建excel文件
        HSSFWorkbook wb = new HSSFWorkbook();

        //创建excel中的sheet
        HSSFSheet sheet = wb.createSheet(sheetName);
        //创建sheet的第一行
        HSSFRow row1 = sheet.createRow(0);
        //创建第一行的第一个单元格
        HSSFCell cell =row1.createCell(0);
        //合并第一行的两个单元格
        sheet.addMergedRegion(new CellRangeAddress(0,0,0,1));
        //给第一行的第一个合并后的单元格赋值
        cell.setCellValue(titleName);

        //创建第二行
        HSSFRow row = sheet.createRow(1);

        for (int i = 0; i < 2 ; i++){
           row.createCell(i).setCellValue(columnName[i]);
        }

        //创建数据行
        for (int i=0;i<dataList.length;i++){
            row = sheet.createRow(i+2);
            for(int j=0;j<2;j++){
               row.createCell(j).setCellValue(dataList[i][j]);
            }
        }

        filename = filename +".xls";
        response.setContentType("application/ms-excel;charset=UTF-8");
        response.setHeader("content-Disposition","attachment;filename="+getFilename(request,filename));

        OutputStream out = response.getOutputStream();
        wb.write(out);

    }

对下载是编码格式的设置:

    private String getFilename(HttpServletRequest request, String filename) throws UnsupportedEncodingException {

        //IE
        String[] IEBrowserKeyWords={"MSIE","Trident","Edge"};
        String userAgent=request.getHeader("User-Agent");
        for (String keyWord:IEBrowserKeyWords){
            if(userAgent.contains(keyWord)){
                return URLEncoder.encode(filename,"UTF-8");
            }
        }
        //其他
        return new String(filename.getBytes("UTF-8"),"ISO-8859-1");
    }

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值