java项目中Excel文件的导入导出

  1 package poi.excel;
  2
  3 import java.io.IOException;
  4 import java.io.InputStream;
  5 import java.io.OutputStream;
  6 import java.lang.reflect.Field;
  7 import java.lang.reflect.Method;
  8 import java.util.ArrayList;
  9 import java.util.List;
 10
 11 import javax.servlet.http.HttpServletRequest;
 12
 13 import org.apache.log4j.Logger;
 14 import org.apache.poi.hssf.usermodel.HSSFCell;
 15 import org.apache.poi.hssf.usermodel.HSSFCellStyle;
 16 import org.apache.poi.hssf.usermodel.HSSFFont;
 17 import org.apache.poi.hssf.usermodel.HSSFRichTextString;
 18 import org.apache.poi.hssf.usermodel.HSSFRow;
 19 import org.apache.poi.hssf.usermodel.HSSFSheet;
 20 import org.apache.poi.hssf.usermodel.HSSFWorkbook;
 21 import org.apache.poi.hssf.util.HSSFColor;
 22 import org.apache.poi.ss.usermodel.Cell;
 23 import org.apache.poi.ss.usermodel.Row;
 24 import org.apache.poi.ss.usermodel.Sheet;
 25 import org.apache.poi.ss.usermodel.Workbook;
 26 import org.apache.poi.xssf.usermodel.XSSFWorkbook;
 27
 28
 29
 30 /**
 31 * @ClassName: ExcelUtil
 32 * @Description: Excel导入导出工具类
 33 * @author 周宣
 34 * @date 2016-11-8 下午7:16:11
 35 *
 36 */
 37 public class ExcelUtil {
 38     private static final Logger logger = Logger.getLogger(ExcelUtil.class);
 39
 40     /**
 41     * @Title: createWorkbook
 42     * @Description: 判断excel文件后缀名,生成不同的workbook
 43     * @param @param is
 44     * @param @param excelFileName
 45     * @param @return
 46     * @param @throws IOException
 47     * @return Workbook
 48     * @throws
 49     */
 50     public Workbook createWorkbook(InputStream is,String excelFileName) throws IOException{
 51         if (excelFileName.endsWith(".xls")) {
 52             return new HSSFWorkbook(is);
 53         }else if (excelFileName.endsWith(".xlsx")) {
 54             return new XSSFWorkbook(is);
 55         }
 56         return null;
 57     }
 58
 59     /**
 60     * @Title: getSheet
 61     * @Description: 根据sheet索引号获取对应的sheet
 62     * @param @param workbook
 63     * @param @param sheetIndex
 64     * @param @return
 65     * @return Sheet
 66     * @throws
 67     */
 68     public Sheet getSheet(Workbook workbook,int sheetIndex){
 69         return workbook.getSheetAt(0);
 70     }
 71
 72     /**
 73     * @Title: importDataFromExcel
 74     * @Description: 将sheet中的数据保存到list中,
 75     * 1、调用此方法时,vo的属性个数必须和excel文件每行数据的列数相同且一一对应,vo的所有属性都为String
 76     * 2、在action调用此方法时,需声明
 77     *     private File excelFile;上传的文件
 78     *     private String excelFileName;原始文件的文件名
 79     * 3、页面的file控件name需对应File的文件名
 80     * @param @param vo javaBean
 81     * @param @param is 输入流
 82     * @param @param excelFileName
 83     * @param @return
 84     * @return List<Object>
 85     * @throws
 86     */
 87     public List<Object> importDataFromExcel(Object vo,InputStream is,String excelFileName){
 88         List<Object> list = new ArrayList<Object>();
 89         try {
 90             //创建工作簿
 91             Workbook workbook = this.createWorkbook(is, excelFileName);
 92             //创建工作表sheet
 93             Sheet sheet = this.getSheet(workbook, 0);
 94             //获取sheet中数据的行数
 95             int rows = sheet.getPhysicalNumberOfRows();
 96             //获取表头单元格个数
 97             int cells = sheet.getRow(0).getPhysicalNumberOfCells();
 98             //利用反射,给JavaBean的属性进行赋值
 99             Field[] fields = vo.getClass().getDeclaredFields();
100             for (int i = 1; i < rows; i++) {//第一行为标题栏,从第二行开始取数据
101                 Row row = sheet.getRow(i);
102                 int index = 0;
103                 while (index < cells) {
104                     Cell cell = row.getCell(index);
105                     if (null == cell) {
106                         cell = row.createCell(index);
107                     }
108                     cell.setCellType(Cell.CELL_TYPE_STRING);
109                     String value = null == cell.getStringCellValue()?"":cell.getStringCellValue();
110
111                     Field field = fields[index];
112                     String fieldName = field.getName();
113                     String methodName = "set"+fieldName.substring(0,1).toUpperCase()+fieldName.substring(1);
114                     Method setMethod = vo.getClass().getMethod(methodName, new Class[]{String.class});
115                     setMethod.invoke(vo, new Object[]{value});
116                     index++;
117                 }
118                 if (isHasValues(vo)) {//判断对象属性是否有值
119                     list.add(vo);
120                     vo.getClass().getConstructor(new Class[]{}).newInstance(new Object[]{});//重新创建一个vo对象
121                 }
122
123             }
124         } catch (Exception e) {
125             logger.error(e);
126         }finally{
127             try {
128                 is.close();//关闭流
129             } catch (Exception e2) {
130                 logger.error(e2);
131             }
132         }
133         return list;
134
135     }
136
137     /**
138     * @Title: isHasValues
139     * @Description: 判断一个对象所有属性是否有值,如果一个属性有值(分空),则返回true
140     * @param @param object
141     * @param @return
142     * @return boolean
143     * @throws
144     */
145     public boolean isHasValues(Object object){
146         Field[] fields = object.getClass().getDeclaredFields();
147         boolean flag = false;
148         for (int i = 0; i < fields.length; i++) {
149             String fieldName = fields[i].getName();
150             String methodName = "get"+fieldName.substring(0, 1).toUpperCase()+fieldName.substring(1);
151             Method getMethod;
152             try {
153                 getMethod = object.getClass().getMethod(methodName);
154                 Object obj = getMethod.invoke(object);
155                 if (null != obj && "".equals(obj)) {
156                     flag = true;
157                     break;
158                 }
159             } catch (Exception e) {
160                 logger.error(e);
161             }
162
163         }
164         return flag;
165
166     }
167
168     public <T> void exportDataToExcel(List<T> list,String[] headers,String title,OutputStream os){
169         HSSFWorkbook workbook = new HSSFWorkbook();
170         //生成一个表格
171         HSSFSheet sheet = workbook.createSheet(title);
172         //设置表格默认列宽15个字节
173         sheet.setDefaultColumnWidth(15);
174         //生成一个样式
175         HSSFCellStyle style = this.getCellStyle(workbook);
176         //生成一个字体
177         HSSFFont font = this.getFont(workbook);
178         //把字体应用到当前样式
179         style.setFont(font);
180
181         //生成表格标题
182         HSSFRow row = sheet.createRow(0);
183         row.setHeight((short)300);
184         HSSFCell cell = null;
185
186         for (int i = 0; i < headers.length; i++) {
187             cell = row.createCell(i);
188             cell.setCellStyle(style);
189             HSSFRichTextString text = new HSSFRichTextString(headers[i]);
190             cell.setCellValue(text);
191         }
192
193         //将数据放入sheet中
194         for (int i = 0; i < list.size(); i++) {
195             row = sheet.createRow(i+1);
196             T t = list.get(i);
197             //利用反射,根据JavaBean属性的先后顺序,动态调用get方法得到属性的值
198             Field[] fields = t.getClass().getFields();
199             try {
200                 for (int j = 0; j < fields.length; j++) {
201                     cell = row.createCell(j);
202                     Field field = fields[j];
203                     String fieldName = field.getName();
204                     String methodName = "get"+fieldName.substring(0, 1).toUpperCase()+fieldName.substring(1);
205                     Method getMethod = t.getClass().getMethod(methodName,new Class[]{});
206                     Object value = getMethod.invoke(t, new Object[]{});
207
208                     if(null == value)
209                         value ="";
210                     cell.setCellValue(value.toString());
211
212                 }
213             } catch (Exception e) {
214                 logger.error(e);
215             }
216         }
217
218         try {
219             workbook.write(os);
220         } catch (Exception e) {
221             logger.error(e);
222         }finally{
223             try {
224                 os.flush();
225                 os.close();
226             } catch (IOException e) {
227                 logger.error(e);
228             }
229         }
230
231     }
232
233     /**
234     * @Title: getCellStyle
235     * @Description: 获取单元格格式
236     * @param @param workbook
237     * @param @return
238     * @return HSSFCellStyle
239     * @throws
240     */
241     public HSSFCellStyle getCellStyle(HSSFWorkbook workbook){
242         HSSFCellStyle style = workbook.createCellStyle();
243         style.setFillForegroundColor(HSSFColor.GREY_25_PERCENT.index);
244         style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
245         style.setBorderBottom(HSSFCellStyle.BORDER_THIN);
246         style.setBorderTop(HSSFCellStyle.BORDER_THIN);
247         style.setLeftBorderColor(HSSFCellStyle.BORDER_THIN);
248         style.setRightBorderColor(HSSFCellStyle.BORDER_THIN);
249         style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
250
251         return style;
252     }
253
254     /**
255     * @Title: getFont
256     * @Description: 生成字体样式
257     * @param @param workbook
258     * @param @return
259     * @return HSSFFont
260     * @throws
261     */
262     public HSSFFont getFont(HSSFWorkbook workbook){
263         HSSFFont font = workbook.createFont();
264         font.setColor(HSSFColor.WHITE.index);
265         font.setFontHeightInPoints((short)12);
266         font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
267         return font;
268     }
269
270     public boolean isIE(HttpServletRequest request){
271         return request.getHeader("USER-AGENT").toLowerCase().indexOf("msie")>0?true:false;
272     }
273 }
时间: 2024-08-01 22:41:09

