Java操作Excel表的基础使用

Java操作Excel表的基础使用

excel最常用2010版本

wps 为国产版本 标识S

版本 格式
1997-2003 xls
2007-2016 xlsx

单位:
sheet - 页
row - 行
cell - 单元格

excel 解析的几种方案

  1. POI — apache — HSSF
  2. JXL — 纯java
  3. FastExcel — 纯java (本文章中没有FastExcel的演示)

tip:如果想生成pdf格式的文件可以使用itext技术

细节对比
poi jxl
内存消耗
操作难易度 相对困难 相对简单
中文支持 需要设置 支持
复杂功能[1] 完全支持 部分支持
跨平台 no yes

[1]修饰单元格属性,字体,数字,日期操作

结论:

JXL 内存消耗少 效率高 速度快 适合大量excel存储读取
POI 功能全面 支持复杂操作 适合企业级报表生成

jxl方式

 <!-- jxl-->
 <dependency><!--必备-->
            <groupId>net.sourceforge.jexcelapi</groupId>
            <artifactId>jxl</artifactId>
            <version>2.6.12</version>
 </dependency>
    public static void main(String[] args){
        createExcel_JXL();
//      reedExcel_JXL();
    }

    private static void createExcel_JXL() {
        // 定义label数组
        String[] title = {"id","name","sex"};
        // 创建Excel文件
        File file = new File("d:/test_excel/exceljxl123.xls");
        try{
            file.createNewFile();
            // 创建工作簿
            WritableWorkbook workbook = Workbook.createWorkbook(file);
            // 创建sheet
            WritableSheet sheet = workbook.createSheet("sheet1",0);
            Label label = null;
            // 第一行设置列名
            for( int i = 0, length=title.length;i<length;i++){
                label = new Label(i,0,title[i]);
                sheet.addCell(label);
            }
            // 追加数据
            for (int i = 1;i<10;i++){
                label = new Label(0,i,"id"+i);
                sheet.addCell(label);
                label = new Label(1,i,"姓名"+i);
                sheet.addCell(label);
                label = new Label(2,i,"男"+i);
                sheet.addCell(label);
            }
            // 写入数据
            workbook.write();
            // 关闭流
            workbook.close();
        }catch(Exception e){
            e.printStackTrace();
        }
        System.out.println("写入完成");
    }

    private static void reedExcel_JXL() {
        String[] title = {"id","name","sex"};
        File file = new File("d:/test_excel/exceljxl123.xls");
        try{
            // 创建workbook
            Workbook workbook = Workbook.getWorkbook(file);
            // 获取第一个工作表sheet
            Sheet sheet = workbook.getSheet(0);
            // 获取数据
            for(int x=0,row=sheet.getRows();x<row;x++){
                for (int y =0,col=sheet.getColumns();y<col;y++ ){
                    Cell cell = sheet.getCell(y,x);
                    System.out.print(cell.getContents()+"   ");
                }
                System.out.println();
            }
            System.out.println("读取完成");
        }catch(Exception e){
            e.printStackTrace();
        }
    }

poi方式

    <!-- poi -->
    <dependency> <!--必备-->
        <groupId>org.apache.poi</groupId>
        <artifactId>poi</artifactId>
        <version>3.17</version>
    </dependency>
    <!--commons-io -->
    <dependency> <!-- 操作File好用 可选-->
        <groupId>commons-io</groupId>
        <artifactId>commons-io</artifactId>
        <version>2.4</version>
    </dependency>

    public static void main(String[] args){
        createExcel_POI();
//      reedExcel_POI();
    }


    private static void createExcel_POI() {
        // 创建表头数组
        String[] title = {"id","name","sex"};
        // 创建Excel文件
        File file = new File("d:/test_excel/excelpoi123.xls");
        // 创建Excel工作簿
        HSSFWorkbook workbook = new HSSFWorkbook();
        // 创建一个工作表sheet
        HSSFSheet sheet = workbook.createSheet();
        HSSFRow row =  null;
        HSSFCell cell = null;
        // 创建表头
        row =  sheet.createRow(0);
        for (int i = 0;i < title.length;i++) {
            cell = row.createCell(i);
            cell.setCellValue(title[i]);
        }
        // 追加数据
        for (int i = 1;i<10;i++){
            row =  sheet.createRow(i);
            cell = row.createCell(0);
            cell.setCellValue("id"+i);
            cell = row.createCell(1);
            cell.setCellValue("姓名"+i);
            cell = row.createCell(2);
            cell.setCellValue("女"+i);
        }
        // 保存文件
        try {
            file.createNewFile();
            FileOutputStream stream = FileUtils.openOutputStream(file);
            workbook.write(stream);
            stream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    private static void reedExcel_POI() {
        // 需要读取的文件
        File file = new File("d:/test_temp/excelpoi123456.xls");
        try{
            HSSFWorkbook workbook = new HSSFWorkbook(FileUtils.openInputStream(file));
            // 获取工作表(多种方式)
//          HSSFSheet sheet = workbook.getSheet("已知的sheet页名称");
            HSSFSheet sheet = workbook.getSheetAt(0);// 0为第一页

            // 读取数据
            HSSFRow row = null;
            HSSFCell cell = null;
            for(int x=0,rowNum=sheet.getLastRowNum();x<rowNum;x++){
                row = sheet.getRow(x);//获取该行
                for (int y =0,colNum=row.getLastCellNum();y<colNum;y++ ){
                    cell = row.getCell(y);
                    System.out.print(cell.getStringCellValue()+"   ");
                }
                System.out.println();
            }
            System.out.println("读取完成");
        }catch(IOException e){
        e.printStackTrace();
        }
    }

猜你喜欢

转载自blog.csdn.net/weixin_41146599/article/details/81701903