excel2003和excel2007文件的创建和读取
excel2003和excel2007文件的创建和读取在项目中用的很多,首先我们要了解excel的常用组件和基本操作步骤。
常用组件如下所示:
![](/assets/blank.gif)
![](/assets/blank.gif)
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的例子如下:
![](/assets/blank.gif)
![](/assets/blank.gif)
复制代码 //创建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
![](/assets/blank.gif)
![](/assets/blank.gif)
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
![](/assets/blank.gif)
![](/assets/blank.gif)
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
![](/assets/blank.gif)
![](/assets/blank.gif)
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
![](/assets/blank.gif)
![](/assets/blank.gif)
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表中所有的数据
![](/assets/blank.gif)
![](/assets/blank.gif)
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
![](/assets/blank.gif)
![](/assets/blank.gif)
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文件的创建和读取相关推荐
- VB高效导入Excel2003和Excel2007文件到MSHFlexGrid控件显示
1.VB高效导入Excel2003和Excel2007文件到MSHFlexGrid控件显示 2.以前也有Excel导入通用功能,但速度有些慢一会把两种实现方式都提供出为参考对比. 一.原通用导入exc ...
- 文件的创建与读取 文件的数据添加
文件的创建与读取 文件的数据添加 一:概要 1:首先要站在程序的角度上. 2:文件的创建 即将程序中的数据 写入到文件当中. 3:文件的读取 即将一个文件中的信息读取到程序当中. 二:步骤 1:创 ...
- java创建读取文件_Java实现文件的创建、读取、写入操作-Fun言
在日常的开发中,对文件的操作经常会有,所以今天教大家其中一种使用Java实现文件的创建.读取.写入操作 创建文件String filenameTemp = "D:\demo.txt" ...
- 利用python生成微信h5_Python的h5文件的创建与读取
代码流程图:本章代码流程 这章是关于--make_dataset.py的 -------------------------------①------------------------------ ...
- python中csv文件的创建、读取、修改等操作总结
1. python中创建新的csv文件 (1). 使用csv.writer()创建: 代码如下: import csvheaders = ['学号','姓名','分数'] rows = [('2020 ...
- C++ minizip的简单使用,zip文件的创建、读取、修改、密码压缩、4G以上大文件压缩。
兄弟姐妹们好,深夜党又来记录枯燥的编程生活了.今天给大家带来的是minizip库,一个解压和压缩文件的开源代码库,如题目所示的结构来介绍.你可以在下面的链接搜索到minizip库: http://ww ...
- 【小白学PyTorch】17.TFrec文件的创建与读取
[机器学习炼丹术]的学习笔记分享 <<小白学PyTorch>> 小白学PyTorch | 16 TF2读取图片的方法 小白学PyTorch | 15 TF2实现一个简单的服装分 ...
- data后缀文件解码_小白学PyTorch | 17 TFrec文件的创建与读取
[机器学习炼丹术]的学习笔记分享<> 小白学PyTorch | 16 TF2读取图片的方法 小白学PyTorch | 15 TF2实现一个简单的服装分类任务 小白学PyTorch | 14 ...
- jsp中excel文件的创建与读取
1.创建excel文件//这里的jxl不是java的标准jar包,需要在项目中另外加载 import jxl.Workbook; import jxl.write.Label; import jxl. ...
最新文章
- C#线程、前后台线程
- 树,森林与二叉树之间的转换
- boost::lambda模块实现boost::function 进行测试
- java sqlite3查询慢_java连接数据库进行查询优化跑不通谁能帮我调下通
- 轻松实现深度Clone | Source Generators方式
- boost跨平台 c++_跨平台C++整数类型 之一 固定宽度整数(boost和C++11)
- Java-static关键字
- MongoDB 教程三: 高级查询
- 老程序员也搞不定的 4 个巨坑!
- 安装cocos2D 2.1v 遇到的问题
- python 进度条模块....
- mac电脑安装mysql
- 【Python爬虫】花瓣网爬取美女图片
- 应用数据难互通 如何打破小微企业“信息壁垒”?
- 24考研数学复习方法、全年规划
- kerberos的 kdc_设置Kerberos版本5 KDC以使用AES加密
- 金戈铁马 Android NDK 实战篇:男人之间的那些事
- marvel 1548 phy芯片调式
- 2021年计算机考研408操作系统真题(客观题)
- 一、入门Python第一课
热门文章
- rocketmq 顺序消费_RocketMQ核心概念扫盲
- 课文电子计算机与多媒体减写,课文电子计算机与多媒体关系介绍
- typescript的基本结构_上帝视角看 TypeScript
- 路科验证示例_角度形式验证示例
- android 约束 布局_Android约束布局动画
- 在Ubuntu上安装Docker –分步指南
- 开课吧Web:学习Web前端技术有哪些好处?
- SylixOS下移植glib时clock_gettime函数分析
- logstash向elasticsearch写入数据,如何指定多个数据template
- ehcache 一二事 - ssm 中ehcashe的简单配置应用