Java读写Excel的三种方式

前期做项目需要用到java操作Excel,跟随慕课网上课程学习,找到了Java操作Excel的三种方式,发现实际应用中基本还是以POI方式为主,现总结如下。

POI解析Excel示例及解决长数字变科学计数法或double的问题见http://blog.csdn.net/sunglee_1992/article/details/53033600

1.POI

HSSF是Horrible SpreadSheet Format的缩写,即“讨厌的电子表格格式”。通过HSSF,你可以用纯Java代码来读取,写入,修改Excel文件。

HSSF——读写Microsoft Excel格式档案的功能。
XSSF——读写Microsoft Excel OOXML格式档案的功能。
HWPF——读写Microsoft Word格式档案的功能。
HSLF——读写Microsoft PowerPoint格式档案的功能。
HDGF——读写Microsoft Visio格式档案的功能。

如果想生成pdf文件:
通过iText不仅可以生成PDF或rtf的文档,而且可以将XML、Html文件转化为PDF 文件。

下载iText.jar文件后,只需要在系统的CLASSPATH中加入iText.jar的路径,在程序中就可以使用iText的类库了。
POI实例(创建并写入数据)

public class PoiExpExcel {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        String[] title = { "id", "name", "sex" };
        //创建Excel工作簿
        HSSFWorkbook workbook = new HSSFWorkbook();
        //创建一个工作表sheet
        HSSFSheet sheet = workbook.createSheet();
        //创建第一行
        HSSFRow row = sheet.createRow(0);
        //插入第一行数据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 < 11; 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");
        try {
            file.createNewFile();
            //将Excel内容存盘
            FileOutputStream stream = FileUtils.openOutputStream(file);
            workbook.write(stream);
            stream.close();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

POI实例(读取Excel文件的内容)

public class PoiReadExcel {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        //需要解析的Excel文件
        File file = new File("d:/poi_test.xls");
        try {
            //创建Excel,读取文件内容
            HSSFWorkbook workbook = new HSSFWorkbook(FileUtils.openInputStream(file));
            //获取第一个工作表
            //方法一
            /*HSSFSheet sheet = workbook.getSheet("Sheet0");*/
            //方法二
            HSSFSheet sheet = workbook.getSheetAt(0);
            //读取表中的数据
            int firstRowNum = 0;
            //表中最后一行行号
            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();
            }
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

2.JXL

Java Excel是一开放源码项目,可以读取Excel文件的内容、创建新的Excel文件、更新已经存在的Excel文件。包括常见格式的设置:字体、颜色、背景、合并单元格等。

JXL实例(创建并写入数据):

public class JxlExcle {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        //用数组存表头
        String[] title = {"id","name","sex"}; 
        //创建Excel文件
        File file = new File("e:/jxl_test.xls");
        try {
            file.createNewFile();
            //创建工作簿
            WritableWorkbook workbook = Workbook.createWorkbook(file);
            //创建sheet
            WritableSheet sheet = workbook.createSheet("sheet1", 0);
            Label label = null;
            for (int i = 0; i < title.length; i++) {
                label = new Label(i,0,title[i]);    // 参1列,参2行,参3值
                sheet.addCell(label);
            }
            //追加数据
            for (int i = 1; i < 10; i++) {
                label = new Label(0,i,"a"+i);
                sheet.addCell(label);
                label = new Label(1,i,"user"+i);
                sheet.addCell(label);
                label = new Label(2,i,"男");
                sheet.addCell(label);
            }
            //写入数据
            workbook.write();
            //关闭流
            workbook.close();
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } 
    }
}

JXL实例(读取Excel文件的内容):

public class JxlReadExcel {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        try {
            //创建workbook
            Workbook workbook = Workbook.getWorkbook(new File("e:/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();
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

JXL与PIO对比

这里写图片描述

3.FastExcel

FastExcel是一个采用纯Java开发的excel文件读写组件,支持Excel97——2003文件格式。

FastExcel只能读取单元格的字符信息,而其他属性如颜色、字体等就不支持了,因此FastExcel只需要很小的内存。

4.POI的XSSF创建更高版本的Excel文件

即将HSSF替换为XSSF,可以生成解析和写入更高版本的Excel文件。

public class XSSFPoiExpExcel {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        String[] title = { "id", "name", "sex" };
        //创建Excel工作簿
        XSSFWorkbook workbook = new XSSFWorkbook();
        //创建一个工作表sheet
        XSSFSheet sheet = workbook.createSheet();
        //创建第一行
        Row row = sheet.createRow(0);
        //插入第一行数据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 < 11; 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");
        try {
            file.createNewFile();
            //将Excel内容存盘
            FileOutputStream stream = FileUtils.openOutputStream(file);
            workbook.write(stream);
            stream.close();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}
  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值