您的位置:首页 > 编程语言 > Java开发

Java生成和操作Excel文件

2017-07-19 21:05 260 查看
http://blog.csdn.net/softwave/article/details/38071825

Excel是我们平时工作中比较常用的用于存储二维表数据的,JAVA也可以直接对Excel进行操作,在这篇博客中将为大家介绍两种操作Excel的方式,分别为:jxl和poi。

对于两者的区别网上有测试如下:

测试结果 

类型   数据量(行)   执行时间(ms)   执行时间(ms)   执行时间(ms)   平均时间(ms) 

POI   1000       579       562       532       558 

JXL   1000       500       469       484       484 

POI   5000       984       984       969       979 

JXL   5000       922       860       890       891 

POI   10000      1609      1594      1641       1615 

JXL   10000        1437      1453      1406       1432 

POI   30000      3782      3765      3828       3792 

JXL   30000      3922      3906      3922       3917 

POI   50000      5953      6484      5859       6099 

JXL   50000      6765      7421      6984       7057 

JAVA EXCEL API  不支持excell2007以上 不介绍了


(二)poi

<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.8</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.9</version>
</dependency>

HSSF和XSSF两种方式  excel2007 只能使用XSSF读写

package com.tools.poi.lesson1;  

  

import java.io.File;  

import java.io.FileInputStream;  

import java.io.FileNotFoundException;  

import java.io.FileOutputStream;  

import java.io.IOException;  

import java.io.InputStream;  

import java.io.OutputStream;  

import java.text.ParseException;  

import java.text.SimpleDateFormat;  

import java.util.ArrayList;  

import java.util.List;  

  

import org.apache.poi.hssf.usermodel.HSSFCell;  

import org.apache.poi.hssf.usermodel.HSSFCellStyle;  

import org.apache.poi.hssf.usermodel.HSSFRow;  

import org.apache.poi.hssf.usermodel.HSSFSheet;  

import org.apache.poi.hssf.usermodel.HSSFWorkbook;  

import org.apache.poi.hssf.util.HSSFColor;  

import org.apache.poi.openxml4j.exceptions.InvalidFormatException;  

import org.apache.poi.poifs.filesystem.POIFSFileSystem;  

import org.apache.poi.ss.usermodel.Cell;  

import org.apache.poi.ss.usermodel.CellStyle;  

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.ss.util.WorkbookUtil;  

  

import com.tools.poi.bean.Student;  

  

public class ExcelUtilWithXSSF {  

    public static void main(String[] args) {  

        try {  

            getExcelAsFile("d:/FTP/系统报表.xls");  

        } catch (FileNotFoundException e) {  

            e.printStackTrace();  

        } catch (IOException e) {  

            e.printStackTrace();  

        } catch (InvalidFormatException e) {  

            e.printStackTrace();  

        }  

          

          

//      try {  

//          CreateExcelDemo1();  

//      } catch (ParseException e) {  

//          e.printStackTrace();  

//      }  

          

          

    }  

      

    /** 

     * 得到Excel,并解析内容  对2007及以上版本 使用XSSF解析 

     * @param file 

     * @throws FileNotFoundException 

     * @throws IOException 

     * @throws InvalidFormatException  

     */  

    public static void getExcelAsFile(String file) throws FileNotFoundException, IOException, InvalidFormatException{  

//      //1.得到Excel常用对象  

//      POIFSFileSystem fs = new POIFSFileSystem(new FileInputStream("d:/FTP/new1.xls"));  

//      //2.得到Excel工作簿对象  

//      HSSFWorkbook wb = new HSSFWorkbook(fs);  

  

          

          

        InputStream ins = null;     

        Workbook wb = null;     

            ins=new FileInputStream(new File(file));     

            //ins= ExcelService.class.getClassLoader().getResourceAsStream(filePath);     

            wb = WorkbookFactory.create(ins);     

            ins.close();     

          

          

        //3.得到Excel工作表对象  

        Sheet sheet = wb.getSheetAt(0);  

        //总行数  

        int trLength = sheet.getLastRowNum();  

        //4.得到Excel工作表的行  

        Row row = sheet.getRow(0);  

        //总列数  

        int tdLength = row.getLastCellNum();  

        //5.得到Excel工作表指定行的单元格  

        Cell cell = row.getCell((short)1);  

        //6.得到单元格样式  

        CellStyle cellStyle = cell.getCellStyle();  

  

        for(int i=5;i<trLength;i++){  

            //得到Excel工作表的行  

            Row row1 = sheet.getRow(i);  

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

            //得到Excel工作表指定行的单元格  

            Cell cell1 = row1.getCell(j);  

            /** 

             * 为了处理:Excel异常Cannot get a text value from a numeric cell 

             * 将所有列中的内容都设置成String类型格式 

             */  

            if(cell1!=null){  

                  cell1.setCellType(Cell.CELL_TYPE_STRING);  

             }  

              

            if(j==5&&i<=10){  

                cell1.setCellValue("1000");  

            }  

              

            //获得每一列中的值  

            System.out.print(cell1+"                   ");  

            }  

            System.out.println();  

        }  

          

