/*
* 創建人:cwq
* 創建時間 :20160105
* 創建用於 用於臨時文件的下載
*
* */
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.*;
// import com.sunrise.foundation.utils.RequestWrapper;
// import com.sunrise.framework.core.ApplicationManager;
// import com.sunrise.framework.struts2.Header;
// import com.sunrise.framework.struts2.JsonObject;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
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.CellStyle;
import org.apache.poi.ss.usermodel.Workbook;
public class DownloadExcel {
// private RequestWrapper request = ApplicationManager.getRequest();
//tomcat地址
// private String Path = request.getSession().getServletContext().getRealPath("/");
private File resultFile = null;
private String sheetName = "sheet";
private int sheetRow = 0;
private String fileName=null;
private String [] gaugeHead = {"第一列","第二列"};
private String [][] cellValue = {{"1","2"},{"1","2"},{"3","4"}};
private Map<String, Object> params = new HashMap<String, Object>();
private String gauge = null;
private String cell = null;
// public JsonObject main()throws Exception{
// if(request.getParameter("sheetName")!=null) sheetName = request.getParameter("sheetName");
// if(request.getParameter("sheetRow")!=null) sheetRow = Integer.parseInt(request.getParameter("sheetRow"));
// if(request.getParameter("gaugeHead")!=null) gauge = request.getParameter("gaugeHead");
// if(request.getParameter("cellValue")!=null) cell = request.getParameter("cellValue");
// showParams(request);
// System.out.println("======"+gauge+"=======");
// System.out.println("===="+cell+"==========");
// // sheetRow=2;
// deleteFile(new File(Path+"/uploadfile/download/DownloadExcel/"),60*30);//刪除30分鐘前的文件
// // deleteFile(new File(Path+"/uploadfile/download/DownloadExcel/result201601060941462.xlsx"),0);
// return export(sheetName, sheetRow, gaugeHead, cellValue);
// }
/*
* 刪除刪除本文件
* @fileName 文件名字
* */
// public JsonObject Delete(){
// if(request.getParameter("fileName")!=null){
// fileName=request.getParameter("fileName");
// deleteFile(new File(Path+"/uploadfile/download/DownloadExcel/"+fileName+".xls"),1);
// params.put("fileName",fileName);
// return new JsonObject(new Header(0, "success"), params);
// }else{
// params.put("message","文件已經刪除");
// return new JsonObject(new Header(0, "false"), params);
// }
// }
/*
* 測試直接調用方法
*
* */
public void exportExcel() throws Exception{
exportExcel(null,null);
}
/*
* 直接調用方法
*
* */
// public JsonObject exportExcel(String [] gaugeHead,List cellValue) throws Exception{
// //// List list = new ArrayList();
// // List list = new ArrayList();
// // String [] str ={"8986061509000064555","已經初始化該數據,並且更新"};
// // String [] str2 ={"8986061509000064558","已經初始化該數據,並且更新"};
// // list.add(str);
// // list.add(str2);
// // ToList(list);
// return export(sheetName, sheetRow, gaugeHead, ToList(cellValue));
// }
/*
* 轉爲二數組
* */
private String[][] ToList( List list){
int listLength = list.size();
Object[] listArray = list.toArray();
String[][] arrList = new String[listLength][];
for(int i=0;i<listArray.length;i++){
arrList[i]=(String[]) listArray[i];
}
return arrList;
}
/*
* 用於導出xlsx 文件
* @sheetName 頁的名字
* @sheetRow 多少行一個頁
* @gaugeHead 表頭
* @cellValue 內容
* */
private String export(String sheetName,int sheetRow,String [] gaugeHead,String [][] cellValue) throws IOException {
fileName="result"+createTime()+createRandom();
//結果存放文件以及地址
resultFile = new File(Path+"/uploadfile/download/DownloadExcel/"+fileName+".xls");
// 創建工作簿
HSSFWorkbook wb = new HSSFWorkbook();
//工作簿的樣式
CellStyle cellType= CellStyle(wb);
if(sheetRow>0) {
int len = cellValue.length;//數據的行數
int yuShu = len%sheetRow;//取餘數
int ye = (yuShu==0)?(int)Math.ceil(len/sheetRow):((int)Math.ceil(len/sheetRow)+1);
// System.out.println(ye);
for(int i=0;i<ye;i++){
String name= (i==0)? sheetName : sheetName+ String.valueOf(i);//頁的名字
wb.createSheet(name);//創建頁
gaugeHead(wb.getSheet(name), cellType, gaugeHead);//表頭
CellValue(wb.getSheet(name), cellType,setPage(i,cellValue,sheetRow,ye,yuShu));//設置內容
}
}else {
// 創建頁
HSSFSheet sheet = wb.createSheet(sheetName);
gaugeHead(sheet, cellType, gaugeHead);//表頭
CellValue(sheet, cellType, cellValue);//設置內容
}
FileOutputStream os = new FileOutputStream(resultFile);
//保存工作簿
wb.write(os);
os.flush();
os.close();
// params.put("fileName",fileName);
// return new JsonObject(new Header(0, "success"), params);
return fileName;
}
/*
* 處理分頁的數據
* @page 頁碼
* @arr 存進來的數據
* @sheetRow 多少行一頁
* @ye 共多少頁
* @yuShu 最後一頁多少個
* */
private String[][] setPage(int page,String[][] arr,int sheetRow,int ye,int yuShu){
// System.out.println("page:"+page+",arr:"+arr[0][0]+",sheetRow:"+sheetRow)
int startNum =page*sheetRow;//開始數據
int endNum =(page+1)*sheetRow;//結束數據
int l = 0;
if(page==(ye-1)){//最後一頁
if(yuShu!=0){//不是整除
l = yuShu;
endNum = page*sheetRow+yuShu;
}else{
l = (page+1)*sheetRow-page*sheetRow;
}
}else{
l = (page+1)*sheetRow-page*sheetRow;
}
// System.out.println("長度:"+l+"endNum:"+endNum);
String[][] newArr = new String[l][];
int index = 0;
for(int i=startNum;i<endNum;i++){
int len = arr[i].length;
String[] arrRow = new String[len];
for(int j=0;j<len;j++){
arrRow[j]=arr[i][j];
}
newArr[index]=arrRow;
index++;
}
return newArr;
}
/*
* 刪除文件
* @file 文件
* @time 刪前時間 單位s
* */
private void deleteFile(File file,int time) {
// System.out.println(file.isFile());
time = (time==0)?30:time;
try {
if (!file.isFile()) {//不是文件
// System.out.println(file.listFiles());
File[] tempList =file.listFiles();
for (int i = 0; i < tempList.length; i++) {
if (tempList[i].isFile()) {
if (canDeleteFile(tempList[i],time)) {
delete(tempList[i],"文件");
}
}
if (tempList[i].isDirectory()) {
if (canDeleteFile(tempList[i],time)) {
delete(tempList[i],"文件夾");
}
}
}
}else{
delete(file,"文件");
}
} catch (Exception e) {
System.out.println("刪除文件失敗!"+ e);
}
}
/*
* 文件刪除動作
* */
private void delete(File file,String name){
if (file.delete()) {
System.out.println(name+":" + file.getName() + "刪除成功!");
} else {
System.out.println(name+":" + file.getName() + "刪除失敗!此文件可能正在被使用");
}
}
/*
* 計算文件時間
* @file 文件
* @time 刪前時間 單位s
* */
private boolean canDeleteFile(File file,int time) {
Date date = new Date();
long lastUpTime = file.lastModified() / 1000;
long secondsOfOneMinute = time;
//可刪除文件的時間
long canDelTime = date.getTime() / 1000 - secondsOfOneMinute;
if(lastUpTime <= canDelTime) {
return true;
}
return false;
}
/*
* 創建時間
* 時分秒
* */
private String createTime(){
SimpleDateFormat format=new SimpleDateFormat("yyyyMMddHHmmss");
return format.format(new Date());
}
private int createRandom(){
return (int)(Math.random()*10);
}
/*
* 創建工作簿的樣式
* @wb 工作簿
* */
private CellStyle CellStyle(Workbook wb){
CellStyle cellType = null;
cellType = wb.createCellStyle();
cellType.setBorderTop(HSSFCellStyle.BORDER_THIN);
cellType.setBorderBottom(HSSFCellStyle.BORDER_THIN);
cellType.setBorderLeft(HSSFCellStyle.BORDER_THIN);
cellType.setBorderRight(HSSFCellStyle.BORDER_THIN);
cellType.setVerticalAlignment(HSSFCellStyle.ALIGN_CENTER); // 設置單元格垂直方向對其方式
cellType.setAlignment(HSSFCellStyle.ALIGN_CENTER);//水平
cellType.setFillForegroundColor(HSSFColor.WHITE.index);
cellType.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
return cellType;
}
/*
* 設置導出數據
* @sheet 工作簿的頁
* @cellType 工作簿的樣式
* @cellValue 表頭數組
* */
private void CellValue(HSSFSheet sheet,CellStyle cellType,String[][] cellValue){
HSSFRow row = null;
HSSFCell cell = null;
for (int i=0;i<cellValue.length;i++){
row = sheet.createRow(i+1); // 第二行
int len = cellValue[i].length;
for(int j=0;j<len;j++){
//列
cell = row.createCell(j);
// 單元格樣式
cell.setCellStyle(cellType);
// 單元格的值
cell.setCellValue(cellValue[i][j]);
}
}
}
/*
* 設置導出的表頭
* @sheet 工作簿的頁
* @cellType 工作簿的樣式
* @gaugeHead 表頭數組
* */
private void gaugeHead(HSSFSheet sheet,CellStyle cellType,String[] gaugeHead){
HSSFRow row = null;
HSSFCell cell = null;
row = sheet.createRow(0); // 第一行
for (int i=0;i<gaugeHead.length;i++){
sheet.autoSizeColumn(i, true);
sheet.setColumnWidth(i,gaugeHead[i].getBytes().length*2*256);
// 列
cell = row.createCell(i);
// 單元格樣式
cell.setCellStyle(cellType);
// 單元格的值
cell.setCellValue(gaugeHead[i]);
}
}
/*
* 參數打印調試
* */
private void showParams(RequestWrapper request) {
Map map = new HashMap();
Enumeration paramNames = request.getParameterNames();
while (paramNames.hasMoreElements()) {
String paramName = (String) paramNames.nextElement();
String[] paramValues = request.getParameterValues(paramName);
if (paramValues.length == 1) {
String paramValue = paramValues[0];
if (paramValue.length() != 0) {
map.put(paramName, paramValue);
}
}
}
Set<Map.Entry<String, String>> set = map.entrySet();
System.out.println("------------------------------");
for (Map.Entry entry : set) {
System.out.println(entry.getKey() + ":" + entry.getValue());
}
System.out.println("------------------------------");
}
}
apache poi做的一個到出到導出Excel功能
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.