在工程的build path中添加jxl.jar,网址:http://www.andykhan.com/jexcelapi/

  1. import java.io.BufferedReader;
  2. import java.io.File;
  3. import java.io.FileInputStream;
  4. import java.io.IOException;
  5. import java.io.InputStreamReader;
  6. import jxl.Workbook;
  7. import jxl.write.Label;
  8. import jxl.write.WritableSheet;
  9. import jxl.write.WritableWorkbook;
  10.  
  11. /**
  12. * 将错误码的描述信息导入到表格中
  13. */
  14. public class ErrorsToExcel {
  15. //错误码文件的默认编码格式
  16. private String defaultEncoding = "gb2312";
  17.  
  18. private String errorsXls = "errorMessage_batch_template.xls";
  19. private String errorsSrcFile = "error-messages.properties";
  20.  
  21. //写入错误码的列
  22. private int errorCodeIndex = 1;
  23. //要写入错误描述的表格的列
  24. private int[] errorDescIndexs = {5,6};
  25.  
  26. /**
  27. * 将错误码的相关数据写入到给定的Excel中
  28. */
  29. public boolean appendErrorsToXls(){
  30. boolean flag = true;
  31.  
  32. Workbook book = null;
  33. WritableWorkbook writableWorkbook = null;
  34.  
  35. try{
  36. File excelFile = new File(errorsXls);
  37. if(!excelFile.exists()){
  38. System.out.println("要导入的Excel模板不存在");
  39. return false;
  40. }
  41.  
  42. //获取可写入的Excel对象
  43. book = Workbook.getWorkbook(excelFile);
  44. writableWorkbook = Workbook.createWorkbook(excelFile, book);
  45.  
  46. //获取可写入的表格对象
  47. WritableSheet targetSheet = writableWorkbook.getSheet(0);
  48.  
  49. //添加数据
  50. if(!appendDataToSheet(targetSheet))
  51. flag = false;
  52.  
  53. //将表格中的数据写入Excel中
  54. writableWorkbook.write();
  55.  
  56. }catch(Exception e){
  57. System.out.println("将错误码放到Excel时出错");
  58. flag = false;
  59. }finally{
  60. if(book!=null){
  61. book.close();
  62. }
  63. if(writableWorkbook!=null){
  64. try {
  65. writableWorkbook.close();
  66. } catch (Exception e) {
  67. e.printStackTrace();
  68. }
  69. }
  70. }
  71.  
  72. return flag;
  73. }
  74.  
  75. /**
  76. * 将数据写入到表格Sheet中
  77. *
  78. * @param targetSheet 要写入数据的表格
  79. * @return true表示写入成功 false表示失败
  80. * @throws IOException
  81. */
  82. private boolean appendDataToSheet(WritableSheet targetSheet) throws IOException{
  83. boolean flag = true;
  84. File file = null;
  85.  
  86. file = new File(errorsSrcFile);
  87.  
  88. if(!file.exists()){
  89. System.out.println("错误码源文件不存在");
  90. return false;
  91. }
  92.  
  93. //进行编码格式的转换
  94. InputStreamReader streamReader = new InputStreamReader(new FileInputStream(file), defaultEncoding);
  95. BufferedReader reader = new BufferedReader(streamReader);
  96. String nextLine = "";
  97.  
  98. int row = 1;
  99.  
  100. //处理格式
  101. while((nextLine=reader.readLine())!=null){
  102. String[] codeDescs = nextLine.split("=");
  103. if(codeDescs.length<=1){ //非错误码内容行
  104. continue;
  105. }
  106.  
  107. try{
  108. //插入错误码单元格
  109. Label codeLabel = generateLabel(errorCodeIndex-1, row, codeDescs[0]);
  110. targetSheet.addCell(codeLabel);
  111.  
  112. //插入描述信息单元格
  113. for(int j=0; j<errorDescIndexs.length; ++j ){
  114. Label descLabel = generateLabel(errorDescIndexs[j]-1, row, codeDescs[1]);
  115. targetSheet.addCell(descLabel);
  116. }
  117. }catch(Exception e){
  118. System.out.println("插入单元格信息出错");
  119. }
  120.  
  121. row++;
  122. }
  123.  
  124. return flag;
  125. }
  126.  
  127. private Label generateLabel(int col, int row, String contents){
  128. //Label的构造函数中是列序号在前,行序号在后
  129. return new Label(col, row, contents);
  130. }
  131.  
  132. public String getErrorsXls() {
  133. return errorsXls;
  134. }
  135. public void setErrorsXls(String errorsXls) {
  136. this.errorsXls = errorsXls;
  137. }
  138. public String getErrorsSrcFile() {
  139. return errorsSrcFile;
  140. }
  141. public void setErrorsSrcFile(String errorsSrcFile) {
  142. this.errorsSrcFile = errorsSrcFile;
  143. }
  144.  
  145. public static void main(String[] args){
  146. ErrorsToExcel transformer = new ErrorsToExcel();
  147.  
  148. if(transformer.appendErrorsToXls()){
  149. System.out.println("导入Excel成功");
  150. }else{
  151. System.out.println("导入Excel失败");
  152. }
  153. }
  154. }

遇到的奇葩问题

