public class ExcelUtil {
private static final Log log = LogFactory.getLog(ExcelUtil.class);//日志
/**
* 創建Excel對象
* @param excelBean
* @return
*/
public static HSSFWorkbook creatExcel(ExcelBean excelBean){
HSSFWorkbook wb = new HSSFWorkbook(); //創建Excel工作薄
//在Excel工作薄中建一工作表,默認為缺省值
// HSSFSheet sheet = wb.createSheet();
HSSFSheet sheet = wb.createSheet(excelBean.getSheetName());
//設置工作表各列寬度
// setColumnWidth(sheet, excelBean.getWidth());
//設置字體,樣式
//HSSFFont font = setFont(wb, "宋體");
//HSSFCellStyle style = setCellStyle(wb, font);
//設置第一行
List<String> titleList = excelBean.getTitleList();
setRowValue(sheet, titleList, 0); //在索引0的位置創建行(最頂端的行)
//設置數據行
List dataList = excelBean.getDataList();
if(dataList != null){
for(int i=0; i<dataList.size(); i++){
List rowList = (List) dataList.get(i);
setRowValue(sheet, rowList, i+1); //在索引1的位置創建行(第2行)
}
}
return wb;
}
/**
* 設置行值
* @param sheet
* @param List
* @return
*/
public static HSSFSheet setRowValue(HSSFSheet sheet, List<String> list,int rowNo){
if(list != null){
//在索引rowNo的位置創建行
HSSFRow rowTitle = sheet.createRow(rowNo);
for(int i= 0 ; i<list.size();i++){
String title = list.get(i);
//從索引0的位置開始創建單元格(左上端)
HSSFCell cell = rowTitle.createCell((short)i);
cell.setCellValue(title); //設置單元格內容
}
}
return sheet;
}
/**
* 下載Excel
* @param wb
* @param filename MemberList.xls
* @param response
* @return
*/
public static boolean downloadExcel(HSSFWorkbook wb, String filename, HttpServletResponse response){
boolean flag = true;
//設置輸入流
OutputStream output = null;
try {
// 設置響應類型
response.setHeader("Content-disposition", "attachment;filename="+new String(filename.getBytes("gbk"),"ISO-8859-1"));
response.setContentType("application/x-msdownload");
output = response.getOutputStream();
wb.write(output);//輸出到網頁中
output.flush();
log.info("下載Excel:" + filename + ", 成功!");
} catch (Exception e) {
flag = false;
log.info("下載Excel:" + filename + ", 失敗!");
e.printStackTrace();
} finally{
try {
output.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return flag;
}
/**
* 下載Excel
* add by zhangde 2011-3-17
* @param wb
* @param filename MemberList.xls
* @param response
* @return
*/
public static boolean downloadExcelEncode(String encoding, HSSFWorkbook wb, String filename, HttpServletResponse response){
boolean flag = true;
//設置輸入流
OutputStream output = null;
try {
// 設置響應類型,用utf-8,可能会出现高位(前面)被截。gbk在简体操作系统中不会。
// response.setHeader("Content-disposition", "attachment;filename="+new String(filename.getBytes(encoding),"ISO-8859-1"));
response.setHeader("Content-disposition", "attachment;filename="+URLEncoder.encode(filename, encoding));
System.out.println("filename=" + filename);
System.out.println("URLEncoderfilename=" + URLEncoder.encode(filename, encoding));
response.setContentType("application/x-msdownload");
output = response.getOutputStream();
wb.write(output);//輸出到網頁中
output.flush();
log.info("下載Excel:" + filename + ", 成功!");
} catch (Exception e) {
flag = false;
log.info("下載Excel:" + filename + ", 失敗!");
e.printStackTrace();
} finally{
try {
output.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return flag;
}
/**
* 下載Excel
* @param wb
* @param filename MemberList.xls
* @param response
* @param encoding 編碼參數 例如 gbk, utf-8
* @return
*/
public static boolean downloadExcel(String encoding, HSSFWorkbook wb, String filename, HttpServletResponse response){
boolean flag = true;
//設置輸入流
OutputStream output = null;
String name = "";
try {
// 設置響應類型
name = FileUtil.toEncodeString(filename, encoding); // 文件名編碼
response.setHeader("Content-disposition", "attachment;filename=" + name);
response.setContentType("application/x-msdownload");
output = response.getOutputStream();
wb.write(output);//輸出到網頁中
output.flush();
log.info("下載Excel:" + filename + ", 成功!");
} catch (Exception e) {
flag = false;
log.info("下載Excel:" + filename + ", 失敗!");
e.printStackTrace();
} finally{
try {
output.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return flag;
}
/**
* 導入文件(excel)
* @param path 路徑+檔案名
* @param line 從第幾欄開始
* @param rowLen 到第幾列結束
* @return list
* @throws Exception
*/
public static List<Object> importData(InputStream inputStream,int atRow, int line, int rowLen) throws Exception{
List<Object> tmpList = new ArrayList<Object>();
POIFSFileSystem pfs = new POIFSFileSystem(inputStream);
HSSFWorkbook wb = new HSSFWorkbook(pfs);
HSSFSheet sheet = wb.getSheetAt(0);
HSSFRow row = null;
try{
int totalRow = sheet.getLastRowNum(); //excel資料行數
if(totalRow>0){ //判斷excel是否為空
for(int i = atRow ; i <=totalRow; i++){
List<Object> rowList = new ArrayList<Object>();
row = sheet.getRow(i);
if(row!=null){ //判斷行是否為空
for(int j = line; j < rowLen; j++){
HSSFCell cell = row.getCell((short) j);
if(cell == null){ //判斷列是否為空
rowList.add("");
}else{
int ctype = cell.getCellType();
switch(ctype){
// 處理string部份
case HSSFCell.CELL_TYPE_BLANK:
rowList.add("");
break;
case HSSFCell.CELL_TYPE_STRING:
rowList.add(cell.getRichStringCellValue().getString().trim());
break;
//處理number部份
case HSSFCell.CELL_TYPE_NUMERIC:
if (HSSFDateUtil.isCellDateFormatted(cell)) { // 是否為日期型
System.out.print( cell.getDateCellValue());
//須轉date格式
rowList.add(cell.getDateCellValue());
}else{
double tmpdouble = cell.getNumericCellValue();
if(tmpdouble - (int)tmpdouble < Double.MIN_VALUE) {
//int
rowList.add(Integer.toString((int)tmpdouble));
}else{
//double
rowList.add(Double.toString(cell.getNumericCellValue()));
}
}
break;
//處理boolean部份
case HSSFCell.CELL_TYPE_BOOLEAN:
rowList.add(cell.getBooleanCellValue());
break;
}
}
}
tmpList.add(rowList);
}
}
}
}catch(Exception e){
e.printStackTrace();
throw e;
}
return tmpList;
}
/**
* 導入文件(excel)包含空行
* @param path 路徑+檔案名
* @param line 從第幾欄開始
* @param rowLen 到第幾列結束
* @return list
* @throws Exception
*/
public static List<Object> importData1(InputStream inputStream,int atRow, int line, int rowLen) throws Exception{
List<Object> tmpList = new ArrayList<Object>();
POIFSFileSystem pfs = new POIFSFileSystem(inputStream);
HSSFWorkbook wb = new HSSFWorkbook(pfs);
HSSFSheet sheet = wb.getSheetAt(0);
HSSFRow row = null;
try{
int totalRow = sheet.getLastRowNum(); //excel資料行數
if(totalRow>0){ //判斷excel是否為空
for(int i = atRow ; i <=totalRow; i++){
List<Object> rowList = new ArrayList<Object>();
row = sheet.getRow(i);
if(row!=null){ //判斷行是否為空
for(int j = line; j < rowLen; j++){
HSSFCell cell = row.getCell((short) j);
if(cell == null){ //判斷列是否為空
rowList.add("");
}else{
int ctype = cell.getCellType();
switch(ctype){
// 處理string部份
case HSSFCell.CELL_TYPE_BLANK:
rowList.add("");
break;
case HSSFCell.CELL_TYPE_STRING:
rowList.add(cell.getRichStringCellValue().getString().trim());
break;
//處理number部份
case HSSFCell.CELL_TYPE_NUMERIC:
if (HSSFDateUtil.isCellDateFormatted(cell)) { // 是否為日期型
System.out.print( cell.getDateCellValue());
//須轉date格式
rowList.add(cell.getDateCellValue());
}else{
double tmpdouble = cell.getNumericCellValue();
if(tmpdouble - (int)tmpdouble < Double.MIN_VALUE) {
//int
rowList.add(Integer.toString((int)tmpdouble));
}else{
//double
rowList.add(Double.toString(cell.getNumericCellValue()));
}
}
break;
//處理boolean部份
case HSSFCell.CELL_TYPE_BOOLEAN:
rowList.add(cell.getBooleanCellValue());
break;
}
}
}
}else{
for(int k = line; k < rowLen; k++){
rowList.add("");
}
}
tmpList.add(rowList);
}
}
}catch(Exception e){
e.printStackTrace();
throw e;
}
return tmpList;
}
}
分享到:
相关推荐
ExcelUtil java excel工具类
`ExcelUtil` 是一个在Java开发中常用的工具类,用于处理Microsoft Excel文件。这个类通常包含了一系列静态方法,便于开发者对Excel数据进行读取、写入、格式转换等操作,而无需深入理解底层的API细节。Excel文件在...
《ExcelUtil便捷读取工具 v3.1.6——高效处理Excel数据的利器》 ExcelUtil便捷读取工具是一款高效且易用的Java库,专为处理Excel数据而设计,适用于各种开发场景,如数据分析、报表生成、数据导入导出等。在v3.1.6...
在Java编程中,ExcelUtil是一个常见的工具类,用于处理与Microsoft Excel文件相关的操作,如导入数据、导出数据等。这个工具类的使用极大地简化了开发者处理Excel文件的工作流程,提高了开发效率。以下是对ExcelUtil...
本文将详细介绍如何使用POI库创建一个名为`ExcelUtil`的工具类,以实现Excel的导入和导出功能。 首先,我们需要在项目中引入Apache POI库。如果你使用的是Maven,可以在pom.xml文件中添加以下依赖: ```xml ...
最新导入导出工具类ExcelUtil.java
《ExcelUtil便捷读取工具 v3.1.5 源码分析》 在IT行业中,数据处理是一项至关重要的任务,而Excel作为一种广泛使用的电子表格工具,其数据处理能力强大,但手动操作效率较低。因此,开发能够高效读取和处理Excel...
接下来,我们构建一个名为`ExcelUtil`的工具类。这个类的核心功能是将`List<Object>`数据转换成Excel文件。首先,我们需要定义一个方法来初始化工作簿和工作表: ```java import org.apache.poi.hssf.usermodel....
一个用jxl做的导入导出excel表数据的工具类。
为您提供ExcelUtil便捷读取工具下载,ExcelUtil 借助反射和 POI 对 Excel 读取,省略了以往读取 Excel 的繁琐步骤,调用 ExcelUtil 只需要2步,对,你没有看错,2步足以读取到 Excel 的内容。自动赋值,传入对应...
例如,我们可以创建一个名为`ExcelUtil`的工具类,包含如下方法: - `static Workbook readExcel(File file)`:读取Excel文件并返回Workbook对象。 - `static void writeExcel(Workbook workbook, File outputFile)...
"ExcelUtil万能读取类兼容03/07"指的是一个Java编程中的类库,设计用于读取不同版本的Excel文件,包括Microsoft Excel 2003(.xls格式)和2007以后的版本(.xlsx格式)。这类工具对于开发人员来说至关重要,因为它们...
本人自主研发的ExcelUtil工具类,主要实现列表数据与excel文件互相转换的功能。 作用:快速实现数据导入和导出功能。 优势:只需配置注解即可实现数据导入导出功能,无需熟悉POI,并编写复杂的代码。
本篇将详细讲解如何利用Java的开源库Apache POI,结合反射机制,通过ExcelUtil工具类简化Excel读取的过程。 Apache POI是一个强大的库,它允许Java程序员创建、修改和展示MS Office格式的文件,包括Excel。在传统的...
ExcelUtil使用场景可以想一下我们现在有个Excel导入任务,比如是导入一个班级的学生花名册, 比如学生这个实体类是Student.java一般的导入是需要每行每列对Excel进行遍历,然后给Student的各个属性进行赋值,然后...
然后,创建一个名为`ExcelUtil`的工具类,该类包含生成Excel的方法: ```java import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import java.io.FileOutputStream; ...
一个优秀的工具类库应该具有良好的扩展性和自定义性。ExcelUtil可能提供了接口或策略模式,允许用户自定义样式、数据格式等,满足不同场景的需求。 7. **实际应用** ExcelUtil常被用于数据导入导出、报表生成、...
"ExcelUtil.java"就是一个这样的工具类,它简化了Java处理Excel的流程,提高了开发效率。 ExcelUtil.java通常包含了读取Excel数据、写入Excel数据以及进行一些基础的Excel操作等功能。这类工具类的核心是利用Apache...