• java 读取excel 2007 .xlsx文件 poi实现


    工作需要读取excel里面的行内容,使用java实现较为简单。

    在最开始,尝试使用 jxl-2.6.12 来实现读取excel 的行内容。但是按照网上的方法,程序根本无法正确处理文件流。经过谷姐的一番努力,发现jxl只能支持excel 2000而已(或许我用的方法有误)。jxl 操作excel 2007 无望,无奈放弃之。

    之后转到apache 的poi 库,看到它的文档里面说到,都可以支持office 2010了,对于2007 应该不在话下。果断转投poi 的怀抱。

    poi官方网址:http://poi.apache.org/

    我下载的是poi 3.10版本。

    解压包后,将下面的jar包加入工程。

    poi——1

    测试poi代码

    package rw_excel;
    
    import static org.junit.Assert.*;
    
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.IOException;
    
    import org.apache.poi.hssf.extractor.ExcelExtractor;
    import org.apache.poi.ss.usermodel.Cell;
    import org.apache.poi.ss.usermodel.Row;
    import org.apache.poi.ss.usermodel.Sheet;
    import org.apache.poi.ss.usermodel.Workbook;
    import org.apache.poi.ss.usermodel.WorkbookFactory;
    import org.apache.poi.xssf.usermodel.XSSFWorkbook;
    import org.junit.AfterClass;
    import org.junit.BeforeClass;
    import org.junit.Test;
    
    public class test_poi {
    
        @BeforeClass
        public static void setUpBeforeClass() throws Exception {
        }
    
        @AfterClass
        public static void tearDownAfterClass() throws Exception {
        }
    
        @Test 
        public void test() throws IOException {
    //        fail("Not yet implemented");
            String file_dir = "test.xlsx";
            Workbook book = null;
            book = getExcelWorkbook(file_dir);
            Sheet sheet = getSheetByNum(book,0);
            
            int lastRowNum = sheet.getLastRowNum();
            
            System.out.println("last number is "+ lastRowNum);
            
            for(int i = 0 ; i <= lastRowNum ; i++){
                Row row = null;
                row = sheet.getRow(i);
                if( row != null ){
                    System.out.println("reading line is " + i);
                    int lastCellNum = row.getLastCellNum();
                    System.out.println("lastCellNum is " + lastCellNum );
                    Cell cell = null;
                    
                    for( int j = 0 ; j <= lastCellNum ; j++ ){
                        cell = row.getCell(j);
                        if( cell != null ){
                            String cellValue = cell.getStringCellValue();
                            System.out.println("cell value is 
    " + cellValue);
                        }
                    }
                }
            }
            
        }
    
        public static Sheet getSheetByNum(Workbook book,int number){  
            Sheet sheet = null;  
            try {  
                sheet = book.getSheetAt(number);  
    //          if(sheet == null){  
    //              sheet = book.createSheet("Sheet"+number);  
    //          }  
            } catch (Exception e) {  
                throw new RuntimeException(e.getMessage());  
            }  
            return sheet;  
        }  
        public static Workbook getExcelWorkbook(String filePath) throws IOException{  
            Workbook book = null;  
            File file  = null;  
            FileInputStream fis = null;   
              
            try {  
                file = new File(filePath);  
                if(!file.exists()){  
                    throw new RuntimeException("文件不存在");  
                }else{  
                    fis = new FileInputStream(file);  
                    book = WorkbookFactory.create(fis); 
                }  
            } catch (Exception e) {  
                throw new RuntimeException(e.getMessage());  
            } finally {  
                if(fis != null){  
                    fis.close();  
                }  
            }  
            return book;  
        } 
    //    
    }

    excel 文件就在工程的目录下,直接填写了文件名。开始时,写的是绝对路径,可能是windows下 “”的问题,出现文件不存在的情况。原因不明。

    程序非常简单,很多的代码就是拷贝参考文章的。这里感谢“北京大鹏”这位博主,博文写得很详细。

    jxl 参考文章:http://heisetoufa.iteye.com/blog/1932073

    poi参考文章:http://blog.csdn.net/qq522935502/article/details/8374118

  • 相关阅读:
    vim字体设置
    windows下eclipse打不开
    ubuntu的无线网无法连上
    将ubuntu系统录到u盘上
    使用UltraISO刻录系统到U盘可能会出现打不开的情况
    windows安装程序制作
    安装ubuntu双系统
    数据库插入数据时间比较
    LeetCode 189. Rotate Array
    LeetCode 228. Summary Ranges
  • 原文地址:https://www.cnblogs.com/chenfool/p/3632642.html
Copyright © 2020-2023  润新知