POI 导出excel
来源:互联网 发布:android和java区别 编辑:程序博客网 时间:2024/06/01 22:39
1.jar包之类的步骤省略。(框架ssh)
2.导出工具类。
package com.iotlab.fw.util;
import java.io.ByteArrayOutputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
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.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import com.iotlab.fw.bean.PageInfo;
/**
* excel导出工具类
* @author maolina
*
*/
public class ExcelDownload {
public static byte[] download(String fileName,String[] oneColumn,String[] oneColumnData,PageInfo pageInfo) throws Exception{
ByteArrayOutputStream out = new ByteArrayOutputStream();
HSSFWorkbook workbook = new HSSFWorkbook();
HSSFSheet sheet = workbook.createSheet();
List<String []> listData = getExcelDataList(pageInfo.getSearchResult(),oneColumn,oneColumnData);
for (int i = 0; i < listData.get(0).length; i++) {// 设置列宽
sheet.setColumnWidth((short) i, (short) 5500);
}
/** ——————————BEGIN 动态数据———————————— */
if(null != listData && listData.size() > 0 ){
for (int i = 0; i < listData.size(); i++)
{
//获取封装的每一行记录
String[] strArr = listData.get(i);
//设置单元格对齐方式
//居左
HSSFCellStyle cellStyle_left = workbook.createCellStyle();
cellStyle_left.setAlignment(HSSFCellStyle.ALIGN_LEFT); // 指定单元格居中对齐
cellStyle_left.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);// 指定单元格垂直居中对齐
cellStyle_left.setWrapText(true);// 指定单元格自动换行
cellStyle_left.setBorderBottom(HSSFCellStyle.BORDER_THIN);
cellStyle_left.setBorderLeft(HSSFCellStyle.BORDER_THIN);
cellStyle_left.setBorderRight(HSSFCellStyle.BORDER_THIN);
cellStyle_left.setBorderTop(HSSFCellStyle.BORDER_THIN);
//居中
HSSFCellStyle cellStyle_center = workbook.createCellStyle();
cellStyle_center.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 指定单元格居中对齐
cellStyle_center.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);// 指定单元格垂直居中对齐
cellStyle_center.setWrapText(true);// 指定单元格自动换行
cellStyle_center.setBorderBottom(HSSFCellStyle.BORDER_THIN);
cellStyle_center.setBorderLeft(HSSFCellStyle.BORDER_THIN);
cellStyle_center.setBorderRight(HSSFCellStyle.BORDER_THIN);
cellStyle_center.setBorderTop(HSSFCellStyle.BORDER_THIN);
//居右
HSSFCellStyle cellStyle_right = workbook.createCellStyle();
cellStyle_right.setAlignment(HSSFCellStyle.ALIGN_RIGHT); // 指定单元格居中对齐
cellStyle_right.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);// 指定单元格垂直居中对齐
cellStyle_right.setWrapText(true);// 指定单元格自动换行
cellStyle_right.setBorderBottom(HSSFCellStyle.BORDER_THIN);
cellStyle_right.setBorderLeft(HSSFCellStyle.BORDER_THIN);
cellStyle_right.setBorderRight(HSSFCellStyle.BORDER_THIN);
cellStyle_right.setBorderTop(HSSFCellStyle.BORDER_THIN);
//设置标题字体
HSSFFont font = workbook.createFont();
font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
font.setFontName("宋体");
font.setFontHeight((short) 250);
cellStyle_center.setFont(font);
if(strArr != null && strArr.length > 0 ){
HSSFRow row = sheet.createRow(i);
//设置行高
row.setHeight((short)400);
for (int j = 0; j < listData.get(0).length; j++)
{
HSSFCell cell = row.createCell((short) j);
sheet.getRow(i).getCell((short)j).setEncoding(HSSFCell.ENCODING_UTF_16);//设置单元格编码方式
cell.setCellValue(strArr[j]);
if(i<1){
cell.setCellStyle(cellStyle_center);
}else{
cell.setCellStyle(cellStyle_right);
}
}
}
}
}
/** ——————————END 动态数据———————————— */
workbook.write(out);
/** 将excel写入字节输出流...end **/
return out.toByteArray();
}
/**
* 获取导出excel的数据
* @param data
* @param head
* @param size
* @return
*/
public static List<String[]> getExcelDataList(List<Map<String,Object>> data,String[] oneColumn,String[] oneColumnData){
List<String[]> resultList = new ArrayList<String[]>();
int columnSize = oneColumn.length;
//第一行标题:
resultList.add(oneColumn);
//第二行:数据
if(data!=null && data.size() > 0){
for(int i=0;i<data.size();i++){
String[] dataString = new String[columnSize];
Map o = (Map)data.get(i);
for(int j = 0;j< dataString.length;j++){
dataString[j] = (String)o.get(oneColumnData[j]);
}
resultList.add(dataString);
}
}
return resultList;
}
}
3.action
/**
* 导出excel
*/
public String downloadDataByExcel() throws Exception {
String fileName = "品名管理";
setInitData(fileName);
String[] oneColumn = { "编码", "名称", "英文名称", "排序号", "状态" };
String[] oneColumnData = { "CODE", "NAME", "EN_NAME", "ORDER_NUM", "CARGO_STATUS_NAME" };
super.pageInfo = new PageInfo(100);
super.execute();
inputStream = new ByteArrayInputStream(ExcelDownload.download(fileName, oneColumn, oneColumnData, pageInfo));
return "downloadExcel";
}
4.
/**
* @Fields downFileName: 文件名
*/
protected String downFileName;
/**
* @Fields inputStream: 输入流
*/
protected InputStream inputStream;
public void setInitData(String fileName) throws IOException {
try {
// response.setHeader("Content-Disposition","attachment;filename="+fileName);
setDownFileName(URLEncoder.encode(fileName, "UTF8") + "-"
+ new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()) + ".xls");
setFileType("application/vnd.ms-excel");// 文件类型
super.encapType = QueryService.MAP_ENCAPSULATION;
// OutputStream os=response.getOutputStream();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
5.配置文件
<action name="cargoExcel_*" class="cargoExcelAction" method="{1}">
<result name="downloadExcel" type="stream">
<param name="contentType">${fileType}</param>
<param name="contentDisposition">attachment;filename=${downFileName}</param>
<param name="inputName">inputStream</param>
<param name="bufferSize">4096</param>
</result>
</action>
- Excel POI导出excel
- POI-----POI导出Excel实例
- jsp导出excel poi
- POI导出EXCEL
- poi导出Excel
- poi导出excel
- POI 导出excel
- POI 导出excel
- POI 实现导出Excel
- java poi 导出excel
- poi 方式导出excel
- POI 导出Excel
- 使用poi导出excel
- poi导出excel
- poi导出excel实例
- 使用POI导出Excel
- POI 导出EXCEL
- 导出excel poi
- 【Python】Tensorflow获取变量,保存网络参数到Matlab格式
- 将map对象转换为json时,如果key的value值是null,将不会将其加入json字符串
- java w3c dom 解析 xml
- 计网数据交换方式
- 那些常用的HTML标签
- POI 导出excel
- JS——正则坑1
- 基于裸数据的异地数据库性能诊断与优化
- 简单的前端树形数据整理
- 电路加法实验
- opencv Drawing Functions 全部函数使用说明
- mt6735 [AT Command] AP下发AT+CLAC命令后 ,手机出现宕机
- C++ 堆和栈的区别 内存分配方式理解
- 【OpenCv/EmguCv】指针式仪表读数(二)