1. 绪论

  1. Apache POI是Apache软件基金会的开放源码函数库,POI提供API给Java程序对Microsoft Office格式档案读写功能。
    1. HSSF 读写Microsoft Excel格式档案的功能。
    2. XSSF 读写Microsoft Excel OOXML格式档案的管理。
    3. HWPF 读写Microsoft PowerPoint格式档案的功能。
    4. HSLF 读写Microsoft PowerPoint格式档案的功能。
    5. HDGF 读写Microsoft Visio格式档案的功能。
  2. JXL
    1. 开放源码文件。POI效率更高,操作相对复杂,JXL操作更简单。
  3. FASTEXCEL:纯Java开发的excel文件读写组件,支持Excel 97-2003文件格式;占用内存小。

2. JXL篇之程序范例

2.1 JXL 创建低版本Excel文件

  1. 程序代码

    package excelJxl;
    
    import jxl.Workbook;
    import jxl.write.Label;
    import jxl.write.WritableSheet;
    import jxl.write.WritableWorkbook;
    
    import java.io.File;
    
    public class JxlExcelCre {
        /**
         * JXL 创建Excel文件
         * @author yangtingting
         * @date 2019/07/29
         */
        public static void main(String[] args) throws Exception{
            //创建Excel文件
            File file=new File("D:/jxl_test.xls");
            //创建文件
            file.createNewFile();
            //创建工作薄
            WritableWorkbook workbook = Workbook.createWorkbook(file);
            //创建sheet
            WritableSheet sheet=workbook.createSheet("sheet1",0);
            //添加数据
            String[] title={"id","name","sex"};
            Label label=null;
            for (int i=0;i<title.length;i++){
                label=new Label(i,0,title[i]);
                sheet.addCell(label);
            }
            //追加数据
            for (int i=1;i<10;i++){
                label=new Label(0,i,"a"+1);
                sheet.addCell(label);
                label=new Label(1,i,"user"+1);
                sheet.addCell(label);
                label=new Label(2,i,"男"+1);
                sheet.addCell(label);
            }
            workbook.write();
            workbook.close();
    
        }
    }
    
  2. 程序解读:

2.2 JXL 读取低版本Excel文件

  1. 程序代码

    package excelJxl;
    
    import jxl.Cell;
    import jxl.Sheet;
    import jxl.Workbook;
    
    import java.io.File;
    
    public class JxlExcelRead {
        /**
         * JXL 读取Excel文件
         * @author yangtingting
         * @date 2019/07/29
         */
        public static void main(String[] args) throws Exception {
            //创建workbook
            Workbook workbook=Workbook.getWorkbook(new File("D:/jxl_test.xls"));
            //获取第一个工作表sheet
            Sheet sheet=workbook.getSheet(0);
            //获取数据
            for (int i=0;i<sheet.getRows();i++){
                for (int j=0;j<sheet.getColumns();j++){
                    Cell cell=sheet.getCell(j,i);
                    System.out.print(cell.getContents()+" ");
                }
                System.out.println();
            }
    
            workbook.close();
        }
    
    }
    

POI篇之程序范例

3.1 POI 创建低版本Excel文件

  1. 程序代码:

    package excelPOI;
    
    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.commons.io.FileUtils;
    
    import java.io.File;
    import java.io.FileOutputStream;
    
    public class POIExcelCre {
        /**
         * POI 创建Excel文件
         * @author yangtingting
         * @date 2019/07/29
         */
        public static void main(String[] args) throws Exception {
            //创建Excel文件薄
            HSSFWorkbook workbook=new HSSFWorkbook();
            //创建工作表sheeet
            HSSFSheet sheet=workbook.createSheet();
            //创建第一行
            HSSFRow row=sheet.createRow(0);
            String[] title={"id","name","sex"};
            HSSFCell cell=null;
            for (int i=0;i<title.length;i++){
                cell=row.createCell(i);
                cell.setCellValue(title[i]);
            }
            //追加数据
            for (int i=1;i<10;i++){
                HSSFRow nextrow=sheet.createRow(i);
                HSSFCell cell2=nextrow.createCell(0);
                cell2.setCellValue("a"+i);
                cell2=nextrow.createCell(1);
                cell2.setCellValue("user"+i);
                cell2=nextrow.createCell(2);
                cell2.setCellValue("男");
            }
            //创建一个文件
            File file=new File("D:/poi_test.xls");
            file.createNewFile();
            FileOutputStream stream=FileUtils.openOutputStream(file);
            workbook.write(stream);
            stream.close();
    
        }
    
    }
    