java项目中Excel文件的导入导出的相关文章

java项目中Excel文件预览

1 package com.linkonworks.df.busi.utils; 2 3 import java.io.File; 4 import java.io.FileInputStream; 5 import java.io.IOException; 6 import java.io.InputStream; 7 import java.io.StringWriter; 8 9 import javax.xml.parsers.DocumentBuilderFactory; 10 imp

SSM excel文件的导入导出

对于excel文件的导入导出,后台接收读取和建表封存都是固定死的,所以对于excel导入时,excel文件内容必须匹配后台相关对象,不然报错. excel文件导出,用<a><a/>标签即可,通过后台去完成 ,不可用ajax去写导出,ajax请求只是个"字符型"的请求,即请求的内容是以文本类型存放的. 文件的下载是以二进制形式进行的,ajax没法解析后台返回的文件流,所以无法处理二进制流response输出来下载文件. 当获取前台导入这个命令后,会通过Mybati

DB2中ixf文件的导入导出

1. 导出数据 语法:EXPORT TO <文件路径>/文件名.IXF OF IXF SELECT * FROM 表名   2. 导入数据 语法:db2 IMPORT FROM <路径>/<文件名>.IXF OF IXF MODIFIED BY FORCECREATE COMMITCOUNT 10000 REPLACE_CREATE INTO <表名> 简单语法:db2 IMPORT FROM <路径>/<文件名>.IXF OF IX