在Java工程中使用jxl时,一切正常。但是,日后将相应文件迁移到Spring MVC环境中使用时(且将jxl.jar加到了工程的build path中),但是加载工程时,每次调用到使用jxl的类时,都会报错jxl/write/writableCell类不存在;

解决方式:将jxl.jar放到WEB-INF/lib下解决;

使用jxl.jar操作Excel的更多相关文章

  1. poi-3.11-beta2-20140822.jar操作excel方法

    poi-3.11-beta2-20140822.jar操作excel方法 根据不同类型读取值的方法: // 获取单元格内不同类型的值 public String getValueByType(HSSF ...

  2. 使用JXL组件操作Excel和导出文件

    这段时间参与的项目要求做几张Excel报表,由于项目框架使用了jxl组件,所以把jxl组件的详细用法归纳总结一下.本文主要讲述了以下内容: JXL及相关工具简介 如何安装JXL JXL的基本操作 创建 ...

  3. java 使用jxl poi 操作excel

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

  4. Java使用jxl.jar包写Excel文件的最适合列宽问题基本实现

    以前用jxl.jar包,读写过Excel文件.也没有注意最适合列宽的问题,但是jxl.jar没有提供最适合列宽的功能,上次用到写了一下,可以基本实现最适合列宽. 注意,这个只是基本可以实现,基本针对中 ...

  5. POI操作Excel

    POI和Excel简介 JAVA中操作Excel的有两种比较主流的工具包: JXL 和 POI .jxl 只能操作Excel 95, 97, 2000也即以.xls为后缀的excel.而poi可以操作 ...

  6. java使用POI操作excel文件,实现批量导出,和导入

    一.POI的定义 JAVA中操作Excel的有两种比较主流的工具包: JXL 和 POI .jxl 只能操作Excel 95, 97, 2000也即以.xls为后缀的excel.而poi可以操作Exc ...

  7. JAVA的POI操作Excel

    1.1Excel简介 一个excel文件就是一个工作簿workbook,一个工作簿中可以创建多张工作表sheet,而一个工作表中包含多个单元格Cell,这些单元格都是由列(Column)行(Row)组 ...

  8. POI操作Excel的API注意点总结

    本篇是关于POI.jar操作Excel的API注意事项 基数问题 说明:我使用的是POI 3.15版本的,在版本问题上建议大家,在版本稳定的基础上尽量使用高版本的 看过很多帖子在问一个问题:假设原来有 ...

  9. JXL.jar简单封装Excel读写操作

    1.分析 一个excel文件能够有多页,每页excel中能够有多行,每行中能够有多列.用面向对象的思想能够把一行中的某列看作是一个String对象,一行看作是一个包括多个列的对象.一页是包括多行的对面 ...

随机推荐

  1. 安装tensorflow

    官网:http://tensorflow.org/安装步骤:1.sudo apt-get install python-pip python-dev python-virtualenv 3    co ...

  2. 谓词(NSPredicate)

    OC中的谓词操作是针对于数组类型的,他就好比数据库中的查询操作,数据源就是数组,这样的好处是我们不需要编写很多代码就可以去操作数组,同时也起到过滤的作用,我们可以编写简单的谓词语句,就可以从数组中过滤 ...

  3. 动态添加组件(XML)

    1.利用LayoutInflater的inflate动态加载XMLmLinearLayout = (LinearLayout)findViewById(R.id.LinearLayout_ID);La ...

  4. js 一个关于图片onload加载的事

    前几天一个项目让我头疼了很久,一个关于图片加载时的loading效果,因为不是太懂js,所以在网上各种找资料,但还是不理想,无赖苦心研究,终于有了一点眉目了,虽然个中还有一些道理不懂,至少目的达到了; ...

  5. 对bigDecimal的一些探索

    一般直接用简单的double等来做浮点计算可能会因为计算机的浮点运算机制出现一点问题,不符合生活中的计算常识,于是java就给我们包装了大数据类,bigdecimal用于处理浮点数据类.当然也有处理整 ...

  6. sharedPreference的奇怪bug

    一定要清楚sp的结构,而且要知道是什么类型的.类型不对,会引起很多不知道的bug,比如本来是int类型的值,如果用String的类型去匹配,会让Activity开Activity Thread,不断地 ...

  7. box-shadow 与 filter:drop-shadow 详解及奇技淫巧

    box-shadow 在前端的 CSS 编写工作想必十分常见.但是 box-shadow 除去它的常规用法,其实还存在许多不为人知的奇技淫巧. 喜欢 markdown 版本的可以戳这里. box-sh ...

  8. springmvc中url-pattern的大坑

    <servlet> <servlet-name>springmvc</servlet-name> <servlet-class>org.springfr ...

  9. ASP.NET页面生命周期总结(1)

    图解:1) 浏览器   :把用户的操作封装成一个请求通过socket发送到后台服务器. 后台服务器:首先有个内核模块Http.sys 和针对每个应用程序池都有一个请求队列.然后请求到达http.sys ...

  10. 近期专案PM相关收获

    1, 厚黑学讲的有道理, 坏人? 为什么占便宜., 好人为什么当不了坏人是有一定道理的.     -- 作为PM,能力大小居然都能胜任,从这一点上对组员不负责,如下种种都算有则改之无则加勉.      ...