zoukankan      html  css  js  c++  java
  • jxl生成excel

    最近项目中要用到生成excel,就写下来分享给大家

    其实很简单,码代码,自己看:

    首先需要导jxl jar包进来

    <!-- jxl execl -->
    <dependency>
    <groupId>net.sourceforge.jexcelapi</groupId>
    <artifactId>jxl</artifactId>
    <version>2.6.12</version>
    </dependency>

    代码:

    public static void main(String[] args) throws IOException, RowsExceededException, WriteException {
    File excelFile = new File("C:\Users\zhangzhen\Desktop\excel\补盲扩总表.xls");
    WritableWorkbook workbook = Workbook.createWorkbook(excelFile);// 生成工作簿
    WritableSheet sheet = workbook.createSheet("扩容明细", 0);// 生成工作表,此处参数一为工作表名称,参数二为第几个工作业,默认从0开始
    // 居中 字体11
    WritableFont Bwf1 = new WritableFont(WritableFont.ARIAL, 11, WritableFont.NO_BOLD, false);
    WritableCellFormat wcf1 = new WritableCellFormat(Bwf1);
    wcf1.setAlignment(jxl.write.Alignment.CENTRE);//
    // 设置垂直对齐为居中对齐
    wcf1.setVerticalAlignment(VerticalAlignment.CENTRE);
    // 设置框线为实线
    wcf1.setBorder(jxl.format.Border.ALL, BorderLineStyle.THIN);

    Map<String, Object> map = new LinkedHashMap<String, Object>();// 设置表头,
    map.put("需求日期", 20);// 表头,表格宽度
    sheet.mergeCells(0, 0, 0, 1);// 此函数为合并单元格,参数分别为列,行,合并到哪一列,合并到哪一行,
    map.put("扩容类型", 20);
    sheet.mergeCells(1, 0, 1, 1);
    map.put("所属单位", 20);
    sheet.mergeCells(2, 0, 2, 1);
    map.put("所属工队", 20);
    sheet.mergeCells(3, 0, 3, 1);
    map.put("是否超时", 20);
    sheet.mergeCells(4, 0, 4, 1);
    map.put("修补扩类型", 20);
    sheet.mergeCells(5, 0, 5, 1);
    map.put("关联安装工单号", 20);
    sheet.mergeCells(6, 0, 6, 1);
    map.put("片区", 20);
    sheet.mergeCells(7, 0, 7, 1);
    map.put("镇区", 20);
    sheet.mergeCells(8, 0, 8, 1);
    map.put("五级站点", 60);
    sheet.mergeCells(9, 0, 9, 1);
    map.put("需求内容", 60);
    sheet.mergeCells(10, 0, 10, 1);
    map.put("箱体名称", 60);

    map.put("分光器名称", 60);

    map.put("完成情况", 20);// 此处因为合并单元格,第十四列和第十五列需另外设置列宽
    sheet.setColumnView(14, 20);
    sheet.setColumnView(15, 20);
    sheet.mergeCells(13, 0, 15, 0);
    setCols(sheet, 0, 0, map, wcf1);
    map.clear();
    map.put("结算费用", 20);
    sheet.mergeCells(16, 0, 16, 1);
    map.put("完工日期", 20);
    sheet.mergeCells(17, 0, 17, 1);
    map.put("现场当前环节", 20);
    sheet.mergeCells(18, 0, 18, 1);
    setCols(sheet, 16, 0, map, wcf1);
    map.clear();
    map.put("", 60);
    setCols(sheet, 19, 0, map, wcf1);
    setCols(sheet, 20, 0, map, wcf1);
    map.clear();
    map.put("系统当前环节", 20);
    sheet.mergeCells(21, 0, 21, 1);
    setCols(sheet, 21, 0, map, wcf1);
    map.clear();
    map.put("", 20);
    setCols(sheet, 22, 0, map, wcf1);
    setCols(sheet, 23, 0, map, wcf1);
    setCols(sheet, 24, 0, map, wcf1);
    setCols(sheet, 25, 0, map, wcf1);
    setCols(sheet, 26, 0, map, wcf1);
    map.clear();
    map.put("服开工单号", 60);
    sheet.mergeCells(27, 0, 27, 1);
    map.put("服开起单时间", 60);
    sheet.mergeCells(28, 0, 28, 1);
    map.put("派单时间", 60);
    sheet.mergeCells(29, 0, 29, 1);
    map.put("服开环节", 60);
    sheet.mergeCells(30, 0, 30, 1);
    map.put("备注", 60);
    sheet.mergeCells(31, 0, 31, 1);
    setCols(sheet, 27, 0, map, wcf1);
    // 设置第二行表头
    map.clear();
    map.put("", 60);
    setCols(sheet, 11, 1, map, wcf1);
    setCols(sheet, 12, 1, map, wcf1);
    map.clear();
    map.put("箱体个数", 20);
    map.put("分光器数", 20);
    map.put("总端口数", 20);
    setCols(sheet, 13, 1, map, wcf1);
    map.clear();
    map.put("装维人员联系电话", 60);
    map.put("装维人员姓名", 60);
    setCols(sheet, 19, 1, map, wcf1);
    map.clear();
    map.put("GF箱体材料", 20);
    map.put("光缆芯数", 20);
    map.put("光缆米数", 20);
    map.put("分光器类型", 20);
    map.put("分光器个数", 20);
    setCols(sheet, 22, 1, map, wcf1);

    // 填充数据
    List list = new ArrayList<Object>();
    List list1 = new ArrayList<Object>();
    list1.add("2019-08-15");
    list1.add("TOP站点");
    list1.add("铁通本网");
    list1.add("新余施工队");
    list1.add("否");
    list1.add("新址加箱");
    list1.add("GC-20150822");
    list1.add("北区");
    list1.add("寮步镇");
    list1.add("(铁通本网)西溪社区珠东新村");
    list1.add("新址加箱:【JIA】武威市苏武镇苏武社区15号后墙-GJ20建议安装位置:西溪珠西250号");
    list1.add("【JIA】武威市苏武镇苏武社区新村西溪珠西250号-GJ20-GF18");
    list1.add("武威市苏武镇苏武社区新村城中村小区(二级)1/4-POS001-1:8-快");
    list1.add("1");
    list1.add("1");
    list1.add("8");
    list1.add("");
    list1.add("2019-08-15");
    list1.add("扩容完成");
    list1.add("15623144000");
    list1.add("新余");
    list1.add("");
    list1.add("016芯 非金属");
    list1.add("6芯");
    list1.add("2");
    list1.add("插片式1:8-SC(大方头)");
    list1.add("1");
    list1.add("201905220120");
    list1.add("2019-08-15");
    list1.add("2019-08-15");
    list1.add("1");
    list1.add("暂无");
    list.add(list1);

    setExeclSheetData(2, 0, list, sheet, wcf1);

    workbook.write();
    workbook.close();
    }

    /***
    *
    * @param sheet 工作表
    * @param cols 第几列
    * @param rows 第几行
    * @param map 表头数据
    * @param format 单元格格式
    * @throws RowsExceededException
    * @throws WriteException
    */
    public static void setCols(WritableSheet sheet, int cols, int rows, Map<String, Object> map,
    WritableCellFormat format) throws RowsExceededException, WriteException {

    int c = cols;

    Set<Entry<String, Object>> entrySet = map.entrySet();
    for (Entry<String, Object> entry : entrySet) {
    int width = (int) entry.getValue();
    sheet.addCell(new Label(c, rows, entry.getKey(), format));// 设置单元格内容和格式
    sheet.setColumnView(c, width);// 设置单元格格式
    c++;
    }

    }

    /**
    * 指定起点的块级数据填充
    *
    * @param row 起点 行
    * @param col 起点 列
    * @param list 欲填充数据的二维列表
    * @param sheet
    * @param format 单元样式 若设置为null 将使用默认样式
    * @throws RowsExceededException
    * @throws WriteException
    */

    public static void setExeclSheetData(int row, int col, List<List<Object>> list, WritableSheet sheet,
    WritableCellFormat format) throws RowsExceededException, WriteException {

    if (format == null) {
    WritableFont Bwf = new WritableFont(WritableFont.ARIAL, 10, WritableFont.NO_BOLD, false);
    format = new jxl.write.WritableCellFormat(Bwf);
    format.setAlignment(jxl.write.Alignment.LEFT);// 默认居左
    // 设置垂直对齐为居中对齐
    format.setVerticalAlignment(VerticalAlignment.CENTRE);
    // 设置框线为实线
    format.setBorder(jxl.format.Border.ALL, BorderLineStyle.THIN);
    }

    // 索引第几行的数据
    int index = 0;
    // 行
    for (int i = row; i < list.size() + row; i++) {
    // 索引的第几列的数据
    int index_x = 0;
    // 列
    for (int j = col; j < list.get(index).size() + col; j++) {

    Object data = list.get(index).get(index_x);
    // 数值型
    if (data instanceof Double) {//此处做判断是为方便使用聚合函数
    double d = ((Double) data).doubleValue();
    jxl.write.Number numberC = new jxl.write.Number(j, i, d, format);
    sheet.addCell(numberC);
    } else if (data instanceof Float) {
    float d = ((Float) data).floatValue();
    jxl.write.Number numberC = new jxl.write.Number(j, i, d, format);
    sheet.addCell(numberC);
    } else if (data instanceof Integer) {
    int d = ((Integer) data).intValue();
    jxl.write.Number numberC = new jxl.write.Number(j, i, d, format);
    sheet.addCell(numberC);
    } else {// 字符串 类型
    sheet.addCell(new Label(j, i, data + "", format));
    }

    index_x++;
    }
    index++;
    }

    }

    就这么多,上面注释也写得很清楚,不懂可以下方留言(本人也是菜鸟,不喜勿喷!)

  • 相关阅读:
    创建你的一个composer包
    git 命令添加整个文件夹以及文件夹下的内容
    Svn在工作中的实践感悟
    Ubuntu17.04 sudo apt-get update升级错误
    Ubuntu composer 安装thinkphp5 失败,报错:[ErrorException] mkdir(): Permission denied
    2017年总结与展望
    Html 解决数字和字母不换行
    Github上html页面(包括CSS样式和JS效果)如何显示出来
    Ubuntu下crontab启动、重启、关闭命令
    ubuntu14.04 安装 php Composer时 composer:未找到命令
  • 原文地址:https://www.cnblogs.com/zhangxiaozhen/p/11406271.html
Copyright © 2011-2022 走看看