1.首先导入xml文件,src下建包xml,将student.xml文件放入此文件夹中

[html] view plain copy
  1. <excel id="student" code="student" name="学生信息导入">
  2. <colgroup>
  3. <col index="A" width='17em'></col>
  4. <col index="B" width='17em'></col>
  5. <col index="C" width='17em'></col>
  6. <col index="D" width='17em'></col>
  7. <col index="E" width='17em'></col>
  8. <col index="F" width='17em'></col>
  9. </colgroup>
  10. <title>
  11. <tr height="16px">
  12. <td rowspan="1" colspan="6" value="学生信息导入" />
  13. </tr>
  14. </title>
  15. <thead>
  16. <tr height="16px">
  17. <th value="编号" />
  18. <th value="姓名" />
  19. <th value="年龄" />
  20. <th value="性别" />
  21. <th value="出生日期" />
  22. <th value=" 爱好" />
  23. </tr>
  24. </thead>
  25. <tbody>
  26. <tr height="16px" firstrow="2" firstcol="0" repeat="5">
  27. <td type="string" isnullable="false" maxlength="30" /><!--用户编号 -->
  28. <td type="string" isnullable="false" maxlength="50" /><!--姓名 -->
  29. <td type="numeric" format="##0" isnullable="false" /><!--年龄 -->
  30. <td type="enum" format="男,女" isnullable="true" /><!--性别 -->
  31. <td type="date" isnullable="false" maxlength="30" /><!--出生日期 -->
  32. <td type="enum" format="足球,篮球,乒乓球" isnullable="true" /><!--爱好 -->
  33. </tr>
  34. </tbody>

2.导入架包

1)commons-lang3-3.1.jar

2)jdom.jar

3)commons-io-2.2.jar

4)poi-3.11-20141221.jar

3.创建测试类

1)sax解析xml文件

[java] view plain copy
  1. //获取解析xml文件路径
  2. String path = System.getProperty("user.dir") + "/xml/student.xml";
  3. File file = new File(path);
  4. SAXBuilder builder = new SAXBuilder();
  5. //解析xml文件
  6. Document parse = builder.build(file);

2)创建excel

[java] view plain copy
  1. //创建Excel
  2. HSSFWorkbook wb = new HSSFWorkbook();
  3. //创建sheet
  4. HSSFSheet sheet = wb.createSheet("Sheet0");

3)从xml文件中取值

[java] view plain copy
  1. //获取xml文件跟节点
  2. Element root = parse.getRootElement();
  3. //获取模板名称
  4. String templateName = root.getAttribute("name").getValue();

4)设置excel列宽

[java] view plain copy
  1. int rownum = 0;
  2. int column = 0;
  3. //设置列宽
  4. Element colgroup = root.getChild("colgroup");
  5. setColumnWidth(sheet,colgroup);
  6. 此处设置列宽,将其封装成一个方法
  7. private static void setColumnWidth(HSSFSheet sheet, Element colgroup) {
  8. List<Element> cols = colgroup.getChildren("col");
  9. for (int i = 0; i < cols.size(); i++) {
  10. Element col = cols.get(i);
  11. //获取col的设置
  12. Attribute width = col.getAttribute("width");
  13. //正则表达式截取字符串,获取xml中列的单位
  14. String unit = width.getValue().replaceAll("[0-9,\\.]", "");
  15. //获取宽度值
  16. String value = width.getValue().replaceAll(unit, "");
  17. int v=0;
  18. //poi宽度转化为excel宽度
  19. if(StringUtils.isBlank(unit) || "px".endsWith(unit)){
  20. //空或者px单位的宽度转换为excel宽度
  21. v = Math.round(Float.parseFloat(value) * 37F);
  22. //em单位的宽度转换为excel宽度
  23. }else if ("em".endsWith(unit)){
  24. v = Math.round(Float.parseFloat(value) * 267.5F);
  25. }
  26. sheet.setColumnWidth(i, v);
  27. }
  28. }

5)设置标题

[java] view plain copy
  1. Element title = root.getChild("title");
  2. List<Element> trs = title.getChildren("tr");
  3. for (int i = 0; i < trs.size(); i++) {
  4. Element tr = trs.get(i);
  5. List<Element> tds = tr.getChildren("td");
  6. HSSFRow row = sheet.createRow(rownum);
  7. for(column = 0;column <tds.size();column ++){
  8. Element td = tds.get(column);
  9. //创建单元格
  10. HSSFCell cell = row.createCell(column);
  11. Attribute rowSpan = td.getAttribute("rowspan");
  12. Attribute colSpan = td.getAttribute("colspan");
  13. Attribute value = td.getAttribute("value");
  14. if(value !=){
  15. String val = value.getValue();
  16. cell.setCellValue(val);
  17. int rspan = rowSpan.getIntValue() - 1;
  18. int cspan = colSpan.getIntValue() -1;
  19. //合并单元格居中   (开始行,结束行,开始列,结束列)
  20. sheet.addMergedRegion(new CellRangeAddress(rspan, rspan, 0, cspan));
  21. }
  22. }
  23. rownum ++;
  24. }

