参考 所用jar包:

  poi-3.11.jar
  poi-ooxml-3.11.jar
  poi-ooxml-schemas-3.11.jar


/*
* Project: fusion-may-open-fusion-base
*
* File Created at 2018年4月28日
*
* Copyright 2016 CMCC Corporation Limited.
* All rights reserved.
*
* This software is the confidential and proprietary information of
* ZYHY Company. ("Confidential Information"). You shall not
* disclose such Confidential Information and shall use it only in
* accordance with the terms of the license.
*/
package com.cmcc.open.ss.util; import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map; import javax.servlet.http.HttpServletResponse; 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.CellRangeAddress;
import org.apache.poi.hssf.util.HSSFColor;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.DateUtil;
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; import com.cmcc.open.framework.utils.TimeUtil; /**
* @Type ExcelHelper.java
* @Desc 支持excel 03/07版本
* @author xxx
* @date 2018年4月28日 上午11:20:49
* @version
*/
public class ExcelHelper { /**
* 读取excel文件内容(适合 第一行为大标题,第二行是列名行)
* @param f
* @return
*/
public static List<List<Map<String, String>>> readExcelContent(File f, String fileName) { String fileType = fileName.substring(fileName.lastIndexOf(".") + 1, fileName.length());
InputStream is = null;
Workbook wb = null;
List<List<Map<String, String>>> result = new ArrayList<List<Map<String, String>>>();//对应excel文件
try {
is = new FileInputStream(f.getAbsoluteFile());
if (fileType.equals("xls")) {
wb = new HSSFWorkbook(is);
} else if (fileType.equals("xlsx")) {
wb = new XSSFWorkbook(f.getAbsoluteFile());
} int sheetSize = wb.getNumberOfSheets();
for (int i = 0; i < sheetSize; i++) {//遍历sheet页
Sheet sheet = wb.getSheetAt(i);
List<Map<String, String>> sheetList = new ArrayList<Map<String, String>>();//对应sheet页
List<String> titles = new ArrayList<String>();//放置所有的标题 int rowSize = sheet.getLastRowNum() + 1;
for (int j = 0; j < rowSize; j++) {//遍历行
Row row = sheet.getRow(j);
if (row == null) {//略过空行
continue;
}
if (j == 0) {
continue;//第一行 大标题
}
int cellSize = row.getLastCellNum();//行中有多少个单元格,也就是有多少列
if (j == 1) {//第二行 标题行 (列名行)
for (int k = 0; k < cellSize; k++) {
Cell cell = row.getCell(k);
titles.add(cell.toString());
}
} else {//其他行是数据行
Map<String, String> rowMap = new HashMap<String, String>();//对应一个数据行
for (int k = 0; k < titles.size(); k++) {
Cell cell = row.getCell(k);
String key = titles.get(k).trim();
String value = null;
if (cell != null) {
int cellType = cell.getCellType();
switch (cellType) {
case Cell.CELL_TYPE_STRING: // 文本
value = cell.getRichStringCellValue().getString().trim();
break;
case Cell.CELL_TYPE_NUMERIC: // 数字、日期
if (DateUtil.isCellDateFormatted(cell)) {
value = TimeUtil.getFormatDateTime(
cell.getDateCellValue(),
TimeUtil.TIME_FORMAT2_24);
} else {
cell.setCellType(Cell.CELL_TYPE_STRING);
value = String.valueOf(cell.getRichStringCellValue()
.getString().trim());
}
break;
case Cell.CELL_TYPE_BOOLEAN: // 布尔型
value = String.valueOf(cell.getBooleanCellValue());
break;
case Cell.CELL_TYPE_BLANK: // 空白
value = "";
// value = cell.getStringCellValue();
break;
case Cell.CELL_TYPE_ERROR: // 错误
value = "错误#";
break;
case Cell.CELL_TYPE_FORMULA: // 公式
// 得到对应单元格的公式
//cellValue = cell.getCellFormula() + "#";
// 得到对应单元格的字符串
cell.setCellType(Cell.CELL_TYPE_STRING);
value = String
.valueOf(cell.getRichStringCellValue().getString());
break;
default:
value = "#";
}
// value = cell.toString().trim();
}
rowMap.put(key, value);
}
sheetList.add(rowMap);
}
}
result.add(sheetList);
} } catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (wb != null) {
wb.close();
}
if (is != null) {
is.close();
}
} catch (Exception e2) {
e2.printStackTrace();
}
} return result;
} /**
*
* @param title 第一行 例如:码号模板xxx
* @param header 标题行
* @param list 数据集合
*/
public static HSSFWorkbook writeExcel(String title, String[] header, List<String[]> dataList) { HSSFWorkbook workbook = new HSSFWorkbook(); // 创建工作簿对象
try {
HSSFSheet sheet = workbook.createSheet("Sheet1"); // 创建工作表
// 产生表格标题行
HSSFRow rowm = sheet.createRow(0);
HSSFCell bigTitle = rowm.createCell(0); //sheet样式定义【getColumnTopStyle()/getStyle()均为自定义方法 - 在下面 - 可扩展】
HSSFCellStyle columnTopStyle = getColumnTopStyle(workbook);//获取列头样式对象
HSSFCellStyle style = getStyle(workbook); //单元格样式对象 sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, (header.length - 1)));
bigTitle.setCellStyle(columnTopStyle);
bigTitle.setCellValue(title); // 定义所需列数
int columnNum = header.length;
HSSFRow rowRowName = sheet.createRow(1); // 在索引1的位置创建行(最顶端的行开始的第二行) // 将列头设置到sheet的单元格中
for (int n = 0; n < columnNum; n++) {
HSSFCell cellRowName = rowRowName.createCell(n); //创建列头对应个数的单元格
cellRowName.setCellType(HSSFCell.CELL_TYPE_STRING); //设置列头单元格的数据类型
HSSFRichTextString text = new HSSFRichTextString(header[n]);
cellRowName.setCellValue(text); //设置列头单元格的值
// cellRowName.setCellStyle(columnTopStyle); //设置列头单元格样式
cellRowName.setCellStyle(style); //设置列头单元格样式
sheet.setColumnWidth(n, 18 * 256); //设置列宽
} //将查询出的数据设置到sheet对应的单元格中
for (int i = 0; i < dataList.size(); i++) { String[] strArr = dataList.get(i);//遍历每个对象
HSSFRow row = sheet.createRow(i + 2);//创建所需的行数
HSSFCell numCell = row.createCell(0, HSSFCell.CELL_TYPE_NUMERIC);//序号列
numCell.setCellValue(i + 1);
numCell.setCellStyle(style); //设置单元格样式 for (int j = 0; j < strArr.length; j++) {
HSSFCell cell = null; //设置单元格的数据类型
cell = row.createCell(j + 1, HSSFCell.CELL_TYPE_STRING);
if (strArr[j] != null) {
cell.setCellValue(strArr[j].toString()); //设置单元格的值
}else{
cell.setCellValue(""); //设置单元格的值
}
cell.setCellStyle(style); //设置单元格样式
}
}
//让列宽随着导出的列长自动适应
/*for (int colNum = 0; colNum < columnNum; colNum++) {
int columnWidth = sheet.getColumnWidth(colNum) / 256;
for (int rowNum = 0; rowNum < sheet.getLastRowNum(); rowNum++) {
HSSFRow currentRow;
//当前行未被使用过
if (sheet.getRow(rowNum) == null) {
currentRow = sheet.createRow(rowNum);
} else {
currentRow = sheet.getRow(rowNum);
}
if (currentRow.getCell(colNum) != null) {
HSSFCell currentCell = currentRow.getCell(colNum);
if (currentCell.getCellType() == HSSFCell.CELL_TYPE_STRING) {
int length = currentCell.getStringCellValue().getBytes().length;
if (columnWidth < length) {
columnWidth = length;
}
}
}
}
if (colNum == 0) {
sheet.setColumnWidth(colNum, (columnWidth - 2) * 256);
} else {
sheet.setColumnWidth(colNum, (columnWidth + 4) * 256);
}
}*/ } catch (Exception e) {
e.printStackTrace();
} return workbook;
} /*
* 列头单元格样式
*/
public static HSSFCellStyle getColumnTopStyle(HSSFWorkbook workbook) { // 设置字体
HSSFFont font = workbook.createFont();
//设置字体大小
font.setFontHeightInPoints((short) 11);
//字体加粗
font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
//设置字体名字
font.setFontName("Courier New");
//设置样式;
HSSFCellStyle style = workbook.createCellStyle();
//设置底边框;
style.setBorderBottom(HSSFCellStyle.BORDER_THIN);
//设置底边框颜色;
style.setBottomBorderColor(HSSFColor.BLACK.index);
//设置左边框;
style.setBorderLeft(HSSFCellStyle.BORDER_THIN);
//设置左边框颜色;
style.setLeftBorderColor(HSSFColor.BLACK.index);
//设置右边框;
style.setBorderRight(HSSFCellStyle.BORDER_THIN);
//设置右边框颜色;
style.setRightBorderColor(HSSFColor.BLACK.index);
//设置顶边框;
style.setBorderTop(HSSFCellStyle.BORDER_THIN);
//设置顶边框颜色;
style.setTopBorderColor(HSSFColor.BLACK.index);
//在样式用应用设置的字体;
style.setFont(font);
//设置自动换行;
style.setWrapText(false);
//设置水平对齐的样式为居中对齐;
style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
//设置垂直对齐的样式为居中对齐;
style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); return style; } /*
* 列数据信息单元格样式
*/
public static HSSFCellStyle getStyle(HSSFWorkbook workbook) {
// 设置字体
HSSFFont font = workbook.createFont();
//设置字体大小
//font.setFontHeightInPoints((short)10);
//字体加粗
//font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
//设置字体名字
font.setFontName("Courier New");
//设置样式;
HSSFCellStyle style = workbook.createCellStyle();
//设置底边框;
style.setBorderBottom(HSSFCellStyle.BORDER_THIN);
//设置底边框颜色;
style.setBottomBorderColor(HSSFColor.BLACK.index);
//设置左边框;
style.setBorderLeft(HSSFCellStyle.BORDER_THIN);
//设置左边框颜色;
style.setLeftBorderColor(HSSFColor.BLACK.index);
//设置右边框;
style.setBorderRight(HSSFCellStyle.BORDER_THIN);
//设置右边框颜色;
style.setRightBorderColor(HSSFColor.BLACK.index);
//设置顶边框;
style.setBorderTop(HSSFCellStyle.BORDER_THIN);
//设置顶边框颜色;
style.setTopBorderColor(HSSFColor.BLACK.index);
//在样式用应用设置的字体;
style.setFont(font);
//设置自动换行;
style.setWrapText(false);
//设置水平对齐的样式为居中对齐;
style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
//设置垂直对齐的样式为居中对齐;
style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); return style; } /**
* 输出excel文件流
* @param response
* @param fileName
* @param workbook
*/
public static void exportExcel(HttpServletResponse response, String fileName,
HSSFWorkbook workbook) {
OutputStream out = null;
try {
response.setContentType("application/octet-stream");
response.setHeader("Content-disposition ",
"attachment; filename=" + URLEncoder.encode(fileName, "UTF-8"));
out = response.getOutputStream();
workbook.write(out);
out.flush();
out.close();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (out != null) {
out.close();
}
if (workbook != null) {
workbook.close();
}
} catch (Exception e2) {
e2.printStackTrace();
}
} } }

  

