`
comeon-liming
  • 浏览: 48226 次
  • 性别: Icon_minigender_1
  • 来自: 大连
最近访客 更多访客>>
社区版块
存档分类
最新评论

操作excel文件,从文件中读取数据。

    博客分类:
  • java
阅读更多
java 代码
  1.   
  2. import org.apache.log4j.*;   
  3. import org.apache.poi.hssf.usermodel.*;   
  4. import org.apache.poi.poifs.filesystem.POIFSFileSystem;   
  5.   
  6. import java.util.*;   
  7. import java.io.*;   
  8. /**  
  9. *  
  10. * <p>Title: POIBean.java</p>  
  11. *  
  12. * <p>Description: 该类用于操作excel文件,从文件中读取数据。</p>  
  13. * @version 1.0  
  14. */  
  15. public class POIUtil   
  16. {   
  17.     //定义日志记录器   
  18.     private static final Logger log = Logger.getLogger(POIUtil.class);   
  19.        
  20.     private static POIUtil poiUtil = null;   
  21.        
  22.     //单例   
  23.     POIUtil()   
  24.     {   
  25.     }   
  26.        
  27.     public static POIUtil getInstance()   
  28.     {   
  29.         if (poiUtil == null)   
  30.         {   
  31.             poiUtil = new POIUtil();   
  32.         }   
  33.         return poiUtil;   
  34.     }   
  35.        
  36.      /*******读取xls表格中的数据********  
  37.      * @param filePath : 文件完整路径名  
  38.      * @param worksheet: 读取的工作表,0为第一张工作表  
  39.      * @param start    : 开始读的行数  
  40.      * @param length   : 读取的列数长度,从第一列开始  
  41.      * @param link     : 连接各个单元格的值  
  42.      * @param maxRows  : 读取的最多行数  
  43.      * @throws IOException  
  44.      */  
  45.     public ArrayList readData(String filePath, int worksheet, int start,   
  46.                               int length, String link, final int maxRows) throws IOException   
  47.     {   
  48.         try  
  49.         {   
  50.             File file = new File(filePath);   
  51.             if (!file.exists())   
  52.             {   
  53.                 log.error("read file failed : " + filePath + " is not exist !");   
  54.                 return null;   
  55.             }   
  56.         }   
  57.         catch (Exception e)   
  58.         {   
  59.             log.error(e.toString());   
  60.             return null;   
  61.         }   
  62.         ArrayList arrayList = new ArrayList();   
  63.         FileInputStream fis = null;   
  64.         try  
  65.         {   
  66.             fis = new FileInputStream(filePath);   
  67.             POIFSFileSystem fs = new POIFSFileSystem(fis);   
  68.             HSSFWorkbook wb = new HSSFWorkbook(fs);   
  69.             HSSFSheet sheet = wb.getSheetAt(worksheet);   
  70.             //不存在worksheet   
  71.             if (sheet == null)   
  72.             {   
  73.                 log.error("can not get the specified sheet at " + worksheet);   
  74.                 return null;   
  75.             }   
  76.             //所有的行数   
  77.             int times = 0;   
  78.             for (int i = start; i <= sheet.getLastRowNum(); i++)   
  79.             {   
  80.                 //用于单元格内容为空时,确定其坐标   
  81.                 String division = "";   
  82.                 //整行数据都不为空时,存储这一行的数据   
  83.                 StringBuffer rowValue = new StringBuffer("");   
  84.                 times++;   
  85.                 //超过读的行数   
  86.                 if (times > maxRows)   
  87.                 {   
  88.                     break;   
  89.                 }   
  90.                 HSSFRow row = sheet.getRow(i);   
  91.                 //行值不为空   
  92.                 if (row != null)   
  93.                 {   
  94.                     //所有的列数   
  95.                     for (int j = 0; j < length; j++)   
  96.                     {   
  97.                         HSSFCell cell = row.getCell((short) j);   
  98.                         if (cell == null)   
  99.                         {   
  100.                             division = "@" + (i + 1) + ":" + (j + 1);   
  101.                             rowValue.append(division);   
  102.                             rowValue.append(link);   
  103.                             log.debug("cell " + (i + 1) + ":" + (j + 1) +   
  104.                                       "is null");   
  105.                             continue;   
  106.                         }   
  107.                         switch (cell.getCellType())   
  108.                         {   
  109.                             //单元格内容是数字   
  110.                             case HSSFCell.CELL_TYPE_NUMERIC:   
  111.                                 rowValue.append(new Double(cell.   
  112.                                         getNumericCellValue()).intValue());   
  113.                                 rowValue.append("@" + (i + 1) + ":" + (j + 1));   
  114.                                 rowValue.append(link);   
  115.                                 break;   
  116.   
  117.                                 //单元格内容是字符串   
  118.                             case HSSFCell.CELL_TYPE_STRING:   
  119.                                 rowValue.append(cell.getStringCellValue());   
  120.                                 rowValue.append("@" + (i + 1) + ":" + (j + 1));   
  121.                                 rowValue.append(link);   
  122.                                 break;   
  123.                             default:   
  124.                                 division = "@" + (i + 1) + ":" + (j + 1);   
  125.                                 rowValue.append(division);   
  126.                                 rowValue.append(link);   
  127.                         }   
  128.                     }   
  129.                     arrayList.add(rowValue.toString());   
  130.                 }   
  131.                 //行值为空,登记位置   
  132.                 else  
  133.                 {   
  134.                     log.debug("row " + (i + 1) + "is null");   
  135.                 }   
  136.             }   
  137.         }   
  138.         catch (IOException e)   
  139.         {   
  140.             log.error(e.toString());   
  141.             throw new IOException("IO Exception was found");   
  142.         }   
  143.         finally  
  144.         {   
  145.             // 关闭流   
  146.             if (fis != null)   
  147.             {   
  148.                 fis.close();   
  149.             }   
  150.         }   
  151.         return arrayList;   
  152.     }   
  153.        
  154.     /**  
  155.      * 对Excel文件进行判断  
  156.      * @param File file  Excel文件  
  157.      * @param sheetNames Sheet的名字  
  158.      * @return boolean  是否是真文件  true 真  false 加  
  159.      */  
  160.     public boolean isFile(File file, String[] sheetNames) throws Exception   
  161.     {   
  162.         //记录日志   
  163.         log.debug("enter getCounts()");   
  164.            
  165.         //参数判断   
  166.         if (file == null || !file.exists() || sheetNames == null || sheetNames.length == 0)   
  167.         {   
  168.             log.error("param is not valid");   
  169.             throw new IllegalArgumentException("param is not valid");   
  170.         }   
  171.            
  172.         //定义流变量   
  173.         POIFSFileSystem fs = null;   
  174.         FileInputStream fis = null;   
  175.         HSSFWorkbook hssfWorkBook = null;   
  176.            
  177.         boolean isValid = false;   
  178.            
  179.         //默认的sheet个数为0   
  180.         int counts = 0;   
  181.         try  
  182.         {   
  183.             //读入文件   
  184.             fis = new FileInputStream(file);   
  185.             fs = new POIFSFileSystem(fis);   
  186.                
  187.             hssfWorkBook = new HSSFWorkbook(fs);   
  188.             counts = hssfWorkBook.getNumberOfSheets();   
  189.                
  190.             //对Sheet的个数进行判断   
  191.             if (counts != sheetNames.length)   
  192.             {   
  193.                 return isValid;    
  194.             }   
  195.                
  196.             String tempSheetName = null;   
  197.                
  198.             //再判断sheet名   
  199.             for (int i = 0; i < counts; i++)   
  200.             {   
  201.                 tempSheetName = hssfWorkBook.getSheetName(i);   
  202.                 if (!tempSheetName.equals(sheetNames[i].trim()))   
  203.                 {   
  204.                     return isValid;   
  205.                 }   
  206.             }   
  207.             isValid = true;   
  208.         }   
  209.         catch(IOException ioe)   
  210.         {   
  211.             log.error(ioe.toString());   
  212.             return isValid;   
  213.         }   
  214.         catch(Exception e)   
  215.         {   
  216.             log.error(e.toString());   
  217.             throw new Exception();   
  218.         }   
  219.         finally  
  220.         {   
  221.             try  
  222.             {   
  223.                 fis.close();   
  224.             }   
  225.             catch(Exception e)   
  226.             {   
  227.                 log.error(e.toString());   
  228.                 return isValid;   
  229.             }   
  230.         }   
  231.            
  232.         return isValid;    
  233.     }   
  234.        
  235.        
  236.        
  237.     //测试   
  238.     public static void main(String[] args)   
  239.     {   
  240.         POIUtil poiUtil = new POIUtil();   
  241.            
  242.         ArrayList list = null;   
  243.         try  
  244.         {   
  245.             list=poiUtil.readData("D:\\task模板.xls",0,0,2,"@@@",3);   
  246.         }   
  247.         catch(IOException ioe)   
  248.         {   
  249.                
  250.         }   
  251.            
  252.         if (list == null)   
  253.         {   
  254.             System.out.println("======================");   
  255.         }   
  256.         else  
  257.         {   
  258.             String temp = null;   
  259.             String[] str = new String[2];   
  260.             String[] tempStr = new String[2];   
  261.                
  262.             for (int i = 0; i < list.size(); i++)   
  263.             {   
  264.                 temp = (String)list.get(i);   
  265.                 System.out.println("========row" + temp);   
  266.                 str = temp.split("@@@");   
  267.                 for (int j = 0; j < str.length; j++)   
  268.                 {   
  269.                     tempStr = str[j].split("@");   
  270.                     System.out.println(tempStr.length);   
  271.                     System.out.println(tempStr[0]);   
  272.                     System.out.println(tempStr[1]);   
  273.                 }   
  274.             }   
  275.         }   
  276.     }   
  277.   
  278. }   
分享到:
评论

相关推荐

    C#读取加密Excel文件

    C# 读取加密的Excel 文件... 开始研究NPOI读取加密的Excel文件,没有研究出来,后来才改用Microsoft.Office.Interop.Excel读取加密的Excle文件。若有那位大牛研究出NPOI读取加密的Excel文件,希望能共享出源码来。 谢谢

    html静态读取excel文件

    在网页中实现HTML静态读取Excel文件,通常需要借助JavaScript库和一些前端技术。这个过程涉及到几个关键知识点:文件API、Ajax、数据转换以及可能的跨域问题。下面将详细阐述这些内容。 首先,HTML5引入了File API...

    QtXlsx第三方库操作Excel文件-对excel文件进行读取,修改,刷新,删除等操作

    2. **修改Excel文件**:在读取数据后,我们可以通过QtXlsx修改这些数据。这包括设置单元格的值、格式、样式,以及插入、删除行列等。例如,`setCellValue()`用于设置单元格的文本或数值,`setCellStyle()`可以改变...

    qt读取excel文件

    在Qt Creator中,可以设置断点,使用调试器检查代码执行过程中的变量状态,确保Excel文件被正确读取。 10. **代码优化**: 根据实际需求,可能需要优化读取速度,如批量读取、异步读取等。此外,考虑到性能和内存...

    vb6读取excel文件

    在VB6(Visual Basic 6)中,读取Excel文件是一...结合这两个部分,你可以在VB6中读取Excel文件,并将数据写入SQL数据库,或者从SQL数据库中读取数据并显示在Excel中。这些基本操作可以作为更复杂数据处理任务的基础。

    C++读取Excel数据

    在C++中,读取Excel数据通常涉及到使用OLE Automation(对象链接和嵌入自动化)技术,这是一种允许不同应用程序之间交互的方式...这种技术使得C++程序能够灵活地读取、写入和修改Excel文件,实现数据的导入和导出功能。

    Android Excel文件写入和读取

    在Android应用开发中,有时需要处理大量的结构化数据,这时Excel文件就成为一个理想的存储选择,因为它们便于人类阅读,同时也方便程序进行数据处理。本文将详细介绍如何在Android中实现Excel文件的读取与写入。 ...

    java解析Excel文件并把数据存入数据库和导出数据为excel文件SpringBoot代码示例

    1、java解析读取excel文件中的数据,并写入数据库。 2、java读取数据库数据,并导出为excel文件。 3、README.md中有详细的操作步骤示例。 使用说明: 1. 先使用postman导入:other/excel相关.postman_collection....

    C++读取excel数据

    读取环境为Win10+VS2015,个人参考资料封装的excel读取模块用来读取Excel2007中的数据,文件为压缩文件,亲测可用。

    vb.net 编程读取excel文件中的数据

    在VB.NET编程中,读取Excel文件是常见的任务,尤其在数据处理和分析场景中。以下将详细讲解如何使用VB.NET来实现这一功能,并提供一些关键知识点。 首先,要读取Excel文件,我们需要一个能够与Excel文件交互的库。...

    读取Excel文件将数据存入map集合

    本篇文章介绍了一个方法,该方法能够读取Excel文件并将其中的数据存储到Java中的`Map`集合里,便于后续进行数据分析或处理。 #### 方法概述 方法签名如下: ```java public Map, Map, String&gt;&gt; importReportExcel...

    QT 快速读取Excel文件

    另外,如果你的项目允许引入Python作为后端处理,那么可以使用pandas库,它提供了强大的数据处理能力,与QT结合可以实现快速读取和操作Excel文件。Python的pandas库有read_excel函数,可以方便地读取Excel文件到...

    python3 循环读取excel文件并写入json操作

    在Python编程中,有时我们需要处理大量数据,例如从Excel文件中读取数据并将其转换成其他格式,如JSON。在给定的示例中,它演示了如何使用Python3读取多个Excel文件并将数据写入一个JSON文件。下面将详细解释这个...

    java读取excel文件

    Java 读取 Excel 文件是指使用 Java 语言从 Excel 文件中读取数据,并对其进行处理的过程。下面将详细介绍 Java 读取 Excel 文件的过程和相关知识点。 Java 读取 Excel 文件的步骤 1. 导入所需的包:在 Java 项目...

    Python读取Excel文件.zip

    python读取excel数据:Python读取Excel文件Python读取Excel文件Python读取Excel文件Python读取Excel文件Python读取Excel文件Python读取Excel文件Python读取Excel文件Python读取Excel文件Python读取Excel文件Python...

    C#中读取excel文件中数据并导入dataGridView添加读取ProgressBar进度及当前读取条目挨个

    在本场景中,我们关注的重点是如何在读取Excel文件数据并将其导入到dataGridView时,同时展示一个进度条(progressbar)和当前正在读取的条目信息。这将提升用户体验,让用户了解后台操作的状态。 首先,我们需要...

    读取大数据量的excel文件

    本案例采用的poi读取大数据的excel文件 usermodel模式对excel操作前需要将文件全部转入内存,对较大文件来说内存开销很大。但是其使用简单。 eventusermodel模式采用事件模型,对文件边读取边处理,内存消耗较低,...

    TIA博途WinCC通过VB脚本从 Excel中读取数据的具体方法介绍.docx

    ### TIA博途WinCC通过VB脚本从Excel中读取数据的具体方法 ...通过遵循这些步骤,可以实现自动化地从Excel文件读取数据,并在HMI界面上显示这些数据。这对于那些需要定期更新或监控数据的应用场景来说非常有用。

    直接读取Excel文件数据

    标题中的“直接读取Excel文件数据”指的是在Visual C++(简称VC)环境下,通过编程方式访问并解析Excel文件中的内容。通常,这涉及到使用Microsoft Office的自动化接口,如Microsoft Excel Object Library,或者使用...

    LabVIEW读取Excel文件中的值

    3. **读取数据**:使用Excel Analysis Toolkit中的VI,如“Read Range”或“Read Cell”,来获取指定单元格或范围的值。你可以通过行列坐标或范围名称来指定要读取的部分。 4. **处理数据**:读取的数据会被转化为...

Global site tag (gtag.js) - Google Analytics