概述
excel比较常用的工具类就是poi和jxl当然后者已经停止维护很久而且只支持excel,不支持excel.对版,最大行数是65536行 ,对以上版本,最大行数是1048576行.简单格式的数据导出jxl就够用了,但是复杂格式的数据则用excel模板较为方便<dependency><groupId>net.sf.jxls</groupId><artifactId>jxls-core</artifactId><version>1.0.6</version></dependency>后者也已经停止维护,最新的包是的,不过相对于来说我更喜欢用后者,更方便,相对于前者不用配置作用域,包括循环等.前者是用注释的方式实现,我尝试使用的时候发现行中间的合并其不能做到(也许是我用的不对,总之就那样了),但是直接用代码操作合并单元格又过于繁琐,这也是当前开发的背景.同事使用时候遇到合并单元格的问题,合并的单元格不能解析数据也不能正确的合并如我下图的模板,合并了3行则生成出来的excel也只合并了3行,并且根据循环的数据量往下错位若干格,而且少一个边框,究其原因,原作者根本没处理循环内的合并单元格问题,故此对1.0.6做了开发,修复这个问题,并将版本命名为2.0.传递到maven私服,pom为<dependency><groupId>net.sf.jxls</groupId><artifactId>jxls-core</artifactId><version>2.0</version></dependency>
正文
测试类如下
import com.fasterxml.jackson.databind.exc.InvalidFormatException;import net.sf.jxls.exception.ParsePropertyException;import net.sf.jxls.transformer.XLSTransformer;import org.junit.Test;import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.File;import java.io.IOException;import .URLEncoder;import java.text.SimpleDateFormat;import java.util.*;/*** Created by admin on /2/15.*/public class JxlsExcelTest {public static void excelTest() throws IOException,org.apache.poi.openxml4j.exceptions.InvalidFormatException {//获得模版String tempFileName = Thread.currentThread().getContextClassLoader().getResource("model/excelTemplate.xls").getFile();//将结果放入这个list中Date date = new Date();SimpleDateFormat simpl = new SimpleDateFormat("yyyyMMddHHmmss");String currntTime = simpl.format(date);//导出列表名String fileName = currntTime+"列表.xls";Map dataMap = new HashMap();List persionTypeList = new ArrayList();Map map1 = new HashMap();map1.put("personType", "初级");persionTypeList.add(map1);Map map2 = new HashMap();map2.put("personType", "中级");persionTypeList.add(map2);Map map3 = new HashMap();map3.put("personType", "高级");persionTypeList.add(map3);Map map4 = new HashMap();map4.put("personType", "高1级");persionTypeList.add(map4);dataMap.put("listData1", persionTypeList);List<Map<String,Object>> persionTypeList2=new ArrayList<Map<String,Object>>();persionTypeList2.addAll(persionTypeList);persionTypeList2.remove(2);dataMap.put("listData2",persionTypeList2);List<Map<String,Object>> persionTypeList3=new ArrayList<Map<String,Object>>();persionTypeList3.addAll(persionTypeList2);persionTypeList3.addAll(persionTypeList2);dataMap.put("listData3",persionTypeList3);dataMap.put("sum", "");dataMap.put("sum1", "");dataMap.put("sum2", "");dataMap.put("sum3", "");dataMap.put("sum4", "");dataMap.put("sum5", "");//生成的导出文件File destFile =new File("yyglxt/src/main/resources/model/"+fileName);//transformer转到ExcelXLSTransformer transformer = new XLSTransformer();BufferedInputStream bis = null;BufferedOutputStream bos = null;try {System.out.println(destFile.getAbsolutePath());//将数据添加到模版中生成新的文件transformer.transformXLS(tempFileName, dataMap,destFile.getAbsolutePath());} catch (ParsePropertyException e) {e.printStackTrace();} catch (InvalidFormatException e) {e.printStackTrace();}finally {//使用完成后关闭流try {if (bis != null)bis.close();if (bos != null)bos.close();} catch (IOException e) {}}}public static void main(String[] args) throws Exception {excelTest();}}
excel模板如下 最终生成的结果 结束语
目前的模式支持左侧,中间,右侧任意合并单元格,合并的是整个循环,如果循环是复杂数据结构,中间合并了少量单元格的话目前是不支持的
如果发现有什么bug或者有需求不满足也可以给我留言,有时间的话我会尽量处理
未经授权禁止转载,如果转载需要注明出处
下载地址:jar包:jar包里已经包含了pom.xml,可以自行解压方便上传到maven私服,这种方式会带上依赖,否则要一个个手动添加依赖.pom在jar包里jxls-core\2.0\jxls-core-2.0\META-INF\maven\pom.xml,不过我也单独上传了一份,这个pom文件不需要下载,当然分多的豪如果不吝赞助,那就道一声多谢!
如果现在不能下载,那是因为附件尚未过审核,需要等明天审核完毕了.
上传maven私服的时候,可以直接上传以下的pom文件和jar包,这样的话不用自行添加依赖,否则依照pom
文件人工添加依赖
jar下载地址: /download/a1091662876/10965456
pom下载地址(无须下载,jar里已经存在):/download/a1091662876/10965540
excel模板合并单元格(jxls 合并单元格)---工具net.sf.jxls扩展---支持合并单元格(无需代码方式合并)