Eclipse 中 Java 项目中 .settings 文件夹作用

今天工作时,因对 .settings 文件夹误操作,耗时 6 个多小时,才了解到原因就出在 .settings 文件夹.经查阅资料,对 .settings 做如下整理: 就如setting这个名字,就是存放存放各种插件的配置文件..有这些文件的约束你可以更好的利用IDE进行coding.所以呢,这些文件只是用来配置环境用的. 1. org.eclipse.jdt.core.prefs 该文件是与Compile相关的配置,一般情况下的内容如下: 可以手动修改该文件,添加一些其他的配置,然后重启Ec

Oracle 中sql文件的导入导出

导出 一般导入的时候我用的是命令行 imp c##zs/111@orcl fromuser=c##zs touser=c##zs file=D:\java\950.dmp ignore=y c##zs 是创建的用户  111是密码 Oracle 不像Mysql 直接进行 主键进行自增 接下来有两种方法 1.使用图形化界面 选中表然后右键 选中创建(序列中的主键) 这就可以了 ,建议刷新一下. 另外一种方式(选中创建的时候) 选中插入,删除,更新中的一个 我选择插入点击确认 在这里我们只需要编写b

mysql中csv文件的导入导出

导出例子: select *from testinto outfile 'D:test.csv'fields terminated by ',' optionally enclosed by '"' escaped by '"'lines terminated by '\r\n'; 导入例子:load data infile 'D:test.csv' into table `test` fields terminated by ',' optionally enclosed by '&

poi excel文件的导入

使用poi来实现excel文件的导入导出.使用struts2来做处理. 首先看jsp页面: index.jsp: <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <%@ taglib uri="/struts-tags" prefix="s"%> <!DOCTYPE HTML PUBLIC

java实现文件批量导入导出实例(兼容xls,xlsx)

1.介绍 java实现文件的导入导出数据库,目前在大部分系统中是比较常见的功能了,今天写个小demo来理解其原理,没接触过的同学也可以看看参考下. 目前我所接触过的导入导出技术主要有POI和iReport,poi主要作为一些数据批量导入数据库,iReport做报表导出.另外还有jxl类似poi的方式,不过貌似很久没跟新了,2007之后的office好像也不支持,这里就不说了. 2.POI使用详解 2.1 什么是Apache POI? Apache POI是Apache软件基金会的开放源码函式库,

在MyEclipse的web项目/java项目中,使用Hibernate-tools中的hbm2java和hbm2ddl工具,根据hbm文件自动生成pojo和数据库脚本

     首先,我一定要吐槽下,这个Ant管理部署项目的工具,以及hibernate刚刚学习,导入我这一个简单的问题整了一天多,实在效率有点低下.在这两天中,①了解了Ant,知道了在Ant中很灵活的步骤项目的情况,知道了build.xml文件的一些基本写法.②还学习了在MyEclipse这样的集成工具中完成项目部署.③以及在这两种情况中,利用hibernateTools中的hbm2java和hbm2ddl工具,根据对象关系映射文件,自动生成POJO以及SQL文件(就是数据表). 一,在web项目