6)设置单元格样式

[java] view plain copy
  1. HSSFCellStyle cellStyle = wb.createCellStyle();
  2. //居中
  3. cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
  4. //设置字体
  5. HSSFFont font = wb.createFont();
  6. font.setFontName("仿宋_GB2312");
  7. font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);//字体加粗
  8. //                      font.setFontHeight((short)12);//设置高度
  9. font.setFontHeightInPoints((short)12);
  10. //将字体加入样式中
  11. cellStyle.setFont(font);
  12. //设置单元格样式
  13. cell.setCellStyle(cellStyle);

7)设置表头

[java] view plain copy
  1. Element thead = root.getChild("thead");
  2. trs = thead.getChildren("tr");
  3. //循环得到节点信息
  4. for (int i = 0; i < trs.size(); i++) {
  5. Element tr = trs.get(i);
  6. //创建excel行
  7. HSSFRow row = sheet.createRow(rownum);
  8. //获取节点信息
  9. List<Element> ths = tr.getChildren("th");
  10. //循环列
  11. for(column = 0;column < ths.size();column++){
  12. //元素
  13. Element th = ths.get(column);
  14. //属性值
  15. Attribute valueAttr = th.getAttribute("value");
  16. HSSFCell cell = row.createCell(column);
  17. if(valueAttr != ){
  18. String value =valueAttr.getValue();
  19. //单元格赋值
  20. cell.setCellValue(value);
  21. }
  22. }
  23. rownum++;
  24. }

8)设置区域样式

[java] view plain copy
  1. //设置数据区域样式
  2. Element tbody = root.getChild("tbody");
  3. Element tr = tbody.getChild("tr");
  4. //repeat:初始化行数
  5. int repeat = tr.getAttribute("repeat").getIntValue();
  6. List<Element> tds = tr.getChildren("td");
  7. for (int i = 0; i < repeat; i++) {
  8. HSSFRow row = sheet.createRow(rownum);
  9. for(column =0 ;column < tds.size();column++){
  10. Element td = tds.get(column);
  11. HSSFCell cell = row.createCell(column);
  12. setType(wb,cell,td);
  13. }
  14. rownum++;
  15. }
  16. 设置属性及样式封装的方法
  17. private static void setType(HSSFWorkbook wb, HSSFCell cell, Element td) {
  18. Attribute typeAttr = td.getAttribute("type");
  19. String type = typeAttr.getValue();
  20. HSSFDataFormat format = wb.createDataFormat();
  21. HSSFCellStyle cellStyle = wb.createCellStyle();
  22. //判断节点类型
  23. //数字类型
  24. if("NUMERIC".equalsIgnoreCase(type)){
  25. cell.setCellType(HSSFCell.CELL_TYPE_NUMERIC);
  26. Attribute formatAttr = td.getAttribute("format");
  27. String formatValue = formatAttr.getValue();
  28. //如果不为空赋值,为空赋初始值
  29. formatValue = StringUtils.isNotBlank(formatValue)? formatValue : "#,##0.00";
  30. cellStyle.setDataFormat(format.getFormat(formatValue));
  31. //字符串类型
  32. }else if("STRING".equalsIgnoreCase(type)){
  33. cell.setCellValue("");
  34. cell.setCellType(HSSFCell.CELL_TYPE_STRING);
  35. //格式化 @表示文本
  36. cellStyle.setDataFormat(format.getFormat("@"));
  37. //日期类型
  38. }else if("DATE".equalsIgnoreCase(type)){
  39. cell.setCellType(HSSFCell.CELL_TYPE_NUMERIC);
  40. cellStyle.setDataFormat(format.getFormat("yyyy-m-d"));
  41. //枚举类型
  42. }else if("ENUM".equalsIgnoreCase(type)){
  43. CellRangeAddressList regions =
  44. //方法参数(开始行,结束行,开始列,结束列)
  45. new CellRangeAddressList(cell.getRowIndex(), cell.getRowIndex(),
  46. cell.getColumnIndex(), cell.getColumnIndex());
  47. Attribute enumAttr = td.getAttribute("format");
  48. String enumValue = enumAttr.getValue();
  49. //加载下拉列表内容
  50. DVConstraint constraint =
  51. //方法参数(下拉列表数组)
  52. DVConstraint.createExplicitListConstraint(enumValue.split(","));
  53. //数据有效性对象
  54. HSSFDataValidation dataValidation = new HSSFDataValidation(regions, constraint);
  55. wb.getSheetAt(0).addValidationData(dataValidation);
  56. }
  57. cell.setCellStyle(cellStyle);
  58. }