3.2 POI 读取低版本Excel文件

  1. 程序代码

    package excelPOI;
    
    import org.apache.commons.io.FileUtils;
    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 java.io.File;
    
    public class POIExcelRead {
        /**
         * POI 读取Excel文件
         * @author yangtingting
         * @date 2019/07/29
         */
        public static void main(String[] args) throws Exception {
            //创建Excel,读取文件内容
            File file=new File("D:/poi_test.xls");
            HSSFWorkbook workbook=new HSSFWorkbook(FileUtils.openInputStream(file));
            //两种方式读取工作表
          //  HSSFSheet sheet=workbook.getSheet("Sheet0");
            HSSFSheet sheet=workbook.getSheetAt(0);
            //获取sheet中最后一行行号
            int lastRowNum=sheet.getLastRowNum();
            for (int i=0;i<=lastRowNum;i++){
                HSSFRow row=sheet.getRow(i);
                //获取当前行最后单元格列号
                int lastCellNum=row.getLastCellNum();
                for (int j=0;j<lastCellNum;j++){
                    HSSFCell cell=row.getCell(j);
                    String value=cell.getStringCellValue();
                    System.out.print(value+" ");
                }
                System.out.println();
    
            }
    
        }
    }
    

3.3 POI -XSSF创建高版本Excel文件

实际上,高版本的Excel文件只需更改响应jar包和个别方法名即可,直接附上代码吧。

package excelPOI;

import org.apache.commons.io.FileUtils;
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.xssf.usermodel.XSSFWorkbook;

import java.io.File;
import java.io.FileOutputStream;

public class POIEcxelCreHigh {
    /**
     * POI 创建高版本Excel文件
     * @author yangtingting
     * @date 2019/07/29
     */
    public static void main(String[] args) throws Exception {
        //创建Excel文件薄
        XSSFWorkbook workbook=new XSSFWorkbook();
        //创建工作表sheeet
        Sheet sheet=workbook.createSheet();
        //创建第一行
        Row row=sheet.createRow(0);
        String[] title={"id","name","sex"};
        Cell cell=null;
        for (int i=0;i<title.length;i++){
            cell=row.createCell(i);
            cell.setCellValue(title[i]);
        }
        //追加数据
        for (int i=1;i<10;i++){
            Row nextrow=sheet.createRow(i);
            Cell cell2=nextrow.createCell(0);
            cell2.setCellValue("a"+i);
            cell2=nextrow.createCell(1);
            cell2.setCellValue("user"+i);
            cell2=nextrow.createCell(2);
            cell2.setCellValue("男");
        }
        //创建一个文件
        File file=new File("D:/poi_test.xlsx");
        file.createNewFile();
        FileOutputStream stream= FileUtils.openOutputStream(file);
        workbook.write(stream);
        stream.close();

    }

}

3.4 POI -XSSF读取高版本Excel文件

代码:

package excelPOI;

import org.apache.commons.io.FileUtils;
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.xssf.usermodel.XSSFWorkbook;
import java.io.File;

public class POIExcelReadHigh {
    /**
     * POI 读取高版本Excel文件
     * @author yangtingting
     * @date 2019/07/29
     */
    public static void main(String[] args) throws Exception {
        //创建Excel,读取文件内容
        File file=new File("D:/poi_test.xlsx");
        XSSFWorkbook workbook=new XSSFWorkbook(FileUtils.openInputStream(file));
        //两种方式读取工作表
        // Sheet sheet=workbook.getSheet("Sheet0");
         Sheet sheet=workbook.getSheetAt(0);
        //获取sheet中最后一行行号
        int lastRowNum=sheet.getLastRowNum();
        for (int i=0;i<=lastRowNum;i++){
            Row row=sheet.getRow(i);
            //获取当前行最后单元格列号
            int lastCellNum=row.getLastCellNum();
            for (int j=0;j<lastCellNum;j++){
                Cell cell=row.getCell(j);
                String value=cell.getStringCellValue();
                System.out.print(value+" ");
            }
            System.out.println();
        }
    }
}

注意 :在读取某些Excel时报错Exception in thread “main” java.lang.IllegalStateException: Cannot get a STRING value from a NUMERIC cell。

处理 :代码做出相应更改:

代码如下:

for (int j=0;j<lastCellNum;j++){
             //   Cell cell=row.getCell(j);
                DataFormatter formatter=new DataFormatter();
                String value=formatter.formatCellValue(row.getCell(j));
                System.out.print(value+" ");
            }

4. Maven

4.1 低版本Excel创建与读取

<dependencies>
        <!-- <https://mvnrepository.com/artifact/net.sourceforge.jexcelapi/jxl> -->
            <dependency>
                <groupId>net.sourceforge.jexcelapi</groupId>
                <artifactId>jxl</artifactId>
                <version>2.6.10</version>
            </dependency>
        <!-- <https://mvnrepository.com/artifact/org.apache.poi/poi> -->
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>4.1.0</version>
        </dependency>
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.6</version>
        </dependency>
    </dependencies>

4.2 高版本Excel创建与读取

需要 额外增加 依赖:

<!-- <https://mvnrepository.com/artifact/dom4j/dom4j> -->
        <dependency>
            <groupId>dom4j</groupId>
            <artifactId>dom4j</artifactId>
            <version>1.6.1</version>
        </dependency>

        <!-- <https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml> -->
       <dependency>
            <groupId>org.apache.poi</groupId>
           <artifactId>poi-ooxml</artifactId>
           <version>4.1.0</version>
     </dependency>

5. 定制Excel导入模板

5.1 概念

  1. 利用xml解析技术,确定模板样式
  2. 这一部分的学习放在以后,先mark一下。 视频链接