使用web程序导出Excel,PDF和CSV三种文件

写在前面

最近参与了一个后台的项目,时间一直比较忙,也连续有段时间没有记东西了。这两天做了个节目广告排期的导出功能,里面有用到三种文件的导出,分别是Excel,PDF和CSV文件。网上有很多文章讲解的比较详细,这里只是做下记录以便以后遇到查看。

导出Excel

之前用过POI的方式,这次用的是jxl,可以自行下载jxl.jar。一般自己也喜欢看可以直接跑的小demo,简洁明了下面就稍微把代码整理下:
下面给出个例子:

public final void exportSchedulesXls() {
        OutputStream os = null;
        WritableWorkbook wbook = null;
        try {
            response.reset(); //清空输出流
            response.setHeader("Content-disposition",
                    "attachment; filename=schedule.xlsx"); // 设定输出文件头
            response.setContentType("application/msexcel"); // 定义输出类型
            os = response.getOutputStream();
            wbook = Workbook.createWorkbook(os);
            //Excel表中第一个参数表示列,第二个表示行
            WritableSheet wsheet = wbook.createSheet("sheet1", 0);
            WritableFont bold = new WritableFont(WritableFont.createFont("Calibri"), 11, WritableFont.BOLD);
            //设置单元格格式
            WritableCellFormat titleCellFormat = new WritableCellFormat(bold);
            titleCellFormat.setAlignment(jxl.format.Alignment.CENTRE);
            titleCellFormat.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE);
            //设置普通单元格
            WritableFont font = new WritableFont(WritableFont.createFont("Calibri"), 11, WritableFont.NO_BOLD);
            WritableCellFormat cellFormat = new WritableCellFormat(font);
            cellFormat.setAlignment(jxl.format.Alignment.CENTRE);
            cellFormat.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE);
            cellFormat.setWrap(true);
            wsheet.addCell(new Label(0, 0, "排期列表", titleCellFormat));//标题
            wsheet.mergeCells(0, 0, 6, 0);//合并单元格
            wsheet.addCell(new Label(0, 1, "编号", titleCellFormat));
            wsheet.addCell(new Label(1, 1, "文件名", titleCellFormat));
            wsheet.addCell(new Label(2, 1, "广告类型", titleCellFormat));
            wsheet.addCell(new Label(3, 1, "频道包", titleCellFormat));
            wsheet.addCell(new Label(4, 1, "开始日期", titleCellFormat));
            wsheet.addCell(new Label(5, 1, "结束日期", titleCellFormat));
            wsheet.addCell(new Label(6, 1, "缩略图", titleCellFormat));
            //设置列宽
            wsheet.setColumnView(0, 5);
            wsheet.setColumnView(1, 50);
            wsheet.setColumnView(2, 20);
            wsheet.setColumnView(3, 22);
            wsheet.setColumnView(4, 25);
            wsheet.setColumnView(5, 25);
            wsheet.setColumnView(6, 25);
            List<String> ssbList = new ArrayList<>();
            //设置单元格内容
            for(int i=0; i<100; i++) {
                wsheet.addCell(new Label(0, i + 2, String.valueOf(i+1), cellFormat));
                wsheet.addCell(new Label(1, i + 2, "CHANNEL BAR CHANGHWONG SD 170 pixel x 134 pixel.jpg", cellFormat));
                wsheet.addCell(new Label(2, i + 2, "ChannelBar", cellFormat));
                wsheet.addCell(new Label(3, i + 2, "", cellFormat));//Channel Packets
                wsheet.addCell(new Label(4, i + 2, "2016-05-01 00:13:00", cellFormat));
                wsheet.addCell(new Label(5, i + 2, "2016-05-10 00:13:00", cellFormat));
                wsheet.addCell(new Label(6, i + 2, "", cellFormat));//Thumbnails
            }
            wbook.write(); //从内存中写入文件中
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (wbook != null) {
                try {
                    wbook.close();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
            if (os != null) {
                try {
                    os.close();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
    }

实际中自行做变换。结果如下:
这里写图片描述

导出PDF

使用的是iText开源包,iText-2.1.7.jar, itext-rtf-2.1.7.jar和iTextAsian.jar,最后一个是处理中文字体。

public final void exportSchedulesPdf() {
        OutputStream os = null;
        Document document = new Document();
        try {
            response.reset(); //清空输出流
            response.setHeader("Content-disposition", "attachment; filename=schedule.pdf"); // 设定输出文件头
            response.setContentType("application/octet-stream"); // 定义输出类型
            os = response.getOutputStream();

            // 建立一个Document对象
            BaseFont bfChinese = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
            Font keyfont = new Font(bfChinese, 11, Font.BOLD);// 设置字体大小
            Font textfont = new Font(bfChinese, 9, Font.NORMAL);// 设置字体大小
            document.setPageSize(PageSize.A4);// 设置页面大小
            ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
            PdfWriter.getInstance(document, outputStream);
            document.open();
            PdfPTable table = PdfUtil.createTable(new float[]{1f, 4f, 2f, 2f, 2.5f, 2.5f, 2f});
            table.addCell(PdfUtil.createCell("标题xxxx", keyfont, Element.ALIGN_CENTER, 7, false));
            table.addCell(PdfUtil.createCell("编号", keyfont, Element.ALIGN_CENTER));
            table.addCell(PdfUtil.createCell("文件名", keyfont, Element.ALIGN_CENTER));
            table.addCell(PdfUtil.createCell("广告类型", keyfont, Element.ALIGN_CENTER));
            table.addCell(PdfUtil.createCell("频道包", keyfont, Element.ALIGN_CENTER));
            table.addCell(PdfUtil.createCell("开始日期", keyfont, Element.ALIGN_CENTER));
            table.addCell(PdfUtil.createCell("结束日期", keyfont, Element.ALIGN_CENTER));
            table.addCell(PdfUtil.createCell("缩略图", keyfont, Element.ALIGN_CENTER));
            //设置单元格
            for(int i=0; i<100; i++) {
                ScheduleServiceBean ssb = ssbList.get(i);
                String filepath = ssb.getFilepath();
                if(StringUtils.isNotBlank(filepath)) {
                    filepath = filepath.substring(filepath.lastIndexOf("/") + 1);
                }
                table.addCell(PdfUtil.createCell(String.valueOf(i+1), textfont));
                table.addCell(PdfUtil.createCell("CHANNEL BAR CHANGHWONG SD 170 pixel x 134 pixel.jpg", textfont));
                table.addCell(PdfUtil.createCell("ChannelBar", textfont));
                table.addCell(PdfUtil.createCell("", textfont));
                table.addCell(PdfUtil.createCell("2016-5-1 0:13:00", textfont));
                table.addCell(PdfUtil.createCell("2016-5-2 0:13:00", textfont));
                table.addCell(PdfUtil.createCell("", textfont));
            }
            document.add(table);
            document.close();
            response.setContentLength(outputStream.size());
            outputStream.writeTo(os);
            os.flush();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (os != null) {
                try {
                    os.close();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
    }

运行结果生成pdf文件如下:
这里写图片描述

导出CSV

这个比较简单,不用使用第三方插件,因为文本都是逗号隔开。

public final void exportSchedulesCsv() {
        OutputStream os = null;
        String adtype = request.getParameter("adtype");
        String exportDate = request.getParameter("exportdate");
        int iadtype = Integer.parseInt(adtype);
        try {
            //UserJson user = (UserJson)session.get("user");   
            //AddLogParam logparam = new AddLogParam("exportSchedule", "sumExportScheduleCsv", new Object[]{user.getUserName(), ""},"2",user.getUserName());
            response.reset(); //清空输出流
            response.setHeader("Content-disposition",
                    "attachment; filename=schedule.csv"); // 设定输出文件头
            response.setContentType("application/csv"); // 定义输出类型
            os = response.getOutputStream();

            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
            SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-M-d h:mm:ss");
            StringBuilder sb = new StringBuilder();
            //标题
            String header = "ID,File Name,AD Type,Channel Packets,Start Date,End Date,Thumbnails\r\n";
            sb.append(header);
            List<ScheduleServiceBean> ssbList = scheduleService.getAllSchedules(iadtype, exportDate);
            if(ssbList != null && ssbList.size() > 0) {
                for(int i=0; i<ssbList.size(); i++) {
                    ScheduleServiceBean ssb = ssbList.get(i);
                    String filepath = ssb.getFilepath();
                    if(StringUtils.isNotBlank(filepath)) {
                        filepath = filepath.substring(filepath.lastIndexOf("/") + 1);
                    }
                    String channelPackets = " ";//Channel Packets暂时为空
                    sb.append(String.valueOf(i+1)).append(",")
                        .append(filepath).append(",")
                        .append(ssb.getAdtype()).append(",")
                        .append(channelPackets).append(",");
                    String beginDate = ssb.getStartdate() + " " + ssb.getStarttime();
                    sb.append(sdf1.format(sdf.parse(beginDate))).append(",");
                    String endDate = ssb.getEnddate() + " " + ssb.getEndtime();
                    sb.append(sdf1.format(sdf.parse(endDate))).append(",");
                    String thumbnails = " ";//Thumbnails暂时为空
                    sb.append(thumbnails).append("\r\n");
                }
                os.write(sb.toString().getBytes());
            }

            logparam.setState(Defines.EXPORT_SCHEDULE);
            logService.addLog(logparam, request);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (os != null) {
                try {
                    os.close();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
    }

运行结果如下:
这里写图片描述

结束

就记这么多吧,虽然不是很详细,但是希望能帮到有需要的人。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: luckysheet是一款基于网页的在线表格软件,它提供了导出文件的功能。导出文件是指将luckysheet表格保存为其他格式文件,例如Excel文件CSV文件。 要导出luckysheet表格,我们可以按照以下步骤进行操作: 1. 在luckysheet界面上方的菜单栏中,找到“文件”选项,点击打开下拉菜单。 2. 在下拉菜单中,选择“导出”选项,再点击打开导出文件格式选项。这可以根据我们的需求选择导出文件格式,如Excel文件CSV文件等。 3. 在弹出的导出窗口中,我们可以选择导出的具体设置,如选择导出的工作表、保护工作表等。 4. 选择好导出设置后,点击“确定”按钮,luckysheet会开始将表格导出为我们选择的文件格式。 5. 导出完成后,我们可以在指定的文件保存位置找到导出文件。 通过以上步骤,我们可以轻松地将luckysheet表格导出为其他格式文件导出文件可以在本地保存,方便我们在没有网络连接的情况下查看和编辑表格数据。同时,导出功能也为我们提供了多种选择,以便根据不同需求导出不同格式文件。 总而言之,luckysheet提供了方便的导出功能,让我们能够将表格保存为其他格式文件,以满足不同的使用场景和需求。 ### 回答2: luckysheet是一款基于Web的在线办公软件,提供了丰富的电子表格功能。当我们在luckysheet中完成了数据的处理和分析后,可以通过导出功能将数据导出为不同的格式,方便我们进行进一步的使用和分享。 首先,luckysheet支持将数据导出Excel格式。通过导出Excel,我们可以将数据保存为一个.xlsx文件,保留了原有的表格结构和数据内容,并且可以在Excel中进行进一步的编辑和操作。 其次,luckysheet还支持将数据导出CSV格式CSV是一种通用的数据格式,可以被多种软件和系统所读取和使用导出CSV后,数据可以被方便地导入到其他电子表格软件中,或者用于数据分析和处理。 除了ExcelCSV格式,luckysheet还支持将数据导出PDF格式。通过导出PDF,我们可以将数据以静态的形式保存下来,可以方便地进行打印、共享和查阅,而且不会受到不同操作系统和软件的版本兼容性的影响。 通过导出功能,我们可以选择导出全部数据或者选定的部分数据,还可以设置导出文件名和保存路径。同时,导出过程还可以进行一些设置,比如设置密码保护、权限控制等功能,保证数据的安全性和隐私性。 综上所述,luckysheet的导出功能可以帮助我们将在软件中处理的数据方便地保存和使用,提高工作效率和数据的灵活性。无论是导出ExcelCSV还是PDF格式,都可以满足我们不同的需求。 ### 回答3: Luckysheet是一款基于Web的电子表格软件,它是由国内开发团队独立开发的一款在线表格工具。在使用Luckysheet时,我们可以方便地导出表格数据。 Luckysheet提供了多种导出表格的方式。首先,我们可以选择将表格数据导出Excel文件,这样我们就可以在本地使用Excel软件打开和编辑导出文件。其次,Luckysheet还支持将表格导出CSV格式文件,这种格式非常灵活,可以用于在其他数据处理工具中进行进一步的数据操作。同时,我们还可以将表格导出PDF格式文件,这样我们就可以方便地分享和打印表格数据。 在Luckysheet中,导出表格非常简单。我们只需要点击工具栏中的“导出”按钮,然后选择导出文件格式,即可将表格数据导出到本地。导出的过程非常快速,并且导出文件与原始表格数据完全一致,包括格式、公式和图表等内容。此外,Luckysheet还提供了一些导出选项,例如可以选择导出的表格范围、是否包含行列标题等。 总之,Luckysheet是一款非常方便易用的在线表格工具,它提供了多种导出表格的方式,包括将表格导出Excel文件CSV文件PDF文件等。无论是分享、打印还是进一步的数据处理,Luckysheet都能满足我们的需求。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值