• excel2003和excel2007文件的创建和读取


      excel2003和excel2007文件的创建和读取在项目中用的很多,首先我们要了解excel的常用组件和基本操作步骤。

      常用组件如下所示: 

    HSSFWorkbook                      excel的文档对象
    
    HSSFSheet                         excel的表单
    
    HSSFRow                           excel的行
    
    HSSFCell                          excel的格子单元
    
    HSSFFont                          excel字体
    
    HSSFDataFormat                    日期格式
    
    HSSFHeader                        sheet头
    
    HSSFFooter                        sheet尾(只有打印的时候才能看到效果)
    
    样式:
    
    HSSFCellStyle                       cell样式
    
    辅助操作包括:
    
    HSSFDateUtil                        日期
    
    HSSFPrintSetup                      打印
    
    HSSFErrorConstants                  错误信息表
    常用组件

      基本操作步骤如下:

        首先,理解一下一个Excel的文件的组织形式,一个Excel文件对应于一个workbook(HSSFWorkbook),一个workbook可以有多个                     sheet(HSSFSheet)组成,一个sheet是由多个row(HSSFRow)组成,一个row是由多个cell(HSSFCell)组成。

        1、用HSSFWorkbook打开或者创建“Excel文件对象”

        2、用HSSFWorkbook对象返回或者创建Sheet对象

        3、用Sheet对象返回行对象,用行对象得到Cell对象

        4、对Cell对象读写。

      生成excel的例子如下:

    复制代码
    //创建HSSFWorkbook对象  
    HSSFWorkbook wb = new HSSFWorkbook();  
    //创建HSSFSheet对象  
    HSSFSheet sheet = wb.createSheet("sheet0");  
    //创建HSSFRow对象  
    HSSFRow row = sheet.createRow(0);  
    //创建HSSFCell对象  
    HSSFCell cell=row.createCell(0);  
    //设置单元格的值  
    cell.setCellValue("单元格中的中文");  
    //输出Excel文件  
    FileOutputStream output=new FileOutputStream("d:\workbook.xls");  
    wkb.write(output);  
    output.flush(); 
    生成excel的例子

    今天专门在此通过项目做一个总结,项目结构如图所示:

          

      思路如下:

        1、从数据库(mysql)读取数据,获取数据集合;

        2、判断文件的后缀是.xls 还是.xlsx ?如果后缀是.xls 则是excel2003,否则为excel2007;

        3、excel2003的读取和创建;

        4、excel2007的读取和创建;

      代码如下:

        1、数据库工具类:DBhepler

    package com.test.excel.poi.dbutil;
    
    
    
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    
    public class DBhepler {
        /*String driver = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
        String url = "jdbc:sqlserver://127.0.0.1;DatabaseName=Mobile";*/
        
        String driver = "com.mysql.jdbc.Driver";
        String url = "jdbc:mysql://127.0.0.1:3306/excel";
        
        
        Connection con = null;
        ResultSet res = null;
    
        public void DataBase() {
                try {
                    Class.forName(driver);
                    con = DriverManager.getConnection(url, "root", "ROOT");
                } catch (ClassNotFoundException e) {
                    // TODO Auto-generated catch block
                      System.err.println("装载 JDBC/ODBC 驱动程序失败。" );  
                    e.printStackTrace();
                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    System.err.println("无法连接数据库" ); 
                    e.printStackTrace();
                }
        }
    
        // 查询
        public ResultSet  Search(String sql, String str[]) {
            DataBase();
            try {
                PreparedStatement pst =con.prepareStatement(sql);
                if (str != null) {
                    for (int i = 0; i < str.length; i++) {
                        pst.setString(i + 1, str[i]);
                    }
                }
                res = pst.executeQuery();
    
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            return res;
        }
    
        // 增删修改
        public int AddU(String sql, String str[]) {
            int a = 0;
            DataBase();
            try {
                PreparedStatement pst = con.prepareStatement(sql);
                if (str != null) {
                    for (int i = 0; i < str.length; i++) {
                        pst.setString(i + 1, str[i]);
                    }
                }
                a = pst.executeUpdate();
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            return a;
        }
    
    }
    DBhepler

        2、测试类:TestExcel

    package com.test.test;
    
    import com.test.excel.poi.ExcelUtils;
    
    public class TestExcel {
        public static void main(String[] args) throws Exception {
           
            ExcelUtils eu = new ExcelUtils();
            eu.parseFile();
    
        }
    
    }
    TestExcel

        3、excel工具类:ExcelUtils

    package com.test.excel.poi;
    
    import java.util.ArrayList;
    import java.util.List;
    
    import com.test.excel.poi.entity.Student;
    import com.test.excel.poi.service.StuService;
    
    
    
    
    
    public class ExcelUtils {
        
        String newFilePath = "f:\test\students.xlsx";
        String fileCurName = "f:\test\ouyy.xlsx";
        public void parseFile() throws Exception{
         // 通过文件名截取到文件类型
            String fileType = fileCurName.substring(fileCurName.lastIndexOf(".")).toLowerCase();
            List<Student> list = new ArrayList<Student>();
            //1.从数据库读取数据,获取数据集合
            list = StuService.getAllByDb();
            
            // 解析2003及WPS格式的的excel文件
             if(fileType.equals(".xls") || fileType.equals(".et"))
            {
                 //1.将excel2003文件读取出来
                 JExcelTool.readExcel2003(fileCurName);
                 
                 //2.创建excel2003
                 JExcelTool.createExcel2003(list, newFilePath);
                 
            }
             
            // 解析excel2007文件
            else if(fileType.equals(".xlsx"))
            {
                //1.将excel2003文件读取出来
                JExcelTool.readExcel2007(fileCurName);
                
              //2.创建excel2003
                JExcelTool.createExcel2007(list, newFilePath);
            } 
        }
        
        public static void main(String[] args) throws Exception {
            ExcelUtils eu = new ExcelUtils();
            eu.parseFile(); 
        }
    }
    ExcelUtils

        4、excel的解析类:JExcelTool

    package com.test.excel.poi;
    
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.text.SimpleDateFormat;
    import java.util.ArrayList;
    import java.util.Calendar;
    import java.util.Date;
    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.ss.usermodel.DateUtil;
    import org.apache.poi.xssf.usermodel.XSSFCell;
    import org.apache.poi.xssf.usermodel.XSSFCellStyle;
    import org.apache.poi.xssf.usermodel.XSSFRow;
    import org.apache.poi.xssf.usermodel.XSSFSheet;
    import org.apache.poi.xssf.usermodel.XSSFWorkbook;
    
    import com.test.excel.poi.entity.Student;
    
    public class JExcelTool {
        
        
        /**
         * 
          *
          * @param filePath  D:/students.xls
          * @return    
          *
          * @Description:读取文件excel2003
         */
        public static List<Student> readExcel2003(String filePath) {
            List<Student> list = new ArrayList<Student>();
            HSSFWorkbook workbook = null;
            
            try {
              // 读取Excel文件
              InputStream inputStream = new FileInputStream(filePath);
              workbook = new HSSFWorkbook(inputStream);
              inputStream.close();
            } catch (Exception e) {
              e.printStackTrace();
            }
         
            // 循环工作表
            for (int numSheet = 0; numSheet < workbook.getNumberOfSheets(); numSheet++) {
              HSSFSheet hssfSheet = workbook.getSheetAt(numSheet);
              if (hssfSheet == null) {
                continue;
              }
              // 循环行
              for (int rowNum = 1; rowNum <= hssfSheet.getLastRowNum(); rowNum++) {
                HSSFRow hssfRow = hssfSheet.getRow(rowNum);
                if (hssfRow == null) {
                  continue;
                }
         
                // 将单元格中的内容存入集合
                Student student = new Student();
         
                HSSFCell cell = hssfRow.getCell(0);
                if (cell == null) {
                  continue;
                }
                student.setId((int) cell.getNumericCellValue());
                cell = hssfRow.getCell(1);
                if (cell == null) {
                  continue;
                }
                student.setName(cell.getStringCellValue());
         
                cell = hssfRow.getCell(2);
                if (cell == null) {
                  continue;
                }
                student.setSex(cell.getStringCellValue());
         
                cell = hssfRow.getCell(3);
                if (cell == null) {
                  continue;
                }
                student.setNum((int) cell.getNumericCellValue());
         
                list.add(student);
              }
            }
            return list;
        }
        
        /**
         * 
          *getCellFormatValue(row.getCell(0));
          * @param list
          * @param newFilePath  新的文件   f:/students.xls
          *
          * @Description: 创造文件excel2003
         */
        public static void createExcel2003(List<Student> list,String newFilePath){
         // 创建一个Excel文件
            HSSFWorkbook workbook = new HSSFWorkbook();
            // 创建一个工作表
            HSSFSheet sheet = workbook.createSheet("学生表一");
            // 添加表头行
            HSSFRow hssfRow = sheet.createRow(0);
            // 设置单元格格式居中
            HSSFCellStyle cellStyle = workbook.createCellStyle();
            cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
         
            // 添加表头内容
            HSSFCell headCell = hssfRow.createCell(0);
            headCell.setCellValue("id");
            headCell.setCellStyle(cellStyle);
            
            headCell = hssfRow.createCell(1);
            headCell.setCellValue("姓名");
            headCell.setCellStyle(cellStyle);
         
            headCell = hssfRow.createCell(2);
            headCell.setCellValue("性别");
            headCell.setCellStyle(cellStyle);
         
            headCell = hssfRow.createCell(3);
            headCell.setCellValue("编号");
            headCell.setCellStyle(cellStyle);
         
            // 添加数据内容
            for (int i = 0; i < list.size(); i++) {
              hssfRow = sheet.createRow((int) i + 1);
              Student student = list.get(i);
         
              // 创建单元格,并设置值
              HSSFCell cell = hssfRow.createCell(0);
              cell.setCellValue(student.getId());
              cell.setCellStyle(cellStyle);
              
              cell = hssfRow.createCell(1);
              cell.setCellValue(student.getName());
              cell.setCellStyle(cellStyle);
    
              cell = hssfRow.createCell(2);
              cell.setCellValue(student.getSex());
              cell.setCellStyle(cellStyle);
         
              cell = hssfRow.createCell(3);
              cell.setCellValue(student.getNum());
              cell.setCellStyle(cellStyle);
            }
         
            // 保存Excel文件
            try {
              OutputStream outputStream = new FileOutputStream(newFilePath);
              workbook.write(outputStream);
              outputStream.close();
            } catch (Exception e) {
              e.printStackTrace();
            }
        }
        
        /**
         * 
          *
          * @param filePath
          * @return    
          *
          * @Description: 读取excel2007
         */
        public static List<Student> readExcel2007(String filePath){
            List<Student> list = new ArrayList<Student>();
            XSSFWorkbook workbook = null;
            
            try {
              // 读取Excel文件
              InputStream inputStream = new FileInputStream(filePath);
              workbook = new XSSFWorkbook(inputStream);
              inputStream.close();
            } catch (Exception e) {
              e.printStackTrace();
            }
         
            // 循环工作表
            for (int numSheet = 0; numSheet < workbook.getNumberOfSheets(); numSheet++) {
              XSSFSheet hssfSheet = workbook.getSheetAt(numSheet);
              if (hssfSheet == null) {
                continue;
              }
              // 循环行
              for (int rowNum = 1; rowNum <= hssfSheet.getLastRowNum(); rowNum++) {
                XSSFRow hssfRow = hssfSheet.getRow(rowNum);
                if (hssfRow == null) {
                  continue;
                }
         
                // 将单元格中的内容存入集合
                Student student = new Student();
         
                XSSFCell cell = hssfRow.getCell(0);
                if (cell == null) {
                  continue;
                }
                student.setId((int) cell.getNumericCellValue());
                cell = hssfRow.getCell(1);
                if (cell == null) {
                  continue;
                }
                student.setName(cell.getStringCellValue());
         
                cell = hssfRow.getCell(2);
                if (cell == null) {
                  continue;
                }
                student.setSex(cell.getStringCellValue());
         
                cell = hssfRow.getCell(3);
                if (cell == null) {
                  continue;
                }
                student.setNum((int) cell.getNumericCellValue());
         
                list.add(student);
              }
            }
            return list;
        }
        
        public static void createExcel2007(List<Student> list,String newFilePath){
            // 创建一个Excel文件
            XSSFWorkbook workbook = new XSSFWorkbook();
            // 创建一个工作表
            XSSFSheet sheet = workbook.createSheet("学生表一");
            // 添加表头行
            XSSFRow xssfRow = sheet.createRow(0);
            // 设置单元格格式居中
            XSSFCellStyle cellStyle = workbook.createCellStyle();
            cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
         
            // 添加表头内容
            XSSFCell headCell = xssfRow.createCell(0);
            headCell.setCellValue("id");
            headCell.setCellStyle(cellStyle);
            
            headCell = xssfRow.createCell(1);
            headCell.setCellValue("姓名");
            headCell.setCellStyle(cellStyle);
         
            headCell = xssfRow.createCell(2);
            headCell.setCellValue("性别");
            headCell.setCellStyle(cellStyle);
         
            headCell = xssfRow.createCell(3);
            headCell.setCellValue("编号");
            headCell.setCellStyle(cellStyle);
         
            // 添加数据内容
            for (int i = 0; i < list.size(); i++) {
              xssfRow = sheet.createRow((int) i + 1);
              Student student = list.get(i);
         
              // 创建单元格,并设置值
              XSSFCell cell = xssfRow.createCell(0);
              cell.setCellValue(student.getId());
              cell.setCellStyle(cellStyle);
              
              cell = xssfRow.createCell(1);
              cell.setCellValue(student.getName());
              cell.setCellStyle(cellStyle);
    
              cell = xssfRow.createCell(2);
              cell.setCellValue(student.getSex());
              cell.setCellStyle(cellStyle);
         
              cell = xssfRow.createCell(3);
              cell.setCellValue(student.getNum());
              cell.setCellStyle(cellStyle);
            }
         
            // 保存Excel文件
            try {
              OutputStream outputStream = new FileOutputStream(newFilePath);
              workbook.write(outputStream);
              outputStream.close();
            } catch (Exception e) {
              e.printStackTrace();
            }
        }
        
        
        /***
         * 获得excel的单元格
        * @Description: TODO
        * @param @param cell
        * @param @return
        * @return String
         */
        private static String getCellFormatValue(XSSFCell cell)
        {
            String cellvalue = "";
            if (cell != null) 
             {
                // 判断当前Cell的Type
                switch (cell.getCellType()) 
                {
                   // 如果当前Cell的Type为NUMERIC
                   case XSSFCell.CELL_TYPE_NUMERIC: 
                   case XSSFCell.CELL_TYPE_FORMULA: 
                   {
                      // 判断当前的cell是否为Date
                      if (DateUtil.isCellDateFormatted(cell)) 
                      {
                         // 如果是Date类型则,取得该Cell的Date值
                         Date date = cell.getDateCellValue();
                         // 把Date转换成本地格式的字符串
                         Calendar c = Calendar.getInstance();
                         c.setTime(date);                        
                         if(c.get(Calendar.HOUR)==0 && c.get(Calendar.MINUTE)==0 && c.get(Calendar.SECOND) ==0){
                            cellvalue = new SimpleDateFormat("yyyy-MM-dd").format(date);
                          }else {
                             cellvalue = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(date);
                         }
                      }
                      // 如果是纯数字
                      else
                      {
                         // 取得当前Cell的数值
                          // 是否有小数部分(分开处理)
                          if(Math.floor(cell.getNumericCellValue())==cell.getNumericCellValue())
                          {
                              cellvalue=String.valueOf((long)cell.getNumericCellValue());
                          }else {
                              cellvalue = cell.getRawValue();
                          }
                       
                      }
                      break;
                   }
                   // 如果当前Cell的Type为STRIN
                   case XSSFCell.CELL_TYPE_STRING:
                      // 取得当前的Cell字符串
                      cellvalue = cell.getStringCellValue();
                      break;
                   // 默认的Cell值
                   default:
                      cellvalue = " ";
                }
             }
             else 
             {
                cellvalue = "";
             }
            return cellvalue;
        }
        
        
        /**
         * 判断单元格格式,返回字符串Excel2003
         * @param cell
         * @return
         */
        private static String getCellFormatValue(HSSFCell cell)
        {
            String cellvalue = "";
            if (cell != null) 
             {
                // 判断当前Cell的Type
                switch (cell.getCellType()) 
                {
                    case HSSFCell.CELL_TYPE_NUMERIC: // 数字   
                        // 判断当前的cell是否为Date
                          if (DateUtil.isCellDateFormatted(cell)) 
                          {
                             // 如果是Date类型则,取得该Cell的Date值
                             Date date = cell.getDateCellValue();
                             // 把Date转换成本地格式的字符串
                             Calendar c = Calendar.getInstance();
                             c.setTime(date);                        
                             if(c.get(Calendar.HOUR)==0 && c.get(Calendar.MINUTE)==0 && c.get(Calendar.SECOND) ==0){
                                cellvalue = new SimpleDateFormat("yyyy-MM-dd").format(date);
                             }else {
                                 cellvalue = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(date);
                             }
                          }
                          // 如果是纯数字
                          else
                          {
                             // 是否有小数部分(分开处理)
                              if(Math.floor(cell.getNumericCellValue())==cell.getNumericCellValue())
                              {
                                  cellvalue=String.valueOf((long)cell.getNumericCellValue());
                              }else {
                                  cellvalue = String.valueOf(cell.getNumericCellValue());
                              }
                              //System.out.println(cellvalue);
                          }
                        break;   
                    case HSSFCell.CELL_TYPE_STRING: // 字符串   
                        cellvalue = cell.getStringCellValue() ;                            
                        break;    
                    case HSSFCell.CELL_TYPE_FORMULA: // 公式   
                        cellvalue = cell.getCellFormula();   
                        break;   
                    case HSSFCell.CELL_TYPE_BLANK: // 空值   
                        cellvalue = " "; 
                        break;   
                    case HSSFCell.CELL_TYPE_ERROR: // 故障   
                        cellvalue = " ";
                        break;   
                    default:   
                        cellvalue = " ";
                        break;  
                }
             }
             else 
             {
                cellvalue = "";
             }
            return cellvalue;
        }
        
        
    }
    JExcelTool

        5、查询数据库中stu表中所有的数据

    package com.test.excel.poi.service;
    
    
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.util.ArrayList;
    import java.util.List;
    
    import com.test.excel.poi.dbutil.DBhepler;
    import com.test.excel.poi.entity.Student;
    
    
    public class StuService {
     
      /**
         * 查询stu表中所有的数据
         * @return 
         */
        public static List<Student> getAllByDb(){
            List<Student> list=new ArrayList<Student>();
            try {
                DBhepler db=new DBhepler();
                String sql="select * from stu";
                ResultSet rs= db.Search(sql, null);
                while (rs.next()) {
                    int id=rs.getInt("id");
                    String name=rs.getString("name");
                    String sex=rs.getString("sex");
                    int num=rs.getInt("num");
                    
                    //System.out.println(id+" "+name+" "+sex+ " "+num);
                    list.add(new Student(id, name, sex, num));
                }
                
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            return list;
        }
    }
    StuService

        6、Java实体类:Student

    package com.test.excel.poi.entity;
    
    
    
    
    /**
     * @author Javen
     * @Email zyw205@gmail.com
     * 
     */
    public class Student{
        private int id;
        private String name;
        private String sex;
        private int num;
        
        
        
        public Student() {
        }
        public Student(int id, String name, String sex, int num) {
            this.id = id;
            this.name = name;
            this.sex = sex;
            this.num = num;
        }
        
        @Override
        public String toString() {
            return "StuEntity [id=" + id + ", name=" + name + ", sex=" + sex
                    + ", num=" + num + "]";
        }
        public int getId() {
            return id;
        }
        public void setId(int id) {
            this.id = id;
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public String getSex() {
            return sex;
        }
        public void setSex(String sex) {
            this.sex = sex;
        }
        public int getNum() {
            return num;
        }
        public void setNum(int num) {
            this.num = num;
        }
        
        
        
        
    }
    Student
  • 相关阅读:
    终于开通了
    <input>表单元素readonly时光标仍然可见
    关于字体
    SSI架构中get***方法潜在调用
    为uploads文件夹瘦身
    在JSP里使用CKEditor和CKFinder
    centos5.5上搭建svn服务器
    多文件上传
    属性化ATL,DCOM,SIM,IID
    BSTR转换成char*
  • 原文地址:https://www.cnblogs.com/ouyy/p/6830969.html
Copyright © 2020-2023  润新知