java 中读取execl文件是必要功能,下面说下几种读取方式


1.jxl   (支持2003 不支持 2007  貌似最新版支持)

  1. /** 
  2.   * 规则设置的模板导入 
  3.   * @param file 
  4.   * @param exportDefindColum 
  5.   * @param exportDefindRemark 
  6.   * @param exportDefineid 
  7.   * @return 
  8.   * @throws Exception 
  9.   */ 
  10.  public List readSmProfitRuleExcel(File file,String[] defineColums,String[] defineRemarks,String[] defineids) throws Exception{ 
  11.   Workbook book = null; 
  12.   Cell cell = null; 
  13.   try { 
  14.    WorkbookSettings setting = new WorkbookSettings();    
  15.    java.util.Locale locale = new java.util.Locale("zh","CN");    
  16.    setting.setLocale(locale); 
  17.    setting.setEncoding("ISO-8859-1"); 
  18.    book = Workbook.getWorkbook(file, setting); 
  19.   } catch (Exception e2) { 
  20.    throw new Exception("Excel文件" + file.getName() + "读取出错。"); 
  21.   } 
  22.   List list = new ArrayList(); 
  23.   try { 
  24.    Sheet sheet = book.getSheet(0); 
  25.    int rows=sheet.getRows(); 
  26.    int columns=sheet.getColumns(); 
  27.    if(rows==0){ 
  28.     throw new Exception("Excel文件" + file.getName() + "无任何内容,禁止导入。"); 
  29.    } 
  30.    if(columns!=defineColums.length+1){ 
  31.     System.out.println("取出execl"+columns+"行,实际取出"+defineColums+1+"行"); 
  32.     throw new Exception("Excel文件" + file.getName() + "列头与模板列头不符 ,禁止导入 (如修改了规则,需存档重新生成模板再导入)。"); 
  33.    } 
  34.    for (int i = 0; i < defineids.length; i++) { 
  35.     String head = defineRemarks[i]+"-"+defineColums[i].substring(defineColums[i].indexOf(":")+1); 
  36.     if(!sheet.getCell(i,0).getContents().equals(head)){ 
  37.      System.out.println("取出execl列头"+sheet.getCell(i,0).getContents()+",实际取出"+head+"不匹配"); 
  38.      throw new Exception("Excel文件" + file.getName() + "列头与模板列头不符 ,禁止导入 (如修改了规则,需存档重新生成模板再导入)。"); 
  39.     } 
  40.    } 
  41.     
  42.    for (int i = 1; i < rows; i++) { 
  43.     for (int j = 0; j < columns; j++) { 
  44.      String content=sheet.getCell(j,i).getContents().trim(); 
  45.      if(content.equals("")){ 
  46.       throw new Exception("Excel文件" + file.getName() + "第"+(i+1)+"行,第"+(j+1)+"列存在空数据,禁止导入"); 
  47.      } 
  48.      Map<String, String> map = new HashMap<String, String>(); 
  49.      if(j>defineids.length-1){ 
  50.       map.put("defineid", "-1"); 
  51.      }else{ 
  52.       map.put("defineid", defineids[j]); 
  53.      } 
  54.      map.put("linenum",(i+1)+""); 
  55.      map.put("value", content); 
  56.      list.add(map); 
  57.     } 
  58.    } 
  59.    book.close(); 
  60.   } catch (Exception e) { 
  61.    book.close(); 
  62.    throw new Exception(e.getMessage()); 
  63.   } 
  64.   return list; 
  65.  }



附:

2.poi (apache 下的开源项目   03,07都支持)

  1. package com.dadi.oa.util.poi;
  2. import java.io.File;
  3. import java.io.FileInputStream;
  4. import java.io.InputStream;
  5. import java.util.ArrayList;
  6. import java.util.HashMap;
  7. import java.util.List;
  8. import org.apache.commons.logging.Log;
  9. import org.apache.commons.logging.LogFactory;
  10. import org.apache.poi.hssf.usermodel.HSSFCell;
  11. import org.apache.poi.hssf.usermodel.HSSFWorkbook;
  12. import org.apache.poi.ss.usermodel.Cell;
  13. import org.apache.poi.ss.usermodel.Row;
  14. import org.apache.poi.ss.usermodel.Sheet;
  15. import org.apache.poi.ss.usermodel.Workbook;
  16. import org.apache.poi.xssf.usermodel.XSSFWorkbook;
  17. import com.dadi.oa.util.StringUtil;
  18. /**
  19. * poi 读取 </br>
  20. * 1.execl兼容 03,07 <br/>
  21. * 2.构造方法需传入标准 <br/>
  22. * 3.对应的标准可以在checkReadStandard()扩展 <br/>
  23. *
  24. * @author ao.ouyang
  25. */
  26. public class ExeclReader {
  27. private final Log logger = LogFactory.getLog(this.getClass());
  28. /**
  29. * 数据Map集合 dataMap ,默认标准Map keys :<br/>
  30. * rowNum : 行号 <br/>
  31. * ColumnNum : 列号 <br/>
  32. * val : String类型值
  33. */
  34. private List dataMap = new ArrayList();
  35. //读取标准,定义新的标准可以在检查标准方法中拓展
  36. private String readStandard;
  37. private File readFile;
  38. private Workbook wb;
  39. private Sheet st;
  40. private Row row;
  41. //抽取文本工具
  42. private ExeclExtractor extractor;
  43. /**
  44. * ExeclReader
  45. * @param readItem 读取的execl
  46. * @param readStandards 无标准 Null
  47. */
  48. public ExeclReader(File readFile,String readStandards) throws Exception{
  49. this.readFile = readFile;
  50. this.readStandard = readStandard;
  51. readExecl();
  52. }
  53. private void readExecl() throws Exception{
  54. InputStream inputStream = new FileInputStream(readFile);
  55. try {
  56. if(readFile.getAbsolutePath().endsWith("xlsx")){
  57. wb=new XSSFWorkbook(inputStream);
  58. //实例化抽取工具
  59. extractor = new XSSFExeclExtractor((XSSFWorkbook)wb);
  60. }else{
  61. wb=new HSSFWorkbook(inputStream);
  62. extractor = new HSSFExeclExtractor((HSSFWorkbook)wb);
  63. }
  64. extractor.setFormulasNotResults(true);
  65. extractor.setIncludeCellComments(true);
  66. } catch (Exception e) {
  67. e.printStackTrace();
  68. throw new Exception("EXECL文件读取失败,请检查文件!");
  69. }
  70. st=wb.getSheetAt(0);
  71. //检查标准
  72. checkReadStandard();
  73. }
  74. /**
  75. * 检查标准
  76. * @throws Exception
  77. */
  78. private void checkReadStandard() throws Exception{
  79. if(StringUtil.isEmptyString(readStandard)){ //默认标准,无操作,读取execl数据
  80. readExeclToMapList();
  81. }
  82. }
  83. /**
  84. * 读取execl数据 封装数据
  85. * @throws Exception
  86. */
  87. private void readExeclToMapList() throws Exception{
  88. logger.info("============ExeclReader.readExeclToMapList() begin===========");
  89. try {
  90. for (int i = st.getFirstRowNum(); i <= st.getLastRowNum(); i++) {
  91. row=st.getRow(i);
  92. List<HashMap<String, String>> rowMap = new ArrayList<HashMap<String,String>>();
  93. for (int j = row.getFirstCellNum(); j < row.getLastCellNum(); j++) {
  94. HashMap<String,String> cellMap = new HashMap<String, String>();
  95. cellMap.put("rowNum", String.valueOf(i+1));
  96. cellMap.put("ColumnNum", String.valueOf(j+1));
  97. Cell cell = row.getCell(j) ;
  98. cellMap.put("val",extractor.getText(cell));
  99. rowMap.add(cellMap);
  100. }
  101. dataMap.add(rowMap);
  102. }
  103. } catch (Exception e) {
  104. e.printStackTrace();
  105. throw new Exception("读取execl 数据异常,请检查!!!");
  106. }
  107. logger.info("============ExeclReader.readExeclToMapList() end===========");
  108. }
  109. /**
  110. * 返回头数据
  111. * @return
  112. */
  113. public List getHeaderData(){
  114. return (List) dataMap.get(0);
  115. }
  116. /**
  117. * 返回底部数据
  118. * @return
  119. */
  120. public List getBottomData(){
  121. return (List) dataMap.get(dataMap.size()-1);
  122. }
  123. /**
  124. * 返回指定行的数据
  125. * @param columnIndex
  126. * @return
  127. */
  128. public List getRowData(int rowIndex){
  129. if(rowIndex<0){
  130. return getHeaderData();
  131. }else if(rowIndex > dataMap.size()){
  132. return getBottomData();
  133. }else{
  134. return (List) dataMap.get(rowIndex-1);
  135. }
  136. }
  137. /**
  138. * 获取指定列数据
  139. * @return
  140. */
  141. public List getcolumnData(int coloumIndex){
  142. if(coloumIndex > getColumnNum()){
  143. coloumIndex = getColumnNum();
  144. }else if(coloumIndex < 1){
  145. coloumIndex = 1;
  146. }else{
  147. coloumIndex = coloumIndex-1;
  148. }
  149. List columnData = new ArrayList();
  150. for (int i = 0; i < dataMap.size(); i++) {
  151. List rowData = (List) dataMap.get(i);
  152. for (int j = 0; j < rowData.size(); j++) {
  153. if(i==coloumIndex){
  154. columnData.add(rowData.get(j));
  155. }
  156. }
  157. }
  158. return columnData;
  159. }
  160. /**
  161. * 返回行总数
  162. * @return
  163. */
  164. public int getRowCount(){
  165. return st.getLastRowNum();
  166. //return st.getPhysicalNumberOfRows();
  167. }
  168. /**
  169. * 返回列总数
  170. * @return
  171. */
  172. public int getColumnNum(){
  173. return st.getRow(st.getFirstRowNum()).getLastCellNum();
  174. /* row= st.getRow(0);
  175. return row.getPhysicalNumberOfCells();*/
  176. }
  177. /**
  178. * 返回数据总数
  179. * @return
  180. */
  181. public int getDataCount(){
  182. return getRowCount() * getColumnNum();
  183. }
  184. /**
  185. * 返回数据总数 不含头
  186. * @return
  187. */
  188. public int getNotHeaderDataCount(){
  189. return getRowCount()-1 * getColumnNum();
  190. }
  191. public List getDataMap() {
  192. return dataMap;
  193. }
  194. public void setDataMap(List dataMap) {
  195. this.dataMap = dataMap;
  196. }
  197. }




附:


3.可使用 浏览器下的 ACTIVEX 空间读取 execl (ie浏览器)
附:

附件列表

java 读取execl文件的更多相关文章

  1. java分享第十六天( java读取properties文件的几种方法&java配置文件持久化:static块的作用)

     java读取properties文件的几种方法一.项目中经常会需要读取配置文件(properties文件),因此读取方法总结如下: 1.通过java.util.Properties读取Propert ...

  2. Java读取Excel文件的几种方法

    Java读取 Excel 文件的常用开源免费方法有以下几种: 1. JDBC-ODBC Excel Driver 2. jxl.jar 3. jcom.jar 4. poi.jar 简单介绍: 百度文 ...

  3. Java读取txt文件

    package com.loongtao.general.crawler.slave.utils; import java.io.BufferedReader; import java.io.File ...

  4. java 读取XML文件作为配置文件

    首先,贴上自己的实例: XML文件:NewFile.xml(该文件与src目录同级) <?xml version="1.0" encoding="UTF-8&quo ...

  5. java 读取TXT文件的方法

    java读取txt文件内容.可以作如下理解: 首先获得一个文件句柄.File file = new File(); file即为文件句柄.两人之间连通电话网络了.接下来可以开始打电话了. 通过这条线路 ...

  6. 用java读取properties文件--转

    今天为了通过java读取properties文件,google了很长时间,终于找到了.现在特记录之和大家一起分享.     下面直接贴出代码:java类 public class Mytest pub ...

  7. java读取xml文件报“org.xml.sax.SAXParseException: Premature end of file” .

    背景:java读取xml文件,xml文件内容只有“<?xml version="1.0" encoding="UTF-8"?>”一行 java读取该 ...

  8. java读取TXT文件的方法

    java读取txt文件内容.可以作如下理解: 首先获得一个文件句柄.File file = new File(); file即为文件句柄.两人之间连通电话网络了.接下来可以开始打电话了. 通过这条线路 ...

  9. java读取XML文件的四种方式

    java读取XML文件的四种方式 Xml代码 <?xml version="1.0" encoding="GB2312"?> <RESULT& ...