        //将修改后的数据保存  

        OutputStream out = new FileOutputStream(file);  

                wb.write(out);  

    }  

      

      

    /** 

     * 创建Excel,并写入内容 

     */  

    public static void CreateExcel(){  

          

        //1.创建Excel工作薄对象  

        HSSFWorkbook wb = new HSSFWorkbook();  

        //2.创建Excel工作表对象       

        HSSFSheet sheet = wb.createSheet("new Sheet");  

        //3.创建Excel工作表的行     

        HSSFRow row = sheet.createRow(6);  

        //4.创建单元格样式  

        CellStyle cellStyle =wb.createCellStyle();  

          // 设置这些样式  

        cellStyle.setFillForegroundColor(HSSFColor.SKY_BLUE.index);  

        cellStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);  

        cellStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN);  

        cellStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);  

        cellStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);  

        cellStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);  

        cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);  

            

            

            

        //5.创建Excel工作表指定行的单元格  

        row.createCell(0).setCellStyle(cellStyle);  

        //6.设置Excel工作表的值  

        row.createCell(0).setCellValue("aaaa");  

          

        row.createCell(1).setCellStyle(cellStyle);  

        row.createCell(1).setCellValue("bbbb");  

          

          

        //设置sheet名称和单元格内容  

        wb.setSheetName(0,"第一张工作表");  

        //设置单元格内容   cell.setCellValue("单元格内容");  

          

        // 最后一步,将文件存到指定位置  

                try  

                {  

                    FileOutputStream fout = new FileOutputStream("E:/students.xls");  

                    wb.write(fout);  

                    fout.close();  

                }  

                catch (Exception e)  

                {  

                    e.printStackTrace();  

                }  

    }  

      

    /** 

     * 创建Excel的实例 

     * @throws ParseException  

     */  

    public static void CreateExcelDemo1() throws ParseException{  

        List list = new ArrayList();  

        SimpleDateFormat df = new SimpleDateFormat("yyyy-mm-dd");  

        Student user1 = new Student(1, "张三", 16,true, df.parse("1997-03-12"));  

        Student user2 = new Student(2, "李四", 17,true, df.parse("1996-08-12"));  

        Student user3 = new Student(3, "王五", 26,false, df.parse("1985-11-12"));  

        list.add(user1);  

        list.add(user2);  

        list.add(user3);  

          

          

        // 第一步,创建一个webbook,对应一个Excel文件  

                HSSFWorkbook wb = new HSSFWorkbook();  

                // 第二步,在webbook中添加一个sheet,对应Excel文件中的sheet  

                HSSFSheet sheet = wb.createSheet("学生表一");  

                // 第三步,在sheet中添加表头第0行,注意老版本poi对Excel的行数列数有限制short  

                HSSFRow row = sheet.createRow((int) 0);  

                // 第四步,创建单元格,并设置值表头 设置表头居中  

                HSSFCellStyle style = wb.createCellStyle();  

                style.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 创建一个居中格式  

  

                HSSFCell cell = row.createCell((short) 0);  

                cell.setCellValue("学号");  

                cell.setCellStyle(style);  

                cell = row.createCell((short) 1);  

                cell.setCellValue("姓名");  

                cell.setCellStyle(style);  

                cell = row.createCell((short) 2);  

                cell.setCellValue("年龄");  

                cell.setCellStyle(style);  

                cell = row.createCell((short) 3);  

                cell.setCellValue("性别");  

                cell.setCellStyle(style);  

                cell = row.createCell((short) 4);  

                cell.setCellValue("生日");  

                cell.setCellStyle(style);  

  

                // 第五步,写入实体数据 实际应用中这些数据从数据库得到,  

  

                for (int i = 0; i < list.size(); i++)  

                {  

                    row = sheet.createRow((int) i + 1);  

                    Student stu = (Student) list.get(i);  

                    // 第四步,创建单元格,并设置值  

                    row.createCell((short) 0).setCellValue((double) stu.getId());  

                    row.createCell((short) 1).setCellValue(stu.getName());  

                    row.createCell((short) 2).setCellValue((double) stu.getAge());  

                    row.createCell((short)3).setCellValue(stu.getSex()==true?"男":"女");  

                    cell = row.createCell((short) 4);  

                    cell.setCellValue(new SimpleDateFormat("yyyy-mm-dd").format(stu  

                            .getBirthday()));  

                }  

                // 第六步,将文件存到指定位置  

                try  

                {  

                    FileOutputStream fout = new FileOutputStream("E:/students.xls");  

                    wb.write(fout);  

                    fout.close();  

                }  

                catch (Exception e)  

                {  

                    e.printStackTrace();  

                }  

          

          

          

    }  

}  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: