一、本地操作

1、读取

  1. package com.ljf.mb;
  2.  
  3. import java.io.FileInputStream;
  4. import java.io.InputStream;
  5.  
  6. import jxl.Cell;
  7. import jxl.Sheet;
  8. import jxl.Workbook;
  9.  
  10. public class ReadExcel
  11. {
  12. public static void main(String[] args) throws Exception
  13. {
  14. {
  15. String filePath = "d:/.xls"; //文件在电脑中的位置
  16. InputStream is = new FileInputStream(filePath);
  17. Workbook rwb = Workbook.getWorkbook(is);
  18.  
  19. Sheet rs = rwb.getSheet(0);// 获取第一张Sheet表
  20. int hangNum = rs.getRows();//得到总行数
  21.  
  22. for (int i = 1; i < hangNum; i++)
  23. {
  24. String name = getCallStr(rs, i, 5).trim(); //得到第i行,第5列数据,行列均是从0开始
  25. String gg = getCallStr(rs, i, 6).trim();
  26. System.out.println(name + " " + gg); //组织自己想要的输出
  27. }
  28. }
  29. }
  30.  
  31. /**
  32. * 功能描述:得到工作表中某个单元格的数据
  33. *</br>日期:2013-3-29
  34. *</br>@author : 劲风
  35. *</br>@param rs 工作表对象
  36. *</br>@param hang 行数,从0开始
  37. *</br>@param lie 列数,从0开始
  38. *</br>@return 单元格的内容
  39. */
  40. public static String getCallStr(Sheet rs, int hang, int lie)
  41. {
  42. Cell cell = rs.getCell(lie, hang);
  43. String value = cell.getContents();
  44. if (value != null)
  45. {
  46. return value.trim();
  47. }
  48. return "";
  49. }
  50. }

2、生成

  1. import java.io.File;
  2. import jxl.Workbook;
  3. import jxl.write.Label;
  4. import jxl.write.WritableSheet;
  5. import jxl.write.WritableWorkbook;
  6.  
  7. public class WriteExcel
  8. {
  9.  
  10. public static void main(String[] args) throws Exception
  11. {
  12. WritableWorkbook wwb = null;
  13. WritableSheet ws = null;
  14. try
  15. {
  16. //首先要使用Workbook类的工厂方法创建一个可写入的工作薄(Workbook)对象
  17. wwb = Workbook.createWorkbook(new File("d:/tables/one.xls"));
  18. if(wwb!=null)
  19. {
  20. //创建一个可写入的工作表
  21. ws = wwb.createSheet("sheet1", 0); //第一个是工作表的名称,第二个是工作表在工作薄中的位置
  22.  
  23. //下面开始添加单元格
  24. Label lab00 = creatLabel(0, 0, "姓名"); //行,列,内容
  25. Label lab01 = creatLabel(0, 1, "年龄"); //行,列,内容
  26. Label lab10 = creatLabel(1, 0, "张三"); //行,列,内容
  27. Label lab11 = creatLabel(1, 1, "20"); //行,列,内容
  28.  
  29. ws.addCell(lab00);
  30. ws.addCell(lab01);
  31. ws.addCell(lab10);
  32. ws.addCell(lab11);
  33.  
  34. wwb.write(); //从内存中写入文件中
  35. wwb.close(); //关闭资源,释放内存
  36. }
  37. }
  38. catch (Exception e)
  39. {
  40. e.printStackTrace();
  41. }
  42.  
  43. }
  44.  
  45. public static Label creatLabel(int hang,int lie,String con) //行,列,内容
  46. {
  47. return new Label(lie, hang, con);
  48. }
  49. }

二、Spring MVC 生成下载Excel

