1. package com;
  2.  
  3. import java.io.BufferedOutputStream;
  4. import java.io.File;
  5. import java.io.IOException;
  6. import java.io.OutputStream;
  7. import java.lang.reflect.InvocationTargetException;
  8. import java.lang.reflect.Method;
  9. import java.util.ArrayList;
  10. import java.util.List;
  11.  
  12. import javax.servlet.http.HttpServletResponse;
  13.  
  14. import jxl.Workbook;
  15. import jxl.WorkbookSettings;
  16. import jxl.format.Alignment;
  17. import jxl.format.Border;
  18. import jxl.format.BorderLineStyle;
  19. import jxl.format.Colour;
  20. import jxl.format.UnderlineStyle;
  21. import jxl.write.Label;
  22. import jxl.write.Number;
  23. import jxl.write.WritableCell;
  24. import jxl.write.WritableCellFormat;
  25. import jxl.write.WritableFont;
  26. import jxl.write.WritableFont.FontName;
  27. import jxl.write.WritableSheet;
  28. import jxl.write.WritableWorkbook;
  29. import jxl.write.WriteException;
  30. import jxl.write.biff.RowsExceededException;
  31.  
  32. public class ExcelUtil {
  33. private static String defaultEncoding = "gbk";
  34.  
  35. /**
  36. * 1创建工作簿,用于response的输出流返回
  37. * @param response HttpServletResponse
  38. * @param fileName 文件名
  39. * @return
  40. */
  41. public static WritableWorkbook createWorkBook(HttpServletResponse response,String fileName){
  42.  
  43. OutputStream os = null;
  44. BufferedOutputStream bos = null;
  45. WritableWorkbook wwb = null;
  46. try {
  47. os = response.getOutputStream();
  48. response.setContentType("application/vnd.ms-excel");
  49. response.setHeader("Content-Disposition", "attachment; filename=".concat(fileName));
  50.  
  51. bos = new BufferedOutputStream(os);
  52. wwb = createWorkBook(bos);
  53.  
  54. } catch (IOException e) {
  55. e.printStackTrace();
  56. } finally{
  57. try {
  58. if(bos!=null){
  59. bos.flush();
  60. bos.close();
  61. bos = null;
  62. }
  63. if(os!=null){
  64. os.close();
  65. os = null;
  66. }
  67. } catch (IOException e) {
  68. e.printStackTrace();
  69. }
  70. }
  71.  
  72. return wwb;
  73. }
  74.  
  75. /**
  76. * 1创建工作簿,用于导出文件到某个路径
  77. * @param exportPath
  78. * @return
  79. */
  80. public static WritableWorkbook createWorkBook(String exportPath){
  81. File file = new File(exportPath);
  82. if(!file.exists()||file.isDirectory()){
  83. try {
  84. file.createNewFile();
  85. } catch (IOException e) {
  86. e.printStackTrace();
  87. }
  88. }
  89.  
  90. WritableWorkbook wwb = createWorkBook(file);
  91. return wwb;
  92. }
  93.  
  94. /**
  95. * 创建WritableWorkbook
  96. * @param obj
  97. * @return
  98. */
  99. private static WritableWorkbook createWorkBook(Object obj){
  100. if(obj==null){
  101. return null;
  102. }
  103.  
  104. System.out.println("创建工作簿WritableWorkbook开始...");
  105.  
  106. WorkbookSettings setting = new WorkbookSettings();
  107. setting.setEncoding(defaultEncoding);
  108.  
  109. WritableWorkbook wwb = null;
  110. try {
  111.  
  112. if(obj instanceof File){
  113. File file = (File)obj;
  114. wwb = Workbook.createWorkbook(file,setting);
  115. }else if(obj instanceof BufferedOutputStream){
  116. BufferedOutputStream bos = (BufferedOutputStream)obj;
  117. wwb = Workbook.createWorkbook(bos,setting);
  118. }
  119.  
  120. } catch (IOException e) {
  121. e.printStackTrace();
  122. }
  123.  
  124. System.out.println("创建工作簿WritableWorkbook结束...");
  125.  
  126. return wwb;
  127. }
  128.  
  129. /**
  130. * 根据SheetNames数量创建对应数量的sheet
  131. * @param sheetNames
  132. * @param wwb
  133. * @return
  134. */
  135. public static List<WritableSheet> createSheet(String[] sheetNames,WritableWorkbook wwb){
  136. if(sheetNames==null||sheetNames.length==0){
  137. return null;
  138. }
  139. if(wwb==null){
  140. return null;
  141. }
  142. int sheetNum = sheetNames.length;
  143. System.out.println("Excel创建sheet数量:"+sheetNum);
  144.  
  145. List<WritableSheet> list = new ArrayList<WritableSheet>(sheetNum);
  146.  
  147. for(int i= 0; i<sheetNum ; i++){
  148. WritableSheet ws = wwb.createSheet(sheetNames[i], i);
  149. list.add(ws);
  150. }
  151.  
  152. return list;
  153.  
  154. }
  155.  
  156. /**
  157. * 创建title格式
  158. * @return
  159. */
  160. public static WritableCellFormat getTitleFormat(){
  161.  
  162. System.out.println("创建title格式...");
  163.  
  164. FontName fontName = WritableFont.createFont("宋体");
  165. int fontSize = 15;
  166. boolean isItalic = false;//是否斜体
  167.  
  168. //参数依次是:字体设置/字体大小/字体粗细/是否是斜体/下划线类型/颜色
  169. WritableFont titleFont = new WritableFont(fontName, fontSize, WritableFont.BOLD, isItalic, UnderlineStyle.NO_UNDERLINE, Colour.BLACK);
  170. WritableCellFormat titleFormat = new WritableCellFormat(titleFont);
  171.  
  172. return titleFormat;
  173. }
  174.  
  175. /**
  176. * 获取内容格式
  177. * @return
  178. */
  179. public static WritableCellFormat getContentFormat(){
  180.  
  181. System.out.println("创建内容格式...");
  182.  
  183. WritableCellFormat contentFormat = new WritableCellFormat();
  184. try {
  185. contentFormat.setWrap(true);//是否换行
  186. contentFormat.setBorder(Border.ALL, BorderLineStyle.THIN, Colour.BLACK);//全框/细线/黑色
  187. contentFormat.setAlignment(Alignment.LEFT);//水平居左
  188. } catch (WriteException e) {
  189. e.printStackTrace();
  190. }
  191.  
  192. return contentFormat;
  193. }
  194.  
  195. /**
  196. * 单元格插入内容
  197. * @param sheet 表单对象
  198. * @param columnIndex 列
  199. * @param rowIndex 行
  200. * @param content 内容
  201. * @param format 格式
  202. */
  203. public static void addCell(WritableSheet sheet,int columnIndex,int rowIndex,Object content,WritableCellFormat format){
  204.  
  205. WritableCell cell = null;
  206.  
  207. if(content instanceof Double){
  208. if(format!=null){
  209. cell = new Number(columnIndex, rowIndex, (Double)content, format);
  210. }else{
  211. cell = new Number(columnIndex, rowIndex, (Double)content);
  212. }
  213.  
  214. }else{
  215. if(content==null){
  216. content = "";
  217. }
  218. if(format!=null){
  219. cell = new Label(columnIndex, rowIndex, (String)content, format);
  220. }else{
  221. cell = new Label(columnIndex, rowIndex, (String)content);
  222. }
  223. }
  224.  
  225. try {
  226. sheet.addCell(cell);
  227. } catch (RowsExceededException e) {
  228. e.printStackTrace();
  229. } catch (WriteException e) {
  230. e.printStackTrace();
  231. }
  232. }
  233.  
  234. /**
  235. * 解析一个list对象插入到sheet
  236. * @param sheet
  237. * @param list
  238. * @param titles 列名 空列填""
  239. * @param clazzFields class类的属性名:"getXXX"格式 空列填""
  240. */
  241. public static void parseClass(WritableSheet sheet,List list,String[] titles,String[] clazzFields){
  242. if(sheet==null||list==null||titles==null||clazzFields==null){
  243. return;
  244. }
  245.  
  246. WritableCellFormat format = getContentFormat();
  247.  
  248. int rowIndex = 1;//默认第一行还有个大标题~,如果不需要那个大标题,此处改成0
  249. //先将列名插入sheet
  250. for(int columnIndex=0;columnIndex<titles.length;columnIndex++){
  251. addCell(sheet, columnIndex, rowIndex, titles[columnIndex], format);
  252. }
  253.  
  254. rowIndex++;
  255.  
  256. System.out.println("遍历传入的list对象,并写入sheet表单开始...");
  257. for(int i=0;i<list.size();i++){
  258.  
  259. int startColumn = 0;
  260. if("序号".equals(titles[0])){
  261. addCell(sheet, startColumn, rowIndex, (i+1)+"", format);
  262. startColumn++;
  263. }
  264. Object obj = list.get(i);
  265. //将传入的clazzFields从clazz取出来
  266. for(int columnIndex=startColumn;columnIndex<clazzFields.length;columnIndex++){
  267.  
  268. if("".equals(clazzFields[columnIndex])){//如果属性没写,默认填一空行
  269. addCell(sheet, columnIndex, rowIndex, "", format);
  270. continue;
  271. }
  272.  
  273. //属性不为空,反射出类的属性,取值
  274. try {
  275. Method method = obj.getClass().getDeclaredMethod(clazzFields[columnIndex], null);
  276. Object field = method.invoke(obj, null);
  277. // Class returnType = method.getReturnType();
  278. addCell(sheet, columnIndex, rowIndex, field, format);
  279.  
  280. } catch (SecurityException e) {
  281. e.printStackTrace();
  282. } catch (NoSuchMethodException e) {
  283. e.printStackTrace();
  284. } catch (IllegalArgumentException e) {
  285. e.printStackTrace();
  286. } catch (IllegalAccessException e) {
  287. e.printStackTrace();
  288. } catch (InvocationTargetException e) {
  289. e.printStackTrace();
  290. }
  291. }
  292.  
  293. rowIndex++;
  294. }
  295.  
  296. System.out.println("遍历传入的list对象,并写入sheet表单结束...");
  297.  
  298. }
  299.  
  300. public static void main(String[] args) {
  301. //模拟数据
  302. List<TestClass> testList = new ArrayList<TestClass>();
  303. double num = 1000d;
  304. for(int i=0;i<6;i++){
  305. TestClass t = new TestClass();
  306. t.setA("testA"+i);
  307. t.setB("testB"+i);
  308. t.setC(num-i);
  309.  
  310. testList.add(t);
  311. }
  312.  
  313. //导出开始
  314. WritableWorkbook wwb = null;
  315. try {
  316. wwb = createWorkBook("D:\\测试1121.xls");
  317. String[] names = {"张三","李四"};
  318. List<WritableSheet> sheets = createSheet(names, wwb);
  319.  
  320. WritableCellFormat titleFormat = getTitleFormat();
  321. WritableCellFormat contentFormat = getContentFormat();
  322.  
  323. for(WritableSheet sheet :sheets){
  324.  
  325. addCell(sheet, 0, 0, "大标题123123654654", titleFormat);
  326.  
  327. String[] titles = {"序号","","A","C","B"};
  328. String[] methods = {"","","getA","getC","getB"};
  329. parseClass(sheet, testList, titles, methods);
  330.  
  331. addCell(sheet, 3, testList.size()+3, "审核:", null);
  332.  
  333. }
  334.  
  335. wwb.write();
  336. } catch (IOException e) {
  337. e.printStackTrace();
  338. } finally{
  339. if(wwb!=null){
  340. try {
  341. wwb.close();
  342. wwb = null;
  343. } catch (WriteException e) {
  344. e.printStackTrace();
  345. } catch (IOException e) {
  346. e.printStackTrace();
  347. }
  348. }
  349.  
  350. }
  351. //结束
  352.  
  353. }
  354. }

