java通过jxl导出excel表格

1 篇文章 0 订阅

在日常工作中,经常会碰到需要将数据导出至excel表格中,便于打印等功能

下面就通jxl来将编辑excel表格并且导出

public String createExcel(File savePath, List<JSONObject> data) {
        if (data == null) {
            throw new BaseException("保存失败");
        }

        WritableWorkbook writableWorkbook = null;
        try {
            // 创建表格
            writableWorkbook = Workbook.createWorkbook(savePath);
            // 创建Sheet 
            WritableSheet writableSheet = writableWorkbook.createSheet("sheet1", 0);
            //单元格格式
            WritableCellFormat centerCellFormat = centerCellFormat();

            writeTitle(writableSheet);
            writeSecondRows(writableSheet);
            writeTableTitle(writableSheet, centerCellFormat);

            int row = 3;
            int cel = 0;
            Iterator<JSONObject> iterator = data.iterator();
            //填充表格数据
            while (iterator.hasNext()) {
                cel = 0;
                JSONObject detailedData = iterator.next();

                //保存格式为文本
                Label textLabel = new Label(cel, row, detailedData.getString("text"), centerCellFormat);
                //列宽
                writableSheet.setColumnView(cel, 14);

                //保存格式为数字
                Number numberCount = new Number(++cel, row, Integer.parseInt(detailedData.getString("number")), centerCellFormat);
                //列宽
                writableSheet.setColumnView(cel, 14);

                writableSheet.addCell(textLabel);
                writableSheet.addCell(numberCount);

                //行高
                writableSheet.setRowView(row, 600);
                row++;
            }

            writableWorkbook.write();
            return "SAVESUCCESS";
        } catch (IOException e) {
            logger.error("保存文件失败", e);
        } catch (RowsExceededException e) {
            logger.error("保存文件失败", e);
        } catch (WriteException e) {
            logger.error("保存文件失败", e);
        } finally {
            if (writableWorkbook != null) {
                try {
                    writableWorkbook.close();
                } catch (WriteException e) {
                    logger.error("close WritableWorkbook error", e);
                } catch (IOException e) {
                    logger.error("close WritableWorkbook error", e);
                }
            }
        }
    }

通常表格组成: 第一行表格标题, 第二行重要的几个数据,比如日期,之类的,第三行表格的列标题,后面就是表格数据

这里先画表格第一行的标题

/**
     * 
     * writeTitle:画表格第一行标题 <br/>
     * @param writableSheet
     * @throws WriteException
     */
    private static void writeTitle(WritableSheet writableSheet) throws WriteException {
        // 设置单元格的样式
        WritableCellFormat titleCellFormat = new WritableCellFormat();
        // 设置水平居中
        titleCellFormat.setAlignment(Alignment.CENTRE);
        // 设置垂直居中
        titleCellFormat.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE);
        // 加边框
        titleCellFormat.setBorder(Border.ALL, BorderLineStyle.THIN);
        titleCellFormat.setFont(new WritableFont(WritableFont.createFont("宋体"), 26, WritableFont.BOLD));

        //合并第一行的单元格,两列,合并两列
        writableSheet.mergeCells(0, 0, 2, 0);
        Label titleLabel = new Label(0, 0, "表格第一行标题", titleCellFormat);
        writableSheet.addCell(titleLabel);
    }

然后再画第二行的数据