最新文章

  1. 各种解析漏洞获取Webshell
  2. ubuntu 下安装redis 以及php扩展
  3. struts 拦截器 Interceptor
  4. 非常简单实用的Python HTTP服务
  5. 正态QQ图的原理
  6. 更新AD对象属性值
  7. POJ 2486-Apple Tree(树状背包)
  8. php返回的json格式
  9. druid数据源连接oracle10g报错:not support oracle driver 1.0
  10. 记mysql中时间相关的一个奇怪问题
  11. javascript 日期函数
  12. redis哨兵集群环境搭建
  13. 【Mybatis】XML配置实现增删改查
  14. cocos2dx+lua注册事件函数详解 事件
  15. Linux环境SVN命令行使用经验总结(转)
  16. Python的数据库连接池DBUtils
  17. Cesium随笔(1)部署自己的项目 【转】
  18. 第103天:CSS3中Flex布局(伸缩布局)详解
  19. Fiddler手机https抓包
  20. Debian 7 源(32/64bit)好用的源

热门文章

  1. Unity中使用ulua的个人经验总结
  2. Oracle之标示符无效
  3. org.apache.commons.dbcp.SQLNestedException: Cannot load JDBC driver class
  4. libubox-blob/blobmsg
  5. poj2987 Firing 最大权闭合子图 边权有正有负
  6. 【每一个人都是梵高】A Neural Algorithm of Artistic Style
  7. nginx-1.14.0安装
  8. CNN图像分割总结
  9. [转]NBehave行为驱动测试关于story和scenarios
  10. QT国际化,中英文等多语言界面显示的方法