随机推荐

  1. 〖Windows〗zigbee实验之cygwin编译tinyos.jar编译出错的解决方法

    1. 使用的cygwin安装包下载地址:cygwin-files.zip 2. 使用的一些rpm安装包的下载地址:cygwin_cc2430_rpms.zip 3. cygwin的默认安装目录是:C: ...

  2. Knockout.js 数据验证之插件版和无插件版

    本文我们将介绍使用 Knockout.js 实现一些基本的数据验证.就如我们在标题里提到的,我们会使用两种方法来创建数据验证方法. 使用自定义方法,不需要任何插件 最简单的方法是使用已有的插件 如果你 ...

  3. webservice系统学习笔记7-使用handler实现过滤器/拦截器效果

    handler可以作用于客户端,也可以作用了服务端 handler分为:1.LogicalHandler:只能获取到soap消息的body. 2.SOAPHandler:可以获取SOAPMessage ...

  4. VB.NET服务器端令客户端下载PDF文件

    后台JS调用另一个控件,通过SESSION传递sDocumentPath 控件后台代码如下     Response.Clear() '如果不清,则有可能将页面源码作为文件内容的一部分传递给用户    ...

  5. &和&&的一点区别

    &两边的语句都会执行,&&有可能只执行左边的语句. &做位运算与的时候可以更高效的判断一个数字是不是奇数. 1&1 = 1 0&1 = 0 所以和1与结 ...

  6. 微信小程序-通知滚动小提示

    代码地址如下:http://www.demodashi.com/demo/14044.html 一.前期准备工作 软件环境:微信开发者工具 官方下载地址:https://mp.weixin.qq.co ...

  7. 那些遇到的position-fixed无效事件

    本篇文章由:http://xinpure.com/position-fixed-encountered-an-invalid-event/ 第一次无效事件 事件主角: transform 应用环境: ...

  8. 马老师 生产环境mysql主从复制、架构优化方案

    Binlog日志(主服务器) => 中继日志(从服务器 运行一遍,保持一致).从服务器是否要二进制日志取决于架构设计.如果二进制保存足够稳定,从性能上来说,从服务器不需要二进制日志.默认情况下, ...

  9. PC端轻松控制Android手机,PC Control Andoroid,PC控制安卓手机

    记录此次经历的目的是帮助需要的人或下次使用时少走弯路,我为此试用了不少工具及方法,因为追求免费,像"Weak Control:在PC上控制你的Android手机"还要收费的我就不弄 ...

  10. PowerDesigner 表模型图展示列信息

    今天突然发现表模型不展示列信息了,只显示一个名称,如下图:     虽让点击表模型能看到,但我想让他本身就显示,pd默认就是会显示的,今天不知怎么了,网上找这方面的设置很难找,所以我记录下设置方法(我 ...