/**
     * 
     * writeSecondRows: 画表格第二行 <br/>
     * 
     * @param writableSheet
     * @param optDate
     *              操作日期
     * @throws WriteException
     */
    private void writeSecondRows(WritableSheet writableSheet, String optDate) throws WriteException {
        // 设置单元格的样式
        WritableCellFormat cellFormat = new WritableCellFormat();
        // 设置水平居中
        cellFormat.setAlignment(Alignment.LEFT);
        // 设置垂直居中
        cellFormat.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE);
        // 加边框
        cellFormat.setBorder(Border.ALL, BorderLineStyle.THIN);
        cellFormat.setFont(new WritableFont(WritableFont.createFont("宋体"), 12, WritableFont.BOLD));

        StringBuffer optTime = new StringBuffer();

        //处理时间
        optTime.append(optDate.substring(0, 4)).append("-").append(optDate.substring(4, 6))
                .append("-").append(optDate.substring(6, 8));

        //合并第二行的单元格
        writableSheet.mergeCells(0, 1, 2, 1);
        Label optDateLabel = new Label(0, 1, "日期:" + optTime, cellFormat);
        writableSheet.addCell(optDateLabel);
    }

最后画第三行

/**
     * 
     * writeTableTitle: 画表格第三行 列标题 <br/>
     * 
     * @param writableSheet
     * @param centerCellFormat
     * @throws WriteException
     */
    private void writeTableTitle(WritableSheet writableSheet, WritableCellFormat centerCellFormat)
            throws WriteException {
        Label textLabel = new Label(0, 2, "text", centerCellFormat);
        Label numberCount = new Label(1, 2, "number", centerCellFormat);

        writableSheet.addCell(textLabel);
        writableSheet.addCell(numberCount);
    }

最后,还有两个比较常用的格式


    private static WritableCellFormat centerCellFormat() throws WriteException {
        WritableCellFormat cellFormat = new WritableCellFormat();
        // 内容水平居中
        cellFormat.setAlignment(Alignment.CENTRE);
        // 内容垂直居中
        cellFormat.setVerticalAlignment(VerticalAlignment.CENTRE);
        // 加边框
        cellFormat.setBorder(Border.ALL, BorderLineStyle.THIN);
        cellFormat.setFont(new WritableFont(WritableFont.createFont("宋体"), 12, WritableFont.NO_BOLD));
        // 自动换行
        cellFormat.setWrap(true);

        return cellFormat;
    }
private static WritableCellFormat cellLeftFormat() throws WriteException {
        // 设置普通字体,大小11,黑色
        WritableFont fontSize = new WritableFont(WritableFont.TIMES, 11);
        WritableCellFormat wcfFC = new jxl.write.WritableCellFormat(fontSize);
        // 设置单元格样式
        wcfFC.setBorder(jxl.format.Border.ALL, jxl.format.BorderLineStyle.THIN);
        wcfFC.setAlignment(jxl.format.Alignment.LEFT);
        wcfFC.setWrap(true);
        return wcfFC;
    }

读取excel

public static void read (Workbook book) {  
        int rows;  
        //得到Excel中工作表数  
        int sheetNumber = book.getNumberOfSheets();  
        //得到每个表的名称  
        String [] sheetNameList = book.getSheetNames();  
        //得到每个工作表  
        Sheet [] sheetList = book.getSheets();  
          
        //遍历每个单元格,得到单元格的内容,并输出。注意得到单元格的内容是以字符串形式返回的。  
        for(int i = 0;i < sheetNumber;i++) {  
            System.out.println("############## " + sheetNameList[i] + " ##############");  
            //得到该工作表中数据的行数  
            rows = sheetList[i].getRows();  
            for(int j = 0;j < rows;j++) {  
                //得到每一行的单元格  
                Cell [] cellList = sheetList[i].getRow(j);  
                for (Cell cell : cellList) {  
                    System.out.print(cell.getContents() + "  ");  
                }  
                System.out.println();  
            }            
        }        
    }  
    public static void main(String [] args) throws IOException, BiffException  {  
        try {  
            //文件D://JEtest//read.xls 要存在,并且含有数据。  
            File file = new File("D://JEtest//read.xls");  
            //得到工作簿  
            Workbook book = Workbook.getWorkbook(file);   
            TRead.read(book);  
            book.close();              
        }catch (IOException | BiffException e) {  
            System.out.println("Exception:  " + e);  
            throw e;  
        }  
    }   

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值