使用POI来实现对Excel的读写操作
事实上我感觉直接贴代码就好了。代码里面差点儿做到每一行一个凝视。应该看起来会比較简单
代码托管在github上:https://github.com/chsj1/ExcelUtils
package com.hjd.poiutils;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.TreeMap; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFFont;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.util.HSSFColor;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.Font;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook; public class ExcelUtils { public static final String HEADERINFO = "headInfo";
public static final String DATAINFON = "dataInfo"; /**
*
* @Title: getWeebWork
* @Description: TODO(依据传入的文件名称获取工作簿对象(Workbook))
* @param filename
* @return
* @throws IOException
*/
public static Workbook getWeebWork(String filename) throws IOException {
Workbook workbook = null;
if (null != filename) {
String fileType = filename.substring(filename.lastIndexOf("."),
filename.length());
FileInputStream fileStream = new FileInputStream(new File(filename));
if (".xls".equals(fileType.trim().toLowerCase())) {
workbook = new HSSFWorkbook(fileStream);// 创建 Excel 2003 工作簿对象
} else if (".xlsx".equals(fileType.trim().toLowerCase())) {
workbook = new XSSFWorkbook(fileStream);// 创建 Excel 2007 工作簿对象
}
}
return workbook;
} /**
*
* @Title: writeExcel
* @Description: TODO(导出Excel表)
* @param pathname
* :导出Excel表的文件路径
* @param map
* :封装须要导出的数据(HEADERINFO封装表头信息。DATAINFON:封装要导出的数据信息,此处须要使用TreeMap
* ) 比如: map.put(ExcelUtil.HEADERINFO,List<String> headList);
* map.put(ExcelUtil.DATAINFON,List<TreeMap<String,Object>>
* dataList);
* @param wb
* @throws IOException
*/
public static void writeExcel(String pathname, Map<String, Object> map,
Workbook wb) throws IOException {
if (null != map && null != pathname) {
List<Object> headList = (List<Object>) map
.get(ExcelUtils.HEADERINFO);
List<TreeMap<String, Object>> dataList = (List<TreeMap<String, Object>>) map
.get(ExcelUtils.DATAINFON);
CellStyle style = getCellStyle(wb);
Sheet sheet = wb.createSheet();// 在文档对象中创建一个表单..默认是表单名字是Sheet0、Sheet1....
// Sheet sheet = wb.createSheet("hell poi");//在创建爱你表单的时候指定表单的名字 /**
* 设置Excel表的第一行即表头
*/
Row row = sheet.createRow(0);
for (int i = 0; i < headList.size(); i++) {
Cell headCell = row.createCell(i);
headCell.setCellType(Cell.CELL_TYPE_STRING);// 设置这个单元格的数据的类型,是文本类型还是数字类型
headCell.setCellStyle(style);// 设置表头样式
headCell.setCellValue(String.valueOf(headList.get(i)));// 给这个单元格设置值
} for (int i = 0; i < dataList.size(); i++) {
Row rowdata = sheet.createRow(i + 1);// 创建数据行
TreeMap<String, Object> mapdata = dataList.get(i);
Iterator it = mapdata.keySet().iterator();
int j = 0;
while (it.hasNext()) {
String strdata = String.valueOf(mapdata.get(it.next()));
Cell celldata = rowdata.createCell(j);// 在一行中创建某列..
celldata.setCellType(Cell.CELL_TYPE_STRING);
celldata.setCellValue(strdata);
j++;
}
} // 文件流
File file = new File(pathname);
OutputStream os = new FileOutputStream(file);
os.flush();
wb.write(os);
os.close();
}
} /**
*
* @Title: getCellStyle
* @Description: TODO(设置表头样式)
* @param wb
* @return
*/
public static CellStyle getCellStyle(Workbook wb) {
CellStyle style = wb.createCellStyle();
Font font = wb.createFont();
font.setFontName("宋体");
font.setFontHeightInPoints((short) 12);// 设置字体大小
font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);// 加粗
style.setFillForegroundColor(HSSFColor.LIME.index);// 设置背景色
style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
style.setAlignment(HSSFCellStyle.SOLID_FOREGROUND);// 让单元格居中
// style.setWrapText(true);//设置自己主动换行
style.setFont(font);
return style;
} /**
*
* @Title: readerExcelDemo
* @Description: TODO(读取Excel表中的数据)
* @throws IOException
*/
public static void readFromExcelDemo() throws IOException {
/**
* 读取Excel表中的全部数据
*/
Workbook workbook = getWeebWork("E:/test.xlsx");
System.out.println("总表页数为:" + workbook.getNumberOfSheets());// 获取表页数
Sheet sheet = workbook.getSheetAt(0);
// Sheet sheet = workbook.getSheetAt(1);
int rownum = sheet.getLastRowNum();// 获取总行数
for (int i = 0; i <= rownum; i++) {
Row row = sheet.getRow(i);
Cell orderno = row.getCell(2);// 获取指定单元格中的数据
// System.out.println(orderno.getCellType());//这个打印的是cell的type
short cellnum = row.getLastCellNum(); // 获取单元格的总列数
for (int j = row.getFirstCellNum(); j < row.getLastCellNum(); j++) {
Cell celldata = row.getCell(j);
System.out.print(celldata + "\t");
}
System.out.println();
} /**
* 读取指定位置的单元格
*/
// Row row1 = sheet.getRow(1);
// Cell cell1 = row1.getCell(2);
// System.out.print("(1,2)位置单元格的值为:"+cell1);
// BigDecimal big = new
// BigDecimal(cell1.getNumericCellValue());//将科学计数法表示的数据转化为String类型
// System.out.print("\t"+String.valueOf(big)); } public static void readFromExcelDemo1() throws IOException {
/**
* 读取Excel表中的全部数据
*
* Workbook: excel的文档对象 sheet: excel的表单 row: excel中的行 cell: excel中的单元格子
*
*/
Workbook workbook = getWeebWork("E:/test.xlsx");
System.out.println("总表页数为:" + workbook.getNumberOfSheets());// 获取表页数
// Sheet sheet =workbook.getSheetAt(0);
Sheet sheet = workbook.getSheetAt(2);// 获取第二个表单
int rownum = sheet.getLastRowNum();// 获取总行数
for (int i = 0; i <= rownum; i++) {
Row row = sheet.getRow(i);// 获取表达的第i行
// Cell orderno =
// row.getCell(2);//获取指定单元格中的数据(获取一行中的第2列(这里的2指的是0,1,2.排在第三位))
// System.out.println(orderno.getCellType());//这个打印的是cell的type
// short cellnum=row.getLastCellNum();
// //获取单元格的总列数(获取一行中有多少个单元格(也就是多少列)) /**
* row.getFirstCellNum(): 获取行的第一个单元格的位置 row.getLastCellNum():
* 获取行的最后一个单元格的位置
*/
for (int j = row.getFirstCellNum(); j < row.getLastCellNum(); j++) {// 遍历一行中的全部列
Cell celldata = row.getCell(j);// 获取一行中的第j列返回Cell类型的数据
System.out.print(celldata + "\t");//
} // 打印指定列
// Cell celldata = row.getCell(4);//获取这一行中的第4列(在第5个位置上)
// System.out.print( "\"" + celldata+"\","); System.out.println();
} /**
* 读取指定位置的单元格
*/
// Row row1 = sheet.getRow(1);
// Cell cell1 = row1.getCell(2);
// System.out.print("(1,2)位置单元格的值为:"+cell1);
// BigDecimal big = new
// BigDecimal(cell1.getNumericCellValue());//将科学计数法表示的数据转化为String类型
// System.out.print("\t"+String.valueOf(big)); } public static void readFromExcelDemo(String fileAbsolutePath) throws IOException {
/**
* 读取Excel表中的全部数据
*/
Workbook workbook = getWeebWork(fileAbsolutePath);
System.out.println("总表页数为:" + workbook.getNumberOfSheets());// 获取表页数
Sheet sheet = workbook.getSheetAt(0);
// Sheet sheet = workbook.getSheetAt(1);
int rownum = sheet.getLastRowNum();// 获取总行数
for (int i = 0; i <= rownum; i++) {
Row row = sheet.getRow(i);
Cell orderno = row.getCell(2);// 获取指定单元格中的数据
// System.out.println(orderno.getCellType());//这个打印的是cell的type
short cellnum = row.getLastCellNum(); // 获取单元格的总列数
for (int j = row.getFirstCellNum(); j < row.getLastCellNum(); j++) {
Cell celldata = row.getCell(j);
System.out.print(celldata + "\t");
}
System.out.println();
} /**
* 读取指定位置的单元格
*/
// Row row1 = sheet.getRow(1);
// Cell cell1 = row1.getCell(2);
// System.out.print("(1,2)位置单元格的值为:"+cell1);
// BigDecimal big = new
// BigDecimal(cell1.getNumericCellValue());//将科学计数法表示的数据转化为String类型
// System.out.print("\t"+String.valueOf(big)); } public static void main(String[] args) throws IOException {
// readFromExcelDemo1(); // String filePath = "E:/test.xlsx";
// readFromExcelDemo(filePath);//从一个指定的excel文件里读取内容 // writeToExcelDemo();
} public static void writeToExcelDemo() throws IOException {
/**
* HSSF: .xls XSSF: .xlsx 所以大家会在官网中看到Excel = HSSF+XSSF
*
* HSSF是POIproject对Excel 97(-2007)文件操作的纯Java实现 XSSF是POIproject对Excel 2007 OOXML
* (.xlsx)文件操作的纯Java实现
*
* 从POI 3.8版本号開始,提供了一种基于XSSF的低内存占用的API----SXSSF
*
*/ Workbook wb = new XSSFWorkbook();// 创建一个新的excel的文档对象
Map<String, Object> map = new HashMap<String, Object>();
List headList = new ArrayList();// 表头数据
headList.add("下单时间");
headList.add("结账时间");
headList.add("订单编号");
headList.add("订单金额");
headList.add("username");// excel的都 /**
* TreeMap基于红黑树实现
*/
List dataList = new ArrayList();// 表格内的数据
for (int i = 0; i < 15; i++) {
TreeMap<String, Object> treeMap = new TreeMap<String, Object>();// 此处的数据必须为有序数据,所以使用TreeMap进行封装
treeMap.put("m1", "2013-10-" + i + 1);
treeMap.put("m2", "2013-11-" + i + 1);
treeMap.put("m3", "20124" + i + 1);
treeMap.put("m4", 23.5 + i + 1);
treeMap.put("m5", "张三_" + i);
dataList.add(treeMap);
} /*
* 先不要加上下面这一段,否则下面错误: Cannot get a numeric value from a text
* cell(不能从一个text cell中获取数字类型的数据)
*
* 解决的方法: http://blog.csdn.net/ysughw/article/details/9288307
*/
// TreeMap<String,Object> treeMap1 = new TreeMap<String, Object>();
// treeMap1.put("asd", null);
// treeMap1.put("猪头", "zhutou");
// dataList.add(treeMap1);
map.put(ExcelUtils.HEADERINFO, headList);
map.put(ExcelUtils.DATAINFON, dataList);
writeExcel("E:/test1.xlsx", map, wb);//往wb里面写map中内容,生成E:/test1.xlsx这个文件....
}
}
使用POI来实现对Excel的读写操作的更多相关文章
- 使用jxl操作之一: 实现对Excel简单读写操作
项目目录树 对象类UserObject UserObject.java package com.dlab.jxl; public class UserObject { private String u ...
- 通过vb.net 和NPOI实现对excel的读操作
通过vb.net 和NPOI实现对excel的读操作,很久很久前用过vb,这次朋友的代码是vb.net写的需要一个excel的操作, 就顾着着实现功能了,大家凑合着看吧 Option Explicit ...
- 【POI】java对excel的读写操作
在工作中需要将mongo中的数据导出到excel中,所以根据需要学习了poi.以下为学习内容的总结: 1.POI是什么? poi是Apache团队开发的专门面对用java处理Excel文档的工具. 官 ...
- 利用C#实现对excel的写操作
一.COM interop 首先我们要了解下何为COM Interop,它是一种服务,可以使.NET Framework对象能够与COM对象通信.Visual Studio .NET 通过引入面向公共 ...
- Apache POI 实现对 Excel 文件读写
1. Apache POI 简介 Apache POI是Apache软件基金会的开放源码函式库. 提供API给Java应用程序对Microsoft Office格式档案读和写的功能. 老外起名字总是很 ...
- POI技术实现对excel的导出
需求:客户端传来两个参数,当前页码和每页的条数,根据传来的参数实现对数据的导出 1.导入依赖 <!-- 报表相关 --> <dependency> <groupId> ...
- JAVA-----基于POI实现对Excel导入
在日常项目开发中, 数据录入和导出是十分普遍的需求,因此,导入导出也成为了开发中一个经典的功能.数据导出的格式一般是excel或者pdf,而批量导入的信息一般是借助excel来减轻工作量,提高效率. ...
- 使用Python对Excel进行读写操作
学习Python的过程中,我们会遇到Excel的读写问题.这时,我们可以使用xlwt模块将数据写入Excel表格中,使用xlrd模块从Excel中读取数据.下面我们介绍如何实现使用Python对Exc ...
- Python—对Excel进行读写操作
学习Python的过程中,我们会遇到Excel的读写问题.通过搜索得知,我们可以使用xlwt module将数据写入Excel表格,使用xlrd module从Excel读取数据.下面介绍如何实现使用 ...
随机推荐
- IT第二天 - JAVA环境的配置、Hello的编写
IT第二天 上午 HTML的一些讲解 下午 JDK的安配置 JAVA语法的注意事项 Hello的编写 晚上 作业 对println的应用 笔记 1.Classpath环境变量的配置:因为DOS对于文件 ...
- 【转】解决Gradle DSL method not found: ‘android()’
[转]解决Gradle DSL method not found: ‘android()’ 最近导入as的项目出了这样的问题 这个问题困扰了我很长时间,好吧,搜了半天全都是runProguard的,最 ...
- KindEditor - 富文本编辑器 - 使用+上传图片
代码高亮:http://www.cnblogs.com/KTblog/p/5205214.html 效果: 项目结构: Extend:存放各种扩展 BlogAction.class.php:博文模块 ...
- Apple Watch程序开发30分钟秒懂
苹果公司Apple Watch智能手表正在备受追捧,迅速掌握Apple Watch的APP架构,环境搭建,及实例开发将会让开发者占尽先机.我赢职场全国首发,30分钟玩转Apple Watch应用开发实 ...
- [置顶] PHP调用move_uploaded_file()提示 failed to open stream: Permission denied(Linxux环境,以Ubuntu12.04为例)
在使用PHP上传文件之后,我们有时候还需要移动到特定的文件夹,这时候就要调用move_uploaded_file()函数,可是会出现如下错误: Warning: move_uploaded_file( ...
- ASP.net 学习路线(详细)
.net学习路线 入门篇1. 学习面向对象(OOP)的编程思想 许多高级语言都是面向对象的编程,.NET也不例外.如果您第一次接触面向对象的编程,就必须理解类.对象.字段.属性.方法和 ...
- QTableView 添加进度条 添加按钮 TreeWidget 增删改
http://www.cnblogs.com/li-peng/p/3961386.html http://www.cnblogs.com/li-peng/p/3961843.html http://w ...
- jQuery特效手风琴特效 手写手风琴网页特效
今天写一个简单的手风琴效果,不用插件,利用强大的jQuery,写一个手风琴效果. 页面预览,请点击这里预览: 手风琴预览 案例分析: html结构 就是一个大盒子里面放着5个li,每个li的小小是2 ...
- Python 2.7 学习笔记 内置语句、函数、标准库
使用任何开发语言进行软件开发,都离不开语言提供的内置库(或Api),甚至说内置库的强大及使用是否方便都会影响大家对开发语言的选择. python语言,一样提供了很多内置的功能,可供开发时使用.主要有如 ...
- ios中的任务分段
工作比较忙,蛮久没有写东西了,今天我要写的是ios中的任务分段.大多数的情况下,我们用不到任务分段,但是如果我们是在执行比较频繁的函数或者这个函数是比较耗时, 某一条件下,我要执行新的任务,并且取消上 ...