`

POI 简单读取excel和写入excel

 
阅读更多

1 POI读取excel

ApachePOI组件是Java操作Microsoft Office办公套件的强大API,其中对WordExcelPowperPoint都有支持,当然使用较多的还是Excel,因为WordPowerPoint用程序动态操作的应用较少。那么本文就结合POI来介绍一下操作Excel的方法。 
    Office 2007
的文件结构完全不同于2003,所以对于两个版本的Office组件,POI有不同的处理API,分开使用即可。首先来说几个Excel的基本概念。对于一个Excel文件,这称为一个工作簿(Workbook),打开Excel之后,在下方会有sheet1/2/3这样的选项卡,点击可以切换到不同的sheet中,这个sheet称作工作表。每个工作表就是我们编辑的区域,这是一张二维表,阿拉伯数字控制行数,从1开始,而程序中还是0,类似数组和集合。字母控制列数,从A开始,Z以后是两个字母控制。对于每一行,我们称为Row,列就是Column,行列可以确定唯一的一个元素,那么就是单元格,称为Cell 

下面从读取Excel开始,首先建立一个Excel 2003以下版本的xls文件。设定几列来看。来存储学生信息的Excel表如下: 

姓名 性别 年龄
张三 20
李四 23
王五 22

 

这里的姓名,性别和班级是文本值,而年龄和成绩是数字值,这在设计对象和处理时要注意区分。那么可以如下设计这个对象:

创建student

package poi_test;

/**

 * 学生类

 * @author Administrator

 *

 */

publicclass student {

    private String name;//姓名

    private String sex;//性别

    privateintage;//年龄

   

    public student(){

      

    }

    public student(String name, String sex, int age){

       this.name=name;

       this.sex=sex;

       this.age=age;

    }

    public String getName() {

       returnname;

    }

    publicvoid setName(String name) {

       this.name = name;

    }

    public String getSex() {

       returnsex;

    }

    publicvoid setSex(String sex) {

       this.sex = sex;

    }

    publicint getAge() {

       returnage;

    }

    publicvoid setAge(int age) {

       this.age = age;

    }

   

    public String getInfo(){

       return"student info:"+name+" "+sex+"  "+age;

    }

   

   

 

}

 

以下读取excel

package poi_test;

 

import java.io.File;

import java.io.FileInputStream;

import java.io.IOException;

import java.io.InputStream;

import java.util.ArrayList;

import java.util.List;

 

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;

 

/**

 * 读取excel

 * @author Administrator

 *

 */

 

publicclass readExcel {

    privatestatic String xls2003="C:\\student.xls";

    privatestatic String xls2007="C:\\student.xlsx";

   

   

    privatestatic List<student> readfromexcel2003(String filePath){

       File excelFile = null;//excel文件对象

       InputStream is = null;//输入流

       String cellStr = null;//单元格的值

       List<student> studentlist = new ArrayList<student>();

       student student = null;

       try{

           excelFile = new File(filePath);

           is = new FileInputStream(excelFile);

           HSSFWorkbook workbook2003 = new HSSFWorkbook(is);//创建excel文件对象

           HSSFSheet sheet = workbook2003.getSheetAt(0);//取出第一个工作表

           int rows = sheet.getLastRowNum();//一共有多少行

           for (int i = 1; i <= rows; i++) {

              //不处理表头所以从1开始

              student = new student();

              HSSFRow row = sheet.getRow(i);// 获取行信息

              if(row==null){

                  continue;

              }

              int cellnums = row.getLastCellNum();//没一行有多少列即多少单元格

              for (int j = 0; j < cellnums; j++) {

                  HSSFCell cell = row.getCell(j);

                  if(cell==null){

                     cellStr = "";

                  }elseif (cell.getCellType() == HSSFCell.CELL_TYPE_BOOLEAN) {// 对布尔值的处理 

                        cellStr = String.valueOf(cell.getBooleanCellValue()); 

                    } elseif (cell.getCellType() == HSSFCell.CELL_TYPE_NUMERIC) {// 对数字值的处理 

                        cellStr = cell.getNumericCellValue() + ""; 

                    } else {

                     cellStr = cell.getStringCellValue();

                  }

                  if(j==0){

                     student.setName(cellStr);

                  }elseif(j==1){

                     student.setSex(cellStr);

                  }else{

                     student.setAge(new Double(cellStr).intValue());

                  }

              }

              studentlist.add(student);

             

           }

       }catch (IOException e) {

           // TODO: handle exception

           e.printStackTrace();

       }finally{

           if(is!=null){

              try{

                  is.close();

              }catch(IOException e){

                  e.printStackTrace();

              }

           }

          

       }

       return studentlist;

    }

   

    publicstaticvoid main(String[] args) {

      

       long start = System.currentTimeMillis(); 

        List<student> list = readfromexcel2003(xls2003); 

        for (student stu : list) { 

            System.out.println(stu.getInfo()); 

        } 

        long end = System.currentTimeMillis(); 

        System.out.println((end - start) + " ms done!"); 

    } 

 

}

 

 

 

 

 

 

2 POI写入excel数据

 

下面来做简单的文件写入,也就是准备输入写入Excel文件,为了演示,直接创建对象,而实际应用中数据可以是来自数据库的。写入文件就是文件解析的逆过程。但POI的组件不是从单元格开始创建文件的,还是从工作簿开始创建,进而创建工作表,行和单元格,最终将整个工作簿写入文件,完成操作。

package poi_test;

 

import java.io.File;

import java.io.FileOutputStream;

import java.util.ArrayList;

import java.util.Arrays;

import java.util.List;

 

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;

 

publicclass writeExcel {

   

   

    privatestatic String xls2003="d:\\student.xls";

    privatestatic String xls2007="d:\\student.xlsx";

   

    privatestatic List<student> studentList = null; 

    privatestatic student[] students = new student[4]; 

   

    /**

     * 静态块初始化数据

     */ 

    static { 

        studentList = new ArrayList<student>(); 

        students[0] = new student("张三", "", 23); 

        students[1] = new student("李四", "", 20); 

        students[2] = new student("王五", "", 21); 

        students[3] = new student("赵六", "", 22); 

        studentList.addAll(Arrays.asList(students)); 

    }

    /**

     * 写入excel数据

     * @param filePath

     */

    publicstaticvoid writeExcel2003(String filePath) {

    // 先创建工作簿对象 

        HSSFWorkbook workbook2003 = new HSSFWorkbook(); 

        // 创建工作表对象并命名 

        HSSFSheet sheet = workbook2003.createSheet("学生信息统计表");

        sheet.setDefaultColumnWidth(30);//设置单元格宽度

        sheet.setDefaultRowHeightInPoints(40);//设置单元格默认高度

        HSSFRow row1 = sheet.createRow(0);

        row1.setHeight((short)300);

        HSSFCell nameCellone = row1.createCell(0); 

        nameCellone.setCellValue("姓名"); 

        HSSFCell sexCellone = row1.createCell(1); 

        sexCellone.setCellValue("性别"); 

        HSSFCell ageCellone = row1.createCell(2); 

        ageCellone.setCellValue("年龄");

        for (int i = 1; i <=studentList.size(); i++) {

        // 取出Student对象 

            student student = studentList.get(i-1); 

            // 创建行 

            HSSFRow row = sheet.createRow(i); 

            // 开始创建单元格并赋值 

            HSSFCell nameCell = row.createCell(0); 

            nameCell.setCellValue(student.getName()); 

            HSSFCell sexCell = row.createCell(1); 

            sexCell.setCellValue(student.getSex()); 

            HSSFCell ageCell = row.createCell(2); 

            ageCell.setCellValue(student.getAge()); 

        }

     // 生成文件 

        File file = new File(filePath); 

        FileOutputStream fos = null; 

        try { 

            fos = new FileOutputStream(file); 

            workbook2003.write(fos); 

        } catch (Exception e) { 

            e.printStackTrace(); 

        } finally { 

            if (fos != null) { 

                try { 

                    fos.close(); 

                } catch (Exception e) { 

                    e.printStackTrace(); 

                } 

            } 

        } 

    }

 

    /**

     * @param args

     */

    publicstaticvoid main(String[] args) {

       // TODO Auto-generated method stub

      

       long start = System.currentTimeMillis(); 

       writeExcel2003(xls2003); 

        long end = System.currentTimeMillis(); 

        System.out.println((end - start) + " ms done!"); 

 

    }

 

}

 

 

  • 大小: 2.1 KB
分享到:
评论

相关推荐

    利用POI读取excel写入到word

    要实现"利用POI读取excel写入到word",我们需要以下步骤: 1. **准备环境**:首先,确保你的项目已经引入了Apache POI的依赖。在给定的压缩包中,"poi - 副本"可能是包含POI库的JAR文件,你需要将其添加到你的项目...

    使用POI解析excel文件并写入数据库

    这个项目实现的功能是读取excel文件中的数据,解析并写入数据库。 读取的excel文件位于项目目录下的 excel\0805.xlsx 使用IntelliJ IDEA开发此项目 使用MYSQL查看数据库 在MYSQL中运行项目db目录下的sql文件,创建...

    POI读取Excel带格式数据

    以下是一个简单的示例代码片段,展示了如何使用Apache POI读取Excel文件中的数据并保留格式: ```java import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import java....

    使用poi读取、写入复杂excel工具类(包含样式)

    使用poi读取写入复杂excel内容包括样式,工具类

    poi-读取Excel表格内容

    在本文中,我们将深入探讨如何使用Apache POI读取Excel表格内容。 首先,我们需要理解Apache POI的基本架构。POI分为两个主要部分:HSSF(Horizontally-Scalable Storage Format)用于处理旧版的BIFF格式Excel文件...

    Jxl和poi读取写入excel

    本文将深入探讨如何使用Jxl和Apache POI库来读取和写入Excel文件,同时会区分2007年之后的.xlsx格式(基于OpenXML)和2003及之前的.xls格式(基于BIFF)。 首先,让我们了解一下Jxl库。Jxl是Java Excel API的简称,...

    POI读取EXCEL教程

    在Java编程环境中,如果你需要读取或写入Excel文件,POI 提供了强大的支持。本教程将深入讲解如何使用POI的HSSF组件来处理Excel 97-2003格式的文件(BIFF8格式)。 一、Excel基础 Excel 97 文件格式,也被称作BIFF8...

    java+poi+excel读取写入等操作所有jar(最新支持excel2013)Java实用源码整理learns

    以下是一个简单的读取Excel文件的示例: ```java import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import java.io.File; import java.io.FileInputStream; import ...

    poi读取excel文件

    标题提到的"poi读取excel文件",指的是使用Apache POI库来处理Excel数据。在最新的版本中,POI引入了更高效和强大的功能,使得处理Excel文件变得更加方便。 描述中提到了"最新版poi相关的6个jar包",这些jar包是...

    Java用POI API实现对Excel表的读取与写入,包含对数据库的读写,亲测有效

    1、POI_EXCEL包下分别有两个类,一个是读取excel内容,一个是想excel写入内容 2、cn.itcast包下的所有包,是为了实现从excel写入到数据库中,和从数据库写入到excel中 注意事项: 1、需要导入maven工程 2、使用...

    poi读取excel并输出到jsp页面

    标题中的“poi读取excel并输出到jsp页面”是指使用Apache POI库来处理Microsoft Excel文件,并将数据在JavaServer Pages (JSP) 页面上显示的技术。Apache POI 是一个开源项目,它允许开发者创建、修改和显示MS ...

    POI生成Excel POI操作Excel POI读取Excel POI类库

    **POI读取Excel** 读取Excel主要涉及以下步骤: 1. **打开Workbook**:通过 FileInputStream 读取Excel文件,然后创建Workbook对象。 2. **获取Sheet**:从Workbook中获取需要的Sheet。 3. **遍历Row和Cell**:...

    利用POI解析excel并存入数据库demo

    Apache POI 是一个开源项目,专门用于处理 Microsoft Office 格式的文件,如 Word、Excel 和 PowerPoint。在这个"利用POI解析excel并存入数据库demo"中,我们将关注如何使用 POI 库来读取 Excel 文件,并将数据有效...

    android POI 读取excel 精简jar

    在Android平台上,使用Apache POI库来读取Excel文件是一种常见的解决方案。Apache POI是一个流行的开源项目,它允许程序员创建、修改和显示Microsoft Office格式的文件,包括Excel(.xls和.xlsx)。在这个“android ...

    通过POI统一读取Excel文件(兼容97-2003和2007+两种格式)

    这篇博客“通过POI统一读取Excel文件(兼容97-2003和2007+两种格式)”正是介绍了如何使用Apache POI库来处理不同版本的Excel文件。 Apache POI 提供了两个主要的API来处理Excel文件:HSSF(Horrible Spreadsheet ...

    poi 3.9读取excel xls xlsx 有jar包

    在标题中提到的“poi 3.9读取excel xls xlsx 有jar包”,指的是使用Apache POI 3.9版本来读取Excel的工作簿(XLS和XLSX格式)。这个版本的POI包含了处理Excel文件所需的核心组件。 Apache POI 提供了HSSF(Horrible...

    poi读取Excel用到的jar包

    标题提到的“poi读取Excel用到的jar包”指的是在Java项目中使用POI库进行Excel操作所需引入的依赖文件。这些jar包在描述中给出,包括了以下几个: 1. poi-ooxml-schemas-3.8-beta5-20111217.jar:这个文件包含了...

    poi 读取EXCEL所需要的JAR

    在Java环境中,如果你需要使用POI库来读取、写入或操作Excel文件,你需要确保你的项目中包含了正确的JAR文件。在这个场景中,你提到的几个JAR文件都是Apache POI的不同版本和组件: 1. **poi-3.8.jar**:这是Apache...

    poi excel 模板读取并导出带公式的excel文档

    利用Apache POI库能够实现这一功能,即可以通过Java程序操作Excel文件,包括读取、写入、以及处理Excel中的公式。 #### 二、关键技术点 1. **POI库简介**: - Apache POI是Apache软件基金会的Jakarta项目中的一个...

    poi3.9读写EXCEL

    二、读取Excel文件 1. 创建Workbook对象:通过`WorkbookFactory.create()`方法,我们可以根据文件路径或输入流创建对应的Workbook对象,无论是XLS还是XLSX。 2. 访问Sheet和Row:Workbook对象包含了多个Sheet,每...

Global site tag (gtag.js) - Google Analytics