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 blockSystem.err.println("装载 JDBC/ODBC 驱动程序失败。" );  e.printStackTrace();} catch (SQLException e) {// TODO Auto-generated catch blockSystem.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的Typeswitch (cell.getCellType()) {// 如果当前Cell的Type为NUMERICcase XSSFCell.CELL_TYPE_NUMERIC: case XSSFCell.CELL_TYPE_FORMULA: {// 判断当前的cell是否为Dateif (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为STRINcase 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的Typeswitch (cell.getCellType()) {case HSSFCell.CELL_TYPE_NUMERIC: // 数字   // 判断当前的cell是否为Dateif (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;}@Overridepublic 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

转载于:https://www.cnblogs.com/ouyy/p/6830969.html

excel2003和excel2007文件的创建和读取相关推荐

  1. VB高效导入Excel2003和Excel2007文件到MSHFlexGrid控件显示

    1.VB高效导入Excel2003和Excel2007文件到MSHFlexGrid控件显示 2.以前也有Excel导入通用功能,但速度有些慢一会把两种实现方式都提供出为参考对比. 一.原通用导入exc ...

  2. 文件的创建与读取 文件的数据添加

    文件的创建与读取   文件的数据添加 一:概要 1:首先要站在程序的角度上. 2:文件的创建 即将程序中的数据 写入到文件当中. 3:文件的读取 即将一个文件中的信息读取到程序当中. 二:步骤 1:创 ...

  3. java创建读取文件_Java实现文件的创建、读取、写入操作-Fun言

    在日常的开发中,对文件的操作经常会有,所以今天教大家其中一种使用Java实现文件的创建.读取.写入操作 创建文件String filenameTemp = "D:\demo.txt" ...

  4. 利用python生成微信h5_Python的h5文件的创建与读取

    代码流程图:本章代码流程 这章是关于--make_dataset.py的 -------------------------------①------------------------------ ...

  5. python中csv文件的创建、读取、修改等操作总结

    1. python中创建新的csv文件 (1). 使用csv.writer()创建: 代码如下: import csvheaders = ['学号','姓名','分数'] rows = [('2020 ...

  6. C++ minizip的简单使用,zip文件的创建、读取、修改、密码压缩、4G以上大文件压缩。

    兄弟姐妹们好,深夜党又来记录枯燥的编程生活了.今天给大家带来的是minizip库,一个解压和压缩文件的开源代码库,如题目所示的结构来介绍.你可以在下面的链接搜索到minizip库: http://ww ...

  7. 【小白学PyTorch】17.TFrec文件的创建与读取

    [机器学习炼丹术]的学习笔记分享 <<小白学PyTorch>> 小白学PyTorch | 16 TF2读取图片的方法 小白学PyTorch | 15 TF2实现一个简单的服装分 ...

  8. data后缀文件解码_小白学PyTorch | 17 TFrec文件的创建与读取

    [机器学习炼丹术]的学习笔记分享<> 小白学PyTorch | 16 TF2读取图片的方法 小白学PyTorch | 15 TF2实现一个简单的服装分类任务 小白学PyTorch | 14 ...

  9. jsp中excel文件的创建与读取

    1.创建excel文件//这里的jxl不是java的标准jar包,需要在项目中另外加载 import jxl.Workbook; import jxl.write.Label; import jxl. ...

最新文章

  1. C#线程、前后台线程
  2. 树,森林与二叉树之间的转换
  3. boost::lambda模块实现boost::function 进行测试
  4. java sqlite3查询慢_java连接数据库进行查询优化跑不通谁能帮我调下通
  5. 轻松实现深度Clone | Source Generators方式
  6. boost跨平台 c++_跨平台C++整数类型 之一 固定宽度整数(boost和C++11)
  7. Java-static关键字
  8. MongoDB 教程三: 高级查询
  9. 老程序员也搞不定的 4 个巨坑!
  10. 安装cocos2D 2.1v 遇到的问题
  11. python 进度条模块....
  12. mac电脑安装mysql
  13. 【Python爬虫】花瓣网爬取美女图片
  14. 应用数据难互通 如何打破小微企业“信息壁垒”?
  15. 24考研数学复习方法、全年规划
  16. kerberos的 kdc_设置Kerberos版本5 KDC以使用AES加密
  17. 金戈铁马 Android NDK 实战篇:男人之间的那些事
  18. marvel 1548 phy芯片调式
  19. 2021年计算机考研408操作系统真题(客观题)
  20. 一、入门Python第一课

热门文章

  1. rocketmq 顺序消费_RocketMQ核心概念扫盲
  2. 课文电子计算机与多媒体减写,课文电子计算机与多媒体关系介绍
  3. typescript的基本结构_上帝视角看 TypeScript
  4. 路科验证示例_角度形式验证示例
  5. android 约束 布局_Android约束布局动画
  6. 在Ubuntu上安装Docker –分步指南
  7. 开课吧Web:学习Web前端技术有哪些好处?
  8. SylixOS下移植glib时clock_gettime函数分析
  9. logstash向elasticsearch写入数据,如何指定多个数据template
  10. ehcache 一二事 - ssm 中ehcashe的简单配置应用