java导入导出Excel文件
package poi.excel; import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List; import javax.servlet.http.HttpServletRequest; import org.apache.log4j.Logger;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFFont;
import org.apache.poi.hssf.usermodel.HSSFRichTextString;
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.ss.usermodel.Cell;
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.xssf.usermodel.XSSFWorkbook; /**
* @ClassName: ExcelUtil
* @Description: Excel导入导出工具类
* @author 周宣
* @date 2016-11-8 下午7:16:11
*
*/
public class ExcelUtil {
private static final Logger logger = Logger.getLogger(ExcelUtil.class); /**
* @Title: createWorkbook
* @Description: 判断excel文件后缀名,生成不同的workbook
* @param @param is
* @param @param excelFileName
* @param @return
* @param @throws IOException
* @return Workbook
* @throws
*/
public Workbook createWorkbook(InputStream is,String excelFileName) throws IOException{
if (excelFileName.endsWith(".xls")) {
return new HSSFWorkbook(is);
}else if (excelFileName.endsWith(".xlsx")) {
return new XSSFWorkbook(is);
}
return null;
} /**
* @Title: getSheet
* @Description: 根据sheet索引号获取对应的sheet
* @param @param workbook
* @param @param sheetIndex
* @param @return
* @return Sheet
* @throws
*/
public Sheet getSheet(Workbook workbook,int sheetIndex){
return workbook.getSheetAt(0);
} /**
* @Title: importDataFromExcel
* @Description: 将sheet中的数据保存到list中,
* 1、调用此方法时,vo的属性个数必须和excel文件每行数据的列数相同且一一对应,vo的所有属性都为String
* 2、在action调用此方法时,需声明
* private File excelFile;上传的文件
* private String excelFileName;原始文件的文件名
* 3、页面的file控件name需对应File的文件名
* @param @param vo javaBean
* @param @param is 输入流
* @param @param excelFileName
* @param @return
* @return List<Object>
* @throws
*/
public List<Object> importDataFromExcel(Object vo,InputStream is,String excelFileName){
List<Object> list = new ArrayList<Object>();
try {
//创建工作簿
Workbook workbook = this.createWorkbook(is, excelFileName);
//创建工作表sheet
Sheet sheet = this.getSheet(workbook, 0);
//获取sheet中数据的行数
int rows = sheet.getPhysicalNumberOfRows();
//获取表头单元格个数
int cells = sheet.getRow(0).getPhysicalNumberOfCells();
//利用反射,给JavaBean的属性进行赋值
Field[] fields = vo.getClass().getDeclaredFields();
for (int i = 1; i < rows; i++) {//第一行为标题栏,从第二行开始取数据
Row row = sheet.getRow(i);
int index = 0;
while (index < cells) {
Cell cell = row.getCell(index);
if (null == cell) {
cell = row.createCell(index);
}
cell.setCellType(Cell.CELL_TYPE_STRING);
String value = null == cell.getStringCellValue()?"":cell.getStringCellValue(); Field field = fields[index];
String fieldName = field.getName();
String methodName = "set"+fieldName.substring(0,1).toUpperCase()+fieldName.substring(1);
Method setMethod = vo.getClass().getMethod(methodName, new Class[]{String.class});
setMethod.invoke(vo, new Object[]{value});
index++;
}
if (isHasValues(vo)) {//判断对象属性是否有值
list.add(vo);
vo.getClass().getConstructor(new Class[]{}).newInstance(new Object[]{});//重新创建一个vo对象
} }
} catch (Exception e) {
logger.error(e);
}finally{
try {
is.close();//关闭流
} catch (Exception e2) {
logger.error(e2);
}
}
return list; } /**
* @Title: isHasValues
* @Description: 判断一个对象所有属性是否有值,如果一个属性有值(分空),则返回true
* @param @param object
* @param @return
* @return boolean
* @throws
*/
public boolean isHasValues(Object object){
Field[] fields = object.getClass().getDeclaredFields();
boolean flag = false;
for (int i = 0; i < fields.length; i++) {
String fieldName = fields[i].getName();
String methodName = "get"+fieldName.substring(0, 1).toUpperCase()+fieldName.substring(1);
Method getMethod;
try {
getMethod = object.getClass().getMethod(methodName);
Object obj = getMethod.invoke(object);
if (null != obj && "".equals(obj)) {
flag = true;
break;
}
} catch (Exception e) {
logger.error(e);
} }
return flag; } public <T> void exportDataToExcel(List<T> list,String[] headers,String title,OutputStream os){
HSSFWorkbook workbook = new HSSFWorkbook();
//生成一个表格
HSSFSheet sheet = workbook.createSheet(title);
//设置表格默认列宽15个字节
sheet.setDefaultColumnWidth(15);
//生成一个样式
HSSFCellStyle style = this.getCellStyle(workbook);
//生成一个字体
HSSFFont font = this.getFont(workbook);
//把字体应用到当前样式
style.setFont(font); //生成表格标题
HSSFRow row = sheet.createRow(0);
row.setHeight((short)300);
HSSFCell cell = null; for (int i = 0; i < headers.length; i++) {
cell = row.createCell(i);
cell.setCellStyle(style);
HSSFRichTextString text = new HSSFRichTextString(headers[i]);
cell.setCellValue(text);
} //将数据放入sheet中
for (int i = 0; i < list.size(); i++) {
row = sheet.createRow(i+1);
T t = list.get(i);
//利用反射,根据JavaBean属性的先后顺序,动态调用get方法得到属性的值
Field[] fields = t.getClass().getFields();
try {
for (int j = 0; j < fields.length; j++) {
cell = row.createCell(j);
Field field = fields[j];
String fieldName = field.getName();
String methodName = "get"+fieldName.substring(0, 1).toUpperCase()+fieldName.substring(1);
Method getMethod = t.getClass().getMethod(methodName,new Class[]{});
Object value = getMethod.invoke(t, new Object[]{}); if(null == value)
value ="";
cell.setCellValue(value.toString()); }
} catch (Exception e) {
logger.error(e);
}
} try {
workbook.write(os);
} catch (Exception e) {
logger.error(e);
}finally{
try {
os.flush();
os.close();
} catch (IOException e) {
logger.error(e);
}
} } /**
* @Title: getCellStyle
* @Description: 获取单元格格式
* @param @param workbook
* @param @return
* @return HSSFCellStyle
* @throws
*/
public HSSFCellStyle getCellStyle(HSSFWorkbook workbook){
HSSFCellStyle style = workbook.createCellStyle();
style.setFillForegroundColor(HSSFColor.GREY_25_PERCENT.index);
style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
style.setBorderBottom(HSSFCellStyle.BORDER_THIN);
style.setBorderTop(HSSFCellStyle.BORDER_THIN);
style.setLeftBorderColor(HSSFCellStyle.BORDER_THIN);
style.setRightBorderColor(HSSFCellStyle.BORDER_THIN);
style.setAlignment(HSSFCellStyle.ALIGN_CENTER); return style;
} /**
* @Title: getFont
* @Description: 生成字体样式
* @param @param workbook
* @param @return
* @return HSSFFont
* @throws
*/
public HSSFFont getFont(HSSFWorkbook workbook){
HSSFFont font = workbook.createFont();
font.setColor(HSSFColor.WHITE.index);
font.setFontHeightInPoints((short)12);
font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
return font;
} public boolean isIE(HttpServletRequest request){
return request.getHeader("USER-AGENT").toLowerCase().indexOf("msie")>0?true:false;
}
}
java导入导出Excel文件的更多相关文章
- 【转】 (C#)利用Aspose.Cells组件导入导出excel文件
Aspose.Cells组件可以不依赖excel来导入导出excel文件: 导入: public static System.Data.DataTable ReadExcel(String strFi ...
- (C#)利用Aspose.Cells组件导入导出excel文件
Aspose.Cells组件可以不依赖excel来导入导出excel文件: 导入: public static System.Data.DataTable ReadExcel(String strFi ...
- ASP.NET Core导入导出Excel文件
ASP.NET Core导入导出Excel文件 希望在ASP.NET Core中导入导出Excel文件,在网上搜了一遍,基本都是使用EPPlus插件,EPPlus挺好用,但商用需要授权,各位码友若有好 ...
- 导入导出Excel文件
搭建环境 先新建web project ,然后Add Struts Capabilties: 下载导入导出Excel所需的jar包: poi-3.8-20120326.jar包 : http:// ...
- 【转载】Java导入导出excel
转自:https://blog.csdn.net/jerehedu/article/details/45195359 目前,比较常用的实现Java导入.导出Excel的技术有两种Jakarta POI ...
- java POI导出Excel文件数据库的数据
在web开发中,有一个经典的功能,就是数据的导入导出.特别是数据的导出,在生产管理或者财务系统中用的非常普遍,因为这些系统经常要做一些报表打印的工作.这里我简单实现导出Excel文件. POI jar ...
- java 实现导出Excel文件
java 实现导出Excel(java生成 excel 并导出文件) 经常有有一些数据需要导出成 excel 格式 ,所以就需要实现啦 开始: 1.加入jar poi-3.6-20091214. ...
- java中使用poi导入导出excel文件_并自定义日期格式
Apache POI项目的使命是创造和保持java API操纵各种文件格式基于Office Open XML标准(OOXML)和微软的OLE复合文档格式(OLE2)2.总之,你可以读写Excel文件使 ...
- java导入导出excel常用操作小结及简单示例
POI中常用设置EXCEL的操作小结: 操作excel如下 HSSFWorkbook wb = new HSSFWorkbook(); //创建一个webbook,对应一个Excel文件 HSSFS ...
随机推荐
- ubuntu1804搜狗输入法乱码问题解决
打开终端,移除搜狗输入法配置文件: cd ~/.config sudo rm -rf SogouPY* sogou* 然后重启电脑即可.
- [题解] [CF451E] Devu and Flowers
题面 题解 就是一个求\(\sum_{i= 1}^{n}x _ i = m\)的不重复多重集的个数, 我们可以由容斥原理得到: \[ ans = C_{n + m - 1}^{n - 1} - \su ...
- C++入门经典-例7.8-const对象,标准尺寸
1:当建立一个对象之后,如果不希望它的任何数据发生改变,可以将其直接声明为const对象,例如: const 类名 对象名 const对象必须初始化.我们可以调用它的数据和函数,但是不可以对他们进行修 ...
- svn 巧用,如果遇到问题解决不了,而上一个版本可以正常使用,则可以查记录
svn 巧用,如果遇到问题解决不了 1.svn上一个版本可以正常使用的情况下 2.查看历史 3. 丢失的代码复制回来即可
- python:网络爬虫的学习笔记
如果要爬取的内容嵌在网页源代码中的话,直接下载网页源代码再利用正则表达式来寻找就ok了.下面是个简单的例子: import urllib.request html = urllib.request.u ...
- PHP 封装POD 类
使用POD的过程 //1.造DSN:驱动名:dbname=数据库名;host=服务器地址 $dsn = "mysql:dbname=mydb;host=localhost"; // ...
- ZOJ - 1586 QS Network (Prim)
ZOJ - 1586 QS Network (Prim) #include<iostream> #include<cstring> using namespace std; + ...
- Jenkins Publish FTP远程部署过程
步骤: 1.安装FileZilla FTP Server 2.添加FTP账号: 1.Edit——Users——Add 2.Edit——Users——Shared folders 3.下载FileZil ...
- 查询出与jack互为好友的人名字
建表 /* Navicat MySQL Data Transfer Source Server : connect1 Source Server Version : 50611 Source Host ...
- numpy之数组属性与方法
# coding=utf-8import numpy as npimport random # nan是一个float类型 ,not a num不是一个数字;inf,infinite 无穷 # 轴的概 ...