zoukankan      html  css  js  c++  java
  • [转载]Java读取Excel中的单元格数据

     目前网上能找到的读取Excel表格中数据的两种比较好的方案:PageOffice好用开发效率高;POI免费。供大家参考,针对具体情况选择具体方案。

      1. PageOffice读取excel

      

    复制代码
        import com.zhuozhengsoft.pageoffice.*;
        import com.zhuozhengsoft.pageoffice.excelreader.*;
    
        //读取Excel单元格数据
        Workbook workBook = new Workbook(request, response);
        Sheet sheet = workBook.openSheet("Sheet1");
        Table table = sheet.openTable("A1:F5");while (!table.getEOF()) {
            //获取提交的数值
            if (!table.getDataFields().getIsEmpty()) {
    for(int i=0; i<6; i++){ String content = table.getDataFields().get(i).getText(); System.out.println(content);//输出单元格数据
    }
    } //循环进入下一行 table.nextRow(); } table.close(); workBook.close();
    复制代码

      这些代码只是在服务器端接收客户端提交的excel单元格数据,PageOffice真正的读取单元格数据工作是在客户端执行的,由于服务器端并没有对excel文件做任何读取操作,只接受一下数据就行,无需耗费大量资源去处理文件,也无需处理多个客户并发请求的问题,因为每个客户端都各自读取自己的数据,服务器端只接收数据保存到数据库。

      2. poi读取excel

      

    复制代码
    package com.test.poi;
     
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.util.Iterator;
     
    import org.apache.poi.hssf.extractor.ExcelExtractor;
    import org.apache.poi.hssf.usermodel.HSSFCell;
    import org.apache.poi.hssf.usermodel.HSSFRow;
    import org.apache.poi.hssf.usermodel.HSSFSheet;
    import org.apache.poi.hssf.usermodel.HSSFWorkbook;
    import org.apache.poi.poifs.filesystem.POIFSFileSystem;
    import org.apache.poi.ss.usermodel.Cell;
    import org.apache.poi.ss.usermodel.Row;
     
    public class ReadExcel {
     
    public static void main(String[] args) throws Exception {
        HSSFWorkbook wb = null;
        POIFSFileSystem fs = null;
        try {
          fs = new POIFSFileSystem(new FileInputStream("e:\workbook.xls"));
          wb = new HSSFWorkbook(fs);
        } catch (IOException e) {
          e.printStackTrace();
        }
     
        HSSFSheet sheet = wb.getSheetAt(0);
        HSSFRow row = sheet.getRow(0);
        HSSFCell cell = row.getCell(0);
        String msg = cell.getStringCellValue();
        System.out.println(msg);
    }
    public static void method2() throws Exception {
     
        InputStream is = new FileInputStream("e:\workbook.xls");
        HSSFWorkbook wb = new HSSFWorkbook(new POIFSFileSystem(is));
     
        ExcelExtractor extractor = new ExcelExtractor(wb);
        extractor.setIncludeSheetNames(false);
        extractor.setFormulasNotResults(false);
        extractor.setIncludeCellComments(true);
     
        String text = extractor.getText();
        System.out.println(text);
    }
     
    public static void method3() throws Exception {
        HSSFWorkbook wb = new HSSFWorkbook(new FileInputStream("e:\workbook.xls"));
        HSSFSheet sheet = wb.getSheetAt(0);
     
        for (Iterator<Row> iter = (Iterator<Row>) sheet.rowIterator(); iter.hasNext();) {
          Row row = iter.next();
          for (Iterator<Cell> iter2 = (Iterator<Cell>) row.cellIterator(); iter2.hasNext();) {
            Cell cell = iter2.next();
            String content = cell.getStringCellValue();// 除非是sring类型,否则这样迭代读取会有错误
            System.out.println(content);
          }
        }
    }
    }
    复制代码

      注意:HSSFWorkbook,XSSFWorkbook的区别:前者是解析出来excel 2007 以前版本的,后缀名为xls的,后者是解析excel 2007 版的,后缀名为xlsx。需要针对不同的excel版本编写不同的程序,判断该用哪个workbook来对其进行解析处理,而且通常需要开发人员自己把这些方法都做相应封装,使其更面向对象,工作量有点大,还有就是要求开发高质量代码,因为是在服务器上执行的,必须解决多个客户同时请求的并发问题,和万一程序执行异常的处理问题,上例只是main方法的简单示例而已,仅供参考!

  • 相关阅读:
    STM32中GPIO的8种工作模式
    robots.txt与搜索引擎
    关于《腾讯工具类APP的千年老二》的读后感
    PCB布线的操作步骤
    c语言数据库编程ODBC
    锂电池相关结构优势特点及其保护电路解析方案
    C语言中的#与##字符的作用
    PADS中Layer的描述说明
    吃了单片机GPIO端口工作模式的大亏——关于强推挽输出和准双向口(弱上拉)的实际应用
    Protel与PADS之间相关文件的转换
  • 原文地址:https://www.cnblogs.com/qq742655/p/9024443.html
Copyright © 2011-2022 走看看