测试类:

  1. package com;
  2.  
  3. public class TestClass {
  4. private String a;
  5. private String b;
  6. private Double c;
  7.  
  8. public TestClass(){
  9.  
  10. }
  11.  
  12. public String getA() {
  13. return a;
  14. }
  15.  
  16. public void setA(String a) {
  17. this.a = a;
  18. }
  19.  
  20. public String getB() {
  21. return b;
  22. }
  23.  
  24. public void setB(String b) {
  25. this.b = b;
  26. }
  27.  
  28. public Double getC() {
  29. return c;
  30. }
  31.  
  32. public void setC(Double c) {
  33. this.c = c;
  34. }
  35.  
  36. }

自己写的java用jxl导出到excel工具的更多相关文章

  1. JAVA利用JXL导出/生成 EXCEL

    /** * 导出导出采暖市场部收入.成本.利润明细表 * @author JIA-G-Y */ public String exporExcel(String str) { String str=Se ...

  2. java利用JXL导出/生成 EXCEL【my】

    一.创建一个excel文件 package test;// 生成Excel的类 import java.io.File; import jxl.Workbook;import jxl.write.La ...

  3. Java中用JXL导出Excel代码详解

    jxl是一个韩国人写的java操作excel的工具, 在开源世界中,有两套比较有影响的API可供使用,一个是POI,一个是jExcelAPI.其中功能相对POI比较弱一点.但jExcelAPI对中文支 ...

  4. JAVA利用JXL导出 EXCEL (在原有的excel模板上把数据导到excel上)

    添加依赖 <dependency> <groupId>net.sourceforge.jexcelapi</groupId> <artifactId>j ...

  5. JAVA利用JXL导出/生成 EXCEL1

    /** * 导出导出采暖市场部收入.成本.利润明细表 * @author JIA-G-Y */ public String exporExcel(String str) { String str=Se ...

  6. JXL 读取 Excel java中jxl导出数据到excel的例子 上传文件

    2010-10-14 19:17:06 com.opensymphony.xwork2.util.logging.commons.CommonsLogger info 信息: Entferne Dat ...

  7. java使用jxl,poi解析excel文件

    public interface JavaExcel { /** * 使用jxl写excel文件 */ public void writeJxlExcel(); /** * 使用jxl读excel文件 ...

  8. java的jxl技术导入Excel

    项目结构: http://www.cnblogs.com/hongten/gallery/image/112177.html 在项目中我们看到Reference Libraries中的jxl.jar包 ...

  9. java 使用jxl poi 操作excel

    java操作excel  创建.修改 xls 文件 JAVA操作Excel文件 Java生成和操作Excel文件 java导出Excel通用方法 Java 实现导出excel表 POI Java PO ...

随机推荐

  1. 使用webbench对不同的web服务器进行压力测试

    1.webbench在linux下的安装步骤,如果安装过程失败,请检查当前用户的执行权限,如果报找不到某个目录的错,请自行创建指定的目录: #wget http://home.tiscali.cz/~ ...

  2. zju(8)串口通信实验

    1.实验目的 1.学习和掌握linux下串口的操作方法以及应用程序的编写: 二.实验内容 1.编写EduKit-IV实验箱Linux操作系统下串口的应用程序,运行时只需要将串口线的一端连接到开发板的c ...

  3. 【iCore3 双核心板_FPGA】例程四:Tcl脚本实验——配置引脚

    实验指导书及代码包下载: http://pan.baidu.com/s/1pJZDz0v iCore3 购买链接: https://item.taobao.com/item.htm?id=524229 ...

  4. 【iCore3 双核心板_FPGA】例程七:基础逻辑门实验——逻辑门使用

    实验指导书及代码包下载: http://pan.baidu.com/s/1Rs18U iCore3 购买链接: https://item.taobao.com/item.htm?id=52422943 ...

  5. php的乱码问题

    $content=file_get_contents("http://www.ctsdc.com/");$pattern="/<a\s+href=.*<\/a ...

  6. java向压缩文件添加文件

    package org.alfresco.repo.bom.util; import java.io.File; import java.io.FileInputStream; import java ...

  7. 程序中的@Override是什么意思

    @Override是Java5的元数据,自动加上去的一个标志,告诉你说下面这个方法是从父类/接口 继承过来的,需要你重写一次,这样就可以方便你阅读,也不怕会忘记 @Override是伪代码,表示重写( ...

  8. [daily][archlinux][fonts] 在linux下管理字体

    序: linux是社区搞出来, 商业应用也都是服务器场景.社区里又都是技术人员.字体又是细节.而且会英文早成了标配.所以没有很多社区以外的人力来搞字体这个毫无回报的东西. 结果很自然的,装linux桌 ...

  9. 小吐槽Toolbar

    最近弄界面 要吧全部图标改成PNG格式 虽说从2010以后Delphi默认支持PNG格式图片, 但是想应用到按钮上, 似乎除了TButton意外, 也只能ToolBar可以正常显示了, 其他的, 比如 ...

  10. H5页面性能优化

    对于一个产品,性能在用户体验中是必不可缺的一环.性能优化是个长远的事情,联想到导航项目,列出以下性能优化的方案: 一. 基本的代码层面优化: 1:合理使用css 1)正确使用Display属性 Dis ...