9)将文件保存到本地

[java] view plain copy
  1. File tempFile = new File("e:/" + templateName + ".xls");
  2. tempFile.delete();
  3. tempFile.createNewFile();
  4. FileOutputStream stream = FileUtils.openOutputStream(tempFile);
  5. wb.write(stream);
  6. stream.close();

4.在E盘将找到生成的excel文件,其中年龄初始值为0(xml中赋初始值为0),出生年月1900-1-0(架包默认),性别和爱好为下拉列表

Java根据模板创建excel文件相关推荐

  1. Java根据模板生成excel文件【Java】【EasyExcel】【xls】

    Background 前两天客户反应对数据导出的文件格式不太满意,然后给了我们模板,让我们按照模板导出数据.于是一通修改(excel数据量有限制他们也不管,之前我们给的csv格式). Java操作ex ...

  2. java poi导出excel模板_POI通过模板导出EXCEL文件的实例

    一般的EXCEL导出使用POI先创建一个HSSFWorkbook,然后通过不断创建HSSFRow,HSSFCell后设置单元格内容便可以完成导出. 这次在项目中需要用到模板,导出的内容包括(1.模板中 ...

  3. Java创建Excel文件

    public synchronized static int writeExcel(JSONArray jsonArray,int k) {//创建Excel文件薄HSSFWorkbook workb ...

  4. EasyPoi通过模板生成Excel文件

    之前用easypoi实现过导出简单的excel文件,最近又有需求导出固定格式的excel文件,所以在网上搜索学习了一下,现将学会后写的demo记录一下方便以后回顾. 首先照例引入maven依赖(这里版 ...

  5. java导入、导出Excel文件

    一.介绍 当前B/S模式已成为应用开发的主流,而在企业办公系统中,常常有客户这样子要求:你要把我们的报表直接用Excel打开(电信系统.银行系统).或者是:我们已经习惯用Excel打印.这样在我们实际 ...

  6. 【原】.Net创建Excel文件(插入数据、修改格式、生成图表)的方法

    1.添加Excel引用 可以在.Net选项卡下添加Microsoft.Office.Interop.Excel引用,或在COM下添加Microsoft Excel 12.0 Object Librar ...

  7. Java导出数据到Excel文件

    Java导出数据到Excel文件 前言 如何导出 导出的基本流程 测试结果 测试数据及结果 测试代码 ExcelExportUtil.class 遇到的问题 lombok的问题 解决 Cell.set ...

  8. java使用poi生成Excel文件并合并单元格

    java使用poi生成Excel文件并合并单元格        业务需要根据 分管部门 字段进行合并,现在提供一种思路. controller层 @Inject(target = "/inf ...

  9. java写excel_java写excel文件工具

    之前写过一个用java操作csv与excel文件的工具<操作CSV与EXCEL的工具>,它写入几十.几百行数据都没有问题.但如果写几万行,就有些吃力了,速度太慢.另外也没有抽出工具代码,与 ...

最新文章

  1. 最新版IDEA常用配置指南,打造你的最酷IDE
  2. python的unicode_python的unicode及其编码解码
  3. Linux学习-01-安装虚拟机与linux系统
  4. 6.0动态加载权限用PermissionGen
  5. Java中间件:淘宝网系统高性能利器
  6. ORM中的Model与DDD中的DomainModel
  7. python中index方法详解_Python中的index()方法使用教程
  8. mcc mnc 运营商对应表_在南非怎么选手机的移动电话运营商?
  9. 完美解决SpringMVC中静态资源无法找到(No mapping found for HTTP request with URI)问题...
  10. 基于wireshark和NetAssist的单机模拟抓TCP包:三次握手、四次挥手、长连接
  11. Deepin字体下载与安装
  12. SATA系列专题之三:3.4 Transport Layer传输层Error处理机制解析
  13. 【Call Me Maybe】MMD镜头+动作打包下载.zip
  14. python math.sqrt怎么扩大倍数_Python math.sqrt方法代码示例
  15. 英文聊天常见地道简写
  16. 【论文解读 KDD 2019 | GATNE 】Representation Learning for Attributed Multiplex Heterogeneous Network
  17. 三次握手与四次挥手的爱恨情仇
  18. 常用eclips快捷键小结
  19. Ant Design 中覆盖组件样式
  20. sqlalchemy 踩过的坑

热门文章

  1. sqlserver的事务回滚和设置事务保存点操作
  2. Android实例RSS客户端开发(1)
  3. 常量和指针(Pointers and Constants)
  4. Login rule 权限规则设置自动跳转页面
  5. 生产场景 bond 0实战
  6. ERP项目管理,哪一环才是关键节点?
  7. 并查集和prime和kruskal
  8. X-Content-Type-Options: nosniff
  9. 利用单臂路由实现VLAN间路由
  10. Web 2.0技术对SEO的影响