1、页面请求

  1. <a href="javascript:void(0)" class="easyui-linkbutton exportBtn" iconCls="glyphicon-export" plain="true" onclick="exportCsv()">导出</a>
  2.  
  3. ......
  4.  
  5. <script type="text/javascript">
  6. //导出(未实现)
  7. function exportCsv() {
  8. var option = datagrid.datagrid("options");
  9. var param = option.queryParams;
  10. param.sortName = option.sortName;
  11. param.sortOrder = option.sortOrder;
  12. window.location.href = "exportExcel?" + $.param(param);
  13. }
  14. </script>

2、后台逻辑

  1. /**
  2. * 导出Excel
  3. * @throws Exception
  4. */
  5. @RequestMapping("/exportExcel")
  6. public void exportExcel(HttpServletResponse response,OutBillVo vo) throws Exception {
  7.  
  8. List<OutBill> ls=service.exportExcelQuery(vo); //取得导出数据
  9.  
  10. File file = new File("aaa.xls");
  11. jxl.write.WritableWorkbook book = Workbook.createWorkbook(file); //工作薄
  12. jxl.write.WritableSheet sheet = book.createSheet("Sheet1", 0); //工作表
  13.  
  14. //设置行高
  15. sheet.getSettings().setDefaultRowHeight(350); //设置所有行默认行高
  16. sheet.setRowView(0, 700);//第1行 高度
  17. sheet.setRowView(1, 400);//第2行 高度
  18.  
  19. //设置个别列宽
  20. sheet.setColumnView(1, 16);//宽度设置:登记时间
  21. sheet.setColumnView(8, 16);//宽度设置:出发时间
  22. sheet.setColumnView(9, 16);//宽度设置:归队时间
  23. sheet.setColumnView(6, 12);//宽度设置:用车部门
  24. sheet.setColumnView(7, 16);//宽度设置:目的地
  25. sheet.setColumnView(18, 12);//宽度设置:车辆状况
  26. sheet.setColumnView(19, 16);//宽度设置:备注
  27.  
  28. //定义格式
  29. //主标题格式
  30. WritableCellFormat formatterTitle= new WritableCellFormat(); //标题格式
  31. formatterTitle.setAlignment(Alignment.CENTRE);//水平对齐
  32. formatterTitle.setVerticalAlignment(VerticalAlignment.CENTRE);//垂直对齐
  33. //WritableFont font = new WritableFont(WritableFont.createFont("MS Pゴシック"), 18, WritableFont.BOLD, false); //黑体
  34. WritableFont font = new WritableFont(WritableFont.TAHOMA, 18, WritableFont.BOLD, false);
  35. formatterTitle.setFont(font);
  36.  
  37. //列标题格式
  38. WritableCellFormat formatterColumnTitle= new WritableCellFormat(); //列标题格式
  39. formatterColumnTitle.setAlignment(Alignment.CENTRE);//水平对齐
  40. formatterColumnTitle.setVerticalAlignment(VerticalAlignment.CENTRE);//垂直对齐
  41. formatterColumnTitle .setBackground(Colour.GRAY_25);//背景色
  42. formatterColumnTitle.setBorder(Border.ALL, BorderLineStyle.THIN);//边框线 所有边框 细线
  43.  
  44. //普通内容格式
  45. WritableCellFormat formatterCon= new WritableCellFormat(); //内容格式
  46. formatterCon.setAlignment(Alignment.CENTRE);//水平对齐
  47. formatterCon.setVerticalAlignment(VerticalAlignment.CENTRE);//垂直对齐
  48. formatterCon.setBorder(Border.ALL, BorderLineStyle.THIN);//边框线 所有边框 细线
  49.  
  50. //合计行格式
  51. WritableCellFormat formatterSum= new WritableCellFormat(); //合计格式
  52. formatterSum.setAlignment(Alignment.CENTRE);//水平对齐
  53. formatterSum.setVerticalAlignment(VerticalAlignment.CENTRE);//垂直对齐
  54. formatterSum.setBorder(Border.ALL, BorderLineStyle.THIN);//边框线 所有边框 细线
  55. WritableFont font_sum = new WritableFont(WritableFont.TAHOMA, 10, WritableFont.BOLD, false);
  56. formatterSum.setFont(font_sum);
  57.  
  58. //输出标题
  59. sheet.mergeCells(0, 0, 19, 0); //合并单元格(标题)
  60. sheet.addCell(creatLabel(0,0,"车辆外出登记表",formatterTitle));
  61.  
  62. //输出列标题
  63. int rowNum=1; //行号
  64. int columnNum=0; //列号
  65. sheet.addCell(creatLabel(rowNum,columnNum++,"序号",formatterColumnTitle));
  66. sheet.addCell(creatLabel(rowNum,columnNum++,"登记时间",formatterColumnTitle));
  67. sheet.addCell(creatLabel(rowNum,columnNum++,"车辆",formatterColumnTitle));
  68. sheet.addCell(creatLabel(rowNum,columnNum++,"驾驶员",formatterColumnTitle));
  69. sheet.addCell(creatLabel(rowNum,columnNum++,"用车人",formatterColumnTitle));
  70. sheet.addCell(creatLabel(rowNum,columnNum++,"审批人",formatterColumnTitle));
  71. sheet.addCell(creatLabel(rowNum,columnNum++,"用车部门",formatterColumnTitle));
  72. sheet.addCell(creatLabel(rowNum,columnNum++,"目的地",formatterColumnTitle));
  73. sheet.addCell(creatLabel(rowNum,columnNum++,"出发时间",formatterColumnTitle));
  74. sheet.addCell(creatLabel(rowNum,columnNum++,"归队时间",formatterColumnTitle));
  75. sheet.addCell(creatLabel(rowNum,columnNum++,"总时长",formatterColumnTitle));
  76. sheet.addCell(creatLabel(rowNum,columnNum++,"等待时长",formatterColumnTitle));
  77. sheet.addCell(creatLabel(rowNum,columnNum++,"出发里程",formatterColumnTitle));
  78. sheet.addCell(creatLabel(rowNum,columnNum++,"归队里程",formatterColumnTitle));
  79. sheet.addCell(creatLabel(rowNum,columnNum++,"使用里程",formatterColumnTitle));
  80. sheet.addCell(creatLabel(rowNum,columnNum++,"加油金额",formatterColumnTitle));
  81. sheet.addCell(creatLabel(rowNum,columnNum++,"过/停费",formatterColumnTitle));
  82. sheet.addCell(creatLabel(rowNum,columnNum++,"总费用",formatterColumnTitle));
  83. sheet.addCell(creatLabel(rowNum,columnNum++,"车辆状况",formatterColumnTitle));
  84. sheet.addCell(creatLabel(rowNum,columnNum++,"备注",formatterColumnTitle));
  85.  
  86. //合计项
  87. int useNum = 0; // 使用里程
  88. double useTime = 0; // 使用时长(小时,保留一位小数)
  89. double waitTime = 0; // 等待时间(小时,保留一位小数)
  90. double fuelNum = 0; // 加油费
  91. double otherFee = 0; // 其他费用(过路费、停车费)
  92. double allFee = 0; // 全部费用
  93.  
  94. if(ls != null && ls.size() > 0)
  95. {
  96. SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm"); //日期格式化
  97. for(int i = 0; i < ls.size(); i++)
  98. {
  99. OutBill bo = ls.get(i);
  100. rowNum++;
  101. columnNum=0;
  102.  
  103. //非必填项Null值处理
  104. Double fuelNumDouble = bo.getFuelNum(); //加油费
  105. Double otherFeeDouble = bo.getOtherFee(); //其他费用(过路费、停车费)
  106. String remark = bo.getRemark(); //备注
  107. String carStatus = bo.getCarStatus(); //车辆状况
  108.  
  109. String fuelNumStr = ""; //
  110. if(fuelNumDouble != null){fuelNumStr = fuelNumDouble.toString();}
  111. String otherFeeStr = ""; //
  112. if(otherFeeDouble != null){otherFeeStr = otherFeeDouble.toString();}
  113. if(remark == null){remark="";}
  114. if(carStatus == null){remark="";}
  115.  
  116. //输出一行数据
  117. sheet.addCell(creatLabel(rowNum,columnNum++,(i+1)+"",formatterCon)); //序号
  118. sheet.addCell(creatLabel(rowNum,columnNum++,formatter.format(bo.getAddTime()) ,formatterCon)); //登记时间
  119. sheet.addCell(creatLabel(rowNum,columnNum++,bo.getCar().getName() ,formatterCon)); //车辆
  120. sheet.addCell(creatLabel(rowNum,columnNum++,bo.getDriver() ,formatterCon)); //驾驶员
  121. sheet.addCell(creatLabel(rowNum,columnNum++,bo.getUser() ,formatterCon)); //用车人
  122. sheet.addCell(creatLabel(rowNum,columnNum++,bo.getApprover(),formatterCon)); //审批人
  123. sheet.addCell(creatLabel(rowNum,columnNum++,bo.getOrgan().getName() ,formatterCon)); //用车部门
  124. sheet.addCell(creatLabel(rowNum,columnNum++,bo.getDestination() ,formatterCon)); //目的地
  125. sheet.addCell(creatLabel(rowNum,columnNum++,formatter.format(bo.getBeginTime()) ,formatterCon)); //出发时间
  126. sheet.addCell(creatLabel(rowNum,columnNum++,formatter.format(bo.getEndTime()) ,formatterCon)); //归队时间
  127. sheet.addCell(creatLabel(rowNum,columnNum++,bo.getUseTime()+"" ,formatterCon)); //总时长
  128. sheet.addCell(creatLabel(rowNum,columnNum++,bo.getWaitTime()+"" ,formatterCon)); //等待时长
  129. sheet.addCell(creatLabel(rowNum,columnNum++,bo.getBeginNum()+"" ,formatterCon)); //出发里程
  130. sheet.addCell(creatLabel(rowNum,columnNum++,bo.getEndNum()+"" ,formatterCon)); //归队里程
  131. sheet.addCell(creatLabel(rowNum,columnNum++,bo.getUseNum()+"" ,formatterCon)); //使用里程
  132. sheet.addCell(creatLabel(rowNum,columnNum++,fuelNumStr ,formatterCon)); //加油金额
  133. sheet.addCell(creatLabel(rowNum,columnNum++,otherFeeStr ,formatterCon)); //过 / 停费
  134. sheet.addCell(creatLabel(rowNum,columnNum++,bo.getAllFee()+"" ,formatterCon)); //总费用
  135. sheet.addCell(creatLabel(rowNum,columnNum++,carStatus ,formatterCon)); //车辆状况
  136. sheet.addCell(creatLabel(rowNum,columnNum++,remark,formatterCon)); //备注
  137.  
  138. //合计项累加
  139. if(bo.getUseNum() != null)
  140. {
  141. useNum += bo.getUseNum();
  142. }
  143. if(bo.getUseTime() != null)
  144. {
  145. useTime += bo.getUseTime();
  146. }
  147. if(bo.getWaitTime() != null)
  148. {
  149. waitTime += bo.getWaitTime();
  150. }
  151. if(bo.getFuelNum() != null)
  152. {
  153. fuelNum += bo.getFuelNum();
  154. }
  155. if(bo.getOtherFee() != null)
  156. {
  157. otherFee += bo.getOtherFee();
  158. }
  159. if(bo.getAllFee() != null)
  160. {
  161. allFee += bo.getAllFee();
  162. }
  163. }
  164.  
  165. //表格增加合计项
  166. rowNum++;
  167. columnNum = 0;
  168. sheet.setRowView(rowNum, 400);//合计行 高度
  169.  
  170. sheet.addCell(creatLabel(rowNum,columnNum++,"",formatterSum)); //序号
  171. sheet.addCell(creatLabel(rowNum,columnNum++,"" ,formatterSum)); //登记时间
  172. sheet.addCell(creatLabel(rowNum,columnNum++,"" ,formatterSum)); //车辆
  173. sheet.addCell(creatLabel(rowNum,columnNum++,"" ,formatterSum)); //驾驶员
  174. sheet.addCell(creatLabel(rowNum,columnNum++,"" ,formatterSum)); //用车人
  175. sheet.addCell(creatLabel(rowNum,columnNum++,"",formatterSum)); //审批人
  176. sheet.addCell(creatLabel(rowNum,columnNum++,"" ,formatterSum)); //用车部门
  177. sheet.addCell(creatLabel(rowNum,columnNum++,"" ,formatterSum)); //目的地
  178. sheet.addCell(creatLabel(rowNum,columnNum++,"" ,formatterSum)); //出发时间
  179. sheet.addCell(creatLabel(rowNum,columnNum++,"合计",formatterSum)); //归队时间
  180. sheet.addCell(creatLabel(rowNum,columnNum++,useTime+"" ,formatterSum)); //总时长
  181. sheet.addCell(creatLabel(rowNum,columnNum++,waitTime+"" ,formatterSum)); //等待时长
  182. sheet.addCell(creatLabel(rowNum,columnNum++,"" ,formatterSum)); //出发里程
  183. sheet.addCell(creatLabel(rowNum,columnNum++,"" ,formatterSum)); //归队里程
  184. sheet.addCell(creatLabel(rowNum,columnNum++,useNum+"" ,formatterSum)); //使用里程
  185. sheet.addCell(creatLabel(rowNum,columnNum++,fuelNum+"" ,formatterSum)); //加油金额
  186. sheet.addCell(creatLabel(rowNum,columnNum++,otherFee+"" ,formatterSum)); //过 / 停费
  187. sheet.addCell(creatLabel(rowNum,columnNum++,allFee+"" ,formatterSum)); //总费用
  188. sheet.addCell(creatLabel(rowNum,columnNum++,"" ,formatterSum)); //车辆状况
  189. sheet.addCell(creatLabel(rowNum,columnNum++,"",formatterSum)); //备注
  190.  
  191. }
  192.  
  193. //-------------------------------
  194.  
  195. book.write();
  196. book.close();
  197.  
  198. FileInputStream f = new FileInputStream(file);
  199. byte[] fb = new byte[f.available()];
  200. f.read(fb);
  201. response.setHeader("Content-disposition", "attachment; filename=" + new String("出车记录.xls".getBytes("gb2312"), "iso8859-1"));
  202. ByteArrayInputStream bais = new ByteArrayInputStream(fb);
  203. int b;
  204. while ((b = bais.read()) != -1)
  205. {
  206. response.getOutputStream().write(b);
  207. }
  208. response.getOutputStream().flush();
  209. f.close();
  210.  
  211. }
  212.  
  213. private Label creatLabel(int rowNum,int columnNum,String con,WritableCellFormat formatter) //行,列,内容 ,格式化
  214. {
  215. return new Label(columnNum, rowNum, con,formatter);
  216. }

Java操作Excel(使用JXL)的更多相关文章

  1. jxl的使用总结(java操作excel)

    jxl.jar是通过java操作excel表格的工具类库: jxl.jar包:链接:http://pan.baidu.com/s/1o8qFJHw 密码:5jyq 1:通过模拟实现创建一个表格,然后模 ...

  2. 【转载】jxl的使用总结(java操作excel)

    jxl.jar是通过java操作excel表格的工具类库: 链接:https://pan.baidu.com/s/1AAT_eA_Q47zFeQohap6eQg 提取码:777b 1:通过模拟实现创建 ...

  3. Java 操作 EXCEL

    今天帮朋友写了一段用来处理EXCEL内容的程序,在这里记录下自己的学习过程.主要是对EXCEL表格中的内容做分类和统计,使用计算机来做这种重复的机械性地工作再好不过了.首先,我们需要下载一个java操 ...

  4. JAVA操作Excel时文字自适应单元格的宽度设置方法

    使用JAVA操作Excel通常都使用JXL,方法很简单网上也有很多的教程,然后往往一些细节性的问题却导致我们这些Programmer苦恼不已.这两天帮一个朋友做一个Excel表格自动生成的小软件,就遇 ...

  5. Java操作Excel文件以及在Android中的应用

    本文章由临江仙原创,转载请注明出处:http://blog.csdn.net/zhy_cheng/article/details/10286563 Excel作为一种有格式的文件,可以使用Java来对 ...

  6. java操作Excel、PDF文件

    java操作Excel.PDF文件 分享者:Vashon 分享来源:CSDN博客 下面这些是在开发中用到的一些东西,有的代码贴的不是完整的,只是贴出了关于操作EXCEL的代码: jxl是一个*国人写的 ...

  7. java操作Excel处理数字类型的精度损失问题验证

    java操作Excel处理数字类型的精度损失问题验证: 场景: CELL_TYPE_NUMERIC-->CELL_TYPE_STRING--->CELL_TYPE_NUMERIC POI版 ...

  8. java操作excel 工具类

    java操作excel 可参考https://blog.csdn.net/xunwei0303/article/details/53213130 直接上代码: 一.java生成excel文件: pac ...

  9. java 操作excel 文件

    JAVA EXCEL API:是一开放源码项目,通过它Java开发人员可以读取Excel文件的内容.创建新的Excel文件.更新已经存在的Excel文件.使用该API非Windows操作系统也可以通过 ...

随机推荐

  1. __EF批量删除

    控制器: [HttpPost] public int Delete_All(string Id) { List<int> IDS = new List<int>();//创建l ...

  2. spring_07使用spring的特殊bean、完成分散配置

    一.   前言   分散配置思路:创建properties文件,添加数据,在beans文件中先配置properties文件,再在bean中使用占位符引用数据 对于bean的生命周期中的很多处理接口,处 ...

  3. EL表达式的特性

    一.EL(Expression Language)表达式语言一.作用:从作用域中取值,再将值显示给客户 二.目的:在JSP中消灭java代码 三.使用:<%@ page isELIgnored= ...

  4. clean 伪目标

    下面的"clean"目标,是一个"伪目标",      clean:              rm *.o temp  我们生成了许多文件编译文件,我们也应该 ...

  5. 面试HashMap之追命5连问

    1.HashMap底层实现数据结构? 总的来说,HashMap就是数组+链表的组合实现,每个数组元素存储一个链表的头结点,本质上来说是哈希表“拉链法”的实现. HashMap的链表元素对应的是一个静态 ...

  6. Spring 与 SpringMVC (或许不完整)

    一.什么是Spring Spring是一个开源的控制反转和面向切面(AOP)的容器框架.它的主要目的是使现有技术更加易用,推荐编码最佳实现,从而简化企业的开发. 提:使用Spring的好处有以下几项: ...

  7. RPC调用与GC垃圾回收

    RPC调用 多个服务协同完成一次业务时,由于业务约束(如红包不符合使用条件.账户余额不足等).系统故障(如网络或系统超时或中断.数据库约束不满足等),都可能造成服务处理过程在任何一步无法继续,使数据处 ...

  8. mybatis加载属性

    1): <dataSource>的<property>标签加载属性 在 properties 元素体内定义的属性首先被读取 然后会读取 properties 元素中 resou ...

  9. If you did this already, delete the swap file ".git/.MERGE_MSG.swp"

    出现这种情况一般是不正常退出造成的,找到隐藏文件后删除解决

  10. JavaScript 中的相等操作符 ( 详解 [] == []、[] == ![]、{} == !{} )

    ECMAScript 中的相等操作符由两个等于号 ( == ) 表示,如果两个操作数相等,则返回 true. 相等操作符会先转换操作数(通常称为强制转型),然后比较它们的相等性. 在转换不同的数据类型 ...