为什么这样写呢,因为这样写方便修改,不会出太多的乱子!直奔主题:
使用的JXL包
结果:
EXCEL样式:
页面样式:
网页页面链接:
location.href = "physical.do?method=InitDownLoad&downLoadPath="+ encodeURIComponent(encodeURIComponent(downLoadPath));
location.href是打开窗口并自动下载,这个很重要
下面是后台代码:
后台代码分了七个类,有6是公共方法为一个类服务,我贴顺序是主要,次要。。。。。
ExcelTool.java
package com.hna.aircrewhealth.excel.utils;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import com.hna.aircrewhealth.po.AviatorHealthCheck;
import com.hna.aircrewhealth.security.po.Staff;
import jxl.Cell;
import jxl.Sheet;
import jxl.Workbook;
import jxl.read.biff.BiffException;
import jxl.write.DateTime;
import jxl.write.Label;
import jxl.write.Number;
import jxl.write.WritableCell;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;
public class ExcelTool {
private static String path = "F:\\luokq\\aircrewhealth\\template\\重大疾病报告单.xls";
private final static String defaultName = "航医跟班检查记录单.xls";
public static String getPath() {
return path;
}
public static void setPath(String p) {
path = p;
}
//这个MAIN方法是个DEMO 可以参照这个写法
public static void main(String[] arg) {
AviatorHealthCheck bean = new AviatorHealthCheck();
bean.setId("3FCB19B440E74DF1BD50CD123A3C087C");
bean.setHealthCheckFlightNum("NB-38-54321");
Staff s = new Staff(); //声明一个实体类
s.setName("王八");
bean.setFollowDoctor(s);
bean.setNoddeid("878787");
bean.setStartTime("1987-02-25");
bean.setEndTime("1987-02-25");
bean.setFollowContext("脸可大饿,打瞌睡,而开发,奥东科咳咳咳什么刺激附近的库斯科到看风景的库斯科,道可服务端");
Map<String, Object> map = new HashMap<String, Object>(); //声明一个map
map.put("AviatorHealthCheck", bean); //将实体放入Map,因为是按Map输出的
/**
*下面这个是循环用的
*/
List<Object> list = new ArrayList<Object>();
for (int i = 0; i < 6; i++) {
bean = new AviatorHealthCheck();
bean.setId("3FCB19B440E74DF1BD50CD123A3C087C"+"----"+i);
bean.setHealthCheckFlightNum("NB-38-54321"+"----"+i);
s = new Staff();
s.setName("王八"+"----"+i);
bean.setFollowDoctor(s);
bean.setNoddeid("878787"+"----"+i);
bean.setStartTime("1987-02-25"+"----"+i);
bean.setEndTime("1987-02-25"+"----"+i);
bean.setFollowContext("脸可大饿,打瞌睡,而开发,奥东科咳咳咳什么刺激附近的库斯科到看风景的库斯科,道可服务端"+"----"+i);
list.add(bean);
}
map.put("listname", list);
map.put("listname2", list);
/**这是循环结束了*/
exportExcel(path, map); //这个最主要,是导出Excel的方法
}
/**
* 导出 Excel
*
* @param template
* Excel模板
* @param datas
* 数据
* @return
*/
public static FileInputStream exportExcel(String template, Map<String, Object> datas) {
FileInputStream fis = null;
InputStream is = FileTool.getFileInputStream(template);
try {
if (is != null) {
Workbook book = Workbook.getWorkbook(is);
File tempFile = File.createTempFile("temp", ".xls");
WritableWorkbook wWorkbook = Workbook.createWorkbook(tempFile, book);
/** 处理【表达式】类型的数据。 **/
generateExpData(book, wWorkbook, datas);
/** 处理【循环结果集】类型的数据。 **/
generateEachData(book, wWorkbook, datas);
wWorkbook.write();
wWorkbook.close();
fis = new FileInputStream(tempFile);
}
} catch (BiffException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (WriteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally{
if(is!=null){
try {
is.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
return fis;
}
public static FileInputStream exportExcel1(String template, Map<String, Object> datas) {
FileInputStream fis = null;
InputStream is = FileTool.getFileInputStream(template);
try {
if (is != null) {
Workbook book = Workbook.getWorkbook(is);
File tempFile = File.createTempFile("temp", ".xls");
WritableWorkbook wWorkbook = Workbook.createWorkbook(tempFile, book);
/** 处理【表达式】类型的数据。 **/
generateExpData1(book, wWorkbook, datas);
/** 处理【循环结果集】类型的数据。 **/
generateEachData(book, wWorkbook, datas);
wWorkbook.write();
wWorkbook.close();
fis = new FileInputStream(tempFile);
}
} catch (BiffException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (WriteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally{
if(is!=null){
try {
is.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
return fis;
}
/**
* 处理【表达式】类型的数据。
*
* @param book
* 【模板】对象
* @param wWorkbook
* 根据模板创建的【新数据文件】对象
*/
private static void generateExpData(Workbook book, WritableWorkbook wWorkbook, Map<String, Object> datas) throws Exception {
List<ExcelCells> expcells = search("${", book);
for (ExcelCells cell : expcells) {
wWorkbook.getSheet(cell.getSheetIndex()).addCell(getValueByExp(cell, datas));
}
}
private static void generateExpData1(Workbook book, WritableWorkbook wWorkbook, Map<String, Object> datas) throws Exception {
List<ExcelCells> expcells = search("${", book);
for (ExcelCells cell : expcells) {
wWorkbook.getSheet(cell.getSheetIndex()).addCell(getValueByExp1(cell, datas));
}
}
/**
* 处理【循环结果集】类型的数据
*
* @param book
* 【模板】对象
* @param wWorkbook
* 根据模板创建的【新数据文件】对象
*/
private static void generateEachData(Workbook book, WritableWorkbook wWorkbook, Map<String, Object> datas) throws Exception {
List<ExcelCells> each = search("each.", book);
/* 先对模板列对象,进行分组。 */
Map<String, List<ExcelCells>> map = new LinkedHashMap<String, List<ExcelCells>>();//
for (ExcelCells cell : each) {
String[] array = cell.getCell().getContents().trim().split("\\.");
if (array.length >= 3) {
List<ExcelCells> list = map.get(array[0] + "." + array[1]);
if (list == null) {
list = new ArrayList<ExcelCells>();
map.put(array[0] + "." + array[1], list);
}
list.add(cell);
}
}
Iterator<String> iterator = map.keySet().iterator();
int insertrow = 0;//标识当前工作表新增了多少条数据。
int lastSheetIndex = -1;//标识上一次工作表的下标。
while (iterator.hasNext()) {
List<ExcelCells> list = map.get(iterator.next());
int sheetIndex = list.get(0).getSheetIndex();// 获取面板下标。
//当切换工作表事 insertrow 清 0
if(lastSheetIndex != -1 && lastSheetIndex != sheetIndex) insertrow = 0;
lastSheetIndex = sheetIndex;
int startRow = list.get(0).getCell().getRow() + insertrow;// 获取开始行下标。
String[] array = list.get(0).getCell().getContents().trim().split("\\.");
if (array.length > 0) {
Object data = datas.get(array[1]);
if (data != null && !data.getClass().getName().equals(List.class.getName()) && !data.getClass().getName().equals(ArrayList.class.getName())) {
throw new Exception("数据:" + array[1] + "不是一个集合类!");
}
List<Object> rowsData = (List<Object>) data;
// 有数据时。
if (rowsData != null && rowsData.size() > 0) {
for (int i = 0; i < rowsData.size(); i++) {
/* 第一行数据,覆盖模板位置,所以不需要创建新行 */
if (i == 0) {
for (ExcelCells cell : list) {
wWorkbook.getSheet(sheetIndex).addCell(getValueByEach(cell, rowsData.get(i), startRow, cell.getCell().getColumn()));
}
continue;
}
/* 创建新行 */
wWorkbook.getSheet(sheetIndex).insertRow(startRow + i);
for (ExcelCells cell : list) {
wWorkbook.getSheet(sheetIndex).addCell(getValueByEach(cell, rowsData.get(i), startRow + i, cell.getCell().getColumn()));
}
insertrow++;
}
}
// 无数据时。
else {
for (ExcelCells cell : list) {
wWorkbook.getSheet(sheetIndex).addCell(getValueByEach(cell, null, startRow, cell.getCell().getColumn()));
}
}
}
}
}
/**
* 根据【表达式】从数据集中获取相应数据。
*
* @param exp
* 表达式
* @param datas
* 数据集
* @return
*/
public static WritableCell getValueByExp(ExcelCells cells, Map<String, Object> datas) {
WritableCell writableCell = null;
List<Object> values = new ArrayList<Object>();
List<String> exps = cells.getExps();// 获取表达式集合。
String old_c = cells.getCell().getContents();// 模板原内容。
for (String exp : exps) {
String[] names = exp.replace("${", "").replace("}", "").split("\\.");
Object object = null;
for (String name : names) {
if (object == null)
object = ObjectCustomUtil.getValueByFieldName(name, datas);
else
object = ObjectCustomUtil.getValueByFieldName(name, object);
}
// ${asd.sdfa}
if (!old_c.isEmpty()) {
while (old_c.indexOf(exp) != -1)
old_c = old_c.replace(exp, object.toString());
}
}
writableCell = getWritableCellByObject(cells.getCell().getRow(), cells.getCell().getColumn(), old_c);
writableCell.setCellFormat(cells.getCell().getCellFormat());
return writableCell;
}
/*
* 这个方法是专门用于驻外机组环境卫生检查
*/
public static WritableCell getValueByExp1(ExcelCells cells, Map<String, Object> datas) {
WritableCell writableCell = null;
List<Object> values = new ArrayList<Object>();
List<String> exps = cells.getExps();// 获取表达式集合。
String old_c = cells.getCell().getContents();// 模板原内容。
for (String exp : exps) {
String[] names = exp.replace("${", "").replace("}", "").split("\\.");
Object object = null;
String checkContentValue = "";
for (String name : names) {
if (object == null){
object = ObjectCustomUtil.getValueByFieldName(name, datas);
}else{
object = ObjectCustomUtil.getValueByFieldName(name, object);
}
if(name.indexOf("checkContent")!=-1){
if("0".equals(object.toString())){
checkContentValue = "符合";
}else if("1".equals(object.toString())){
checkContentValue = "不符合";
}else{
checkContentValue = "未检查";
}
}else if(name.indexOf("checkTime")!=-1){
Date date = (Date)object;
checkContentValue = date.getYear()+"年"+ (date.getMonth()+1) +"月" +date.getDate();
}
}
if (!old_c.isEmpty()) {
while (old_c.indexOf(exp) != -1){
if("".equals(checkContentValue)){
old_c = old_c.replace(exp, object.toString());
}else{
old_c = old_c.replace(exp, checkContentValue);
}
}
}
}
writableCell = getWritableCellByObject(cells.getCell().getRow(), cells.getCell().getColumn(), old_c);
writableCell.setCellFormat(cells.getCell().getCellFormat());
return writableCell;
}
/**
* 根据【Each表达式】从数据集中获取相应数据。
*
* @param exp
* 表达式
* @param datas
* 数据集
* @return
*/
public static WritableCell getValueByEach(ExcelCells cells, Object datas, int rows, int column) {
WritableCell writableCell = null;
if (datas != null) {
List<Object> values = new ArrayList<Object>();
String[] exps = cells.getCell().getContents().trim().split("\\.");// 获取表达式集合。
Object object = null;
for (int i = 2; i < exps.length; i++) {
if (object == null)
object = ObjectCustomUtil.getValueByFieldName(exps[i], datas);
else
object = ObjectCustomUtil.getValueByFieldName(exps[i], object);
}
writableCell = getWritableCellByObject(rows, column, object);
} else {
writableCell = getWritableCellByObject(rows, column, null);
}
writableCell.setCellFormat(cells.getCell().getCellFormat());
return writableCell;
}
/**
* 【未实现】
*
* @param beginRow
* @param beginColumn
* @param heads
* @param result
* @return
*/
public static synchronized String customExportExcel(int beginRow, int beginColumn, Map heads, List result) {
return null;
}
/**
* 根据提供的【列标】、【行标】、【对象值】构建一个Excel列对象。
*
* @param beginRow
* 【行标】
* @param beginColumn
* 【列标】
* @param obj
* 【对象值】
* @return
*/
public static WritableCell getWritableCellByObject(int beginRow, int beginColumn, Object obj) {
WritableCell cell = null;
if (obj == null)
return new Label(beginColumn, beginRow, "");
if (obj.getClass().getName().equals(String.class.getName())) {
cell = new Label(beginColumn, beginRow, obj.toString());
} else if (obj.getClass().getName().equals(int.class.getName()) || obj.getClass().getName().equals(Integer.class.getName())) {
// jxl.write.Number
cell = new Number(beginColumn, beginRow, Integer.parseInt(obj.toString()));
} else if (obj.getClass().getName().equals(float.class.getName()) || obj.getClass().getName().equals(Float.class.getName())) {
cell = new Number(beginColumn, beginRow, Float.parseFloat(obj.toString()));
} else if (obj.getClass().getName().equals(double.class.getName()) || obj.getClass().getName().equals(Double.class.getName())) {
cell = new Number(beginColumn, beginRow, Double.parseDouble(obj.toString()));
} else if (obj.getClass().getName().equals(long.class.getName()) || obj.getClass().getName().equals(Long.class.getName())) {
cell = new Number(beginColumn, beginRow, Long.parseLong(obj.toString()));
} else if (obj.getClass().getName().equals(Date.class.getName())) {
cell = new DateTime(beginColumn, beginRow, (Date)obj);
} else {
cell = new Label(beginColumn, beginRow, obj.toString());
}
return cell;
}
/**
* 查找某字符第一次出现的位置。
*
* @param text
* 【文本】
* @param book
* 【Excel对象】
* @return
*/
public static ExcelCells searchFirstText(String text, Workbook book) {
ExcelCells Rcell = null;
Sheet[] sheets = book.getSheets();
if (sheets != null) {
int sheetIndex = 0;
for (Sheet sheet : sheets) {
if (sheet != null) {
int rows = sheet.getRows();
if (rows > 0) {
for (int i = 0; i < rows; i++) {
Cell[] cells = sheet.getRow(i);
if (cells != null) {
for (Cell cell : cells) {
if (cell != null && !StringUtils.isNull(cell.getContents())) {
String contents = cell.getContents();
if (contents.equals(text))
return new ExcelCells(sheet, cell, sheetIndex);
}
}
}
}
}
}
sheetIndex++;
}
}
return Rcell;
}
/**
* 查找包含某字符所有的列对象。
*
* @param text
* 【文本】
* @param book
* 【Excel对象】
* @return
*/
public static List<ExcelCells> search(String text, Workbook book) {
List<ExcelCells> rcells = new ArrayList<ExcelCells>();
Sheet[] sheets = book.getSheets();
if (sheets != null)
for (Sheet sheet : sheets) {
if (sheet != null) {
int rows = sheet.getRows();
if (rows > 0) {
for (int i = 0; i < rows; i++) {
Cell[] cells = sheet.getRow(i);
if (cells != null) {
for (Cell cell : cells) {
if (cell != null && !StringUtils.isNull(cell.getContents())) {
String contents = cell.getContents();
if (contents.indexOf(text) != -1)
rcells.add(new ExcelCells(sheet, cell));
}
}
}
}
}
}
}
return rcells;
}
}
DateTool.java
package com.hna.aircrewhealth.excel.utils;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
public class DateTool {
public static Date parse(String string) {
try {
DateFormat format = DateFormat.getDateInstance();
return format.parse(string);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
/**
* 获取当前日期时间
*
* @return
*/
public static String getTodayTime() {
Date sellTime = new Date();
Calendar cal = Calendar.getInstance();
cal.setTime(sellTime);
System.out.println(cal.toString());
DateFormat format = DateFormat.getDateInstance();
System.out.println(format.format(sellTime));
return null;
}
/**
* 获取当天日期(短日期)
*
* @return
*/
public static String getTodayDate() {
Date sellTime = new Date();
SimpleDateFormat dateformat1 = new SimpleDateFormat("yyyy-MM-dd");
return dateformat1.format(sellTime);
}
public static String getMonth_day(Date date, String str) {
if (str == null)
str = "/";
Calendar cal = Calendar.getInstance();
cal.setTime(date);
return (cal.get(Calendar.MONTH) + 1) + str + cal.get(Calendar.DAY_OF_MONTH);
}
/**
* 获取当天日期(长日期)
*
* @return
*/
public static String getTodayDateLong() {
Date sellTime = new Date();
SimpleDateFormat dateformat1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
return dateformat1.format(sellTime);
}
/**
* 获取当前年份
*
* @author zl 2011-10-24
* @return
*/
public static int currentYear() {
Calendar cal = Calendar.getInstance();
int year = cal.get(Calendar.YEAR);
// int month = cal.get(Calendar.MONTH )+1;
// System.out.println(year + " 年 " + month + " 月");
return year;
}
/**
* 将日期格式化
*
* @param date
* @param arg
* @return
*/
public static String format(Date date, String arg) {
if (date == null)
return null;
if (arg == null)
arg = "yyyy-MM-dd HH:mm:ss";
SimpleDateFormat sdf = new SimpleDateFormat(arg);
return sdf.format(date);
}
public static Date stringToDate(String str) throws ParseException {
if (str.split("-").length == 2) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");
return sdf.parse(str);
} else if(str.split("-").length == 1){
SimpleDateFormat sdf = new SimpleDateFormat("yyyy");
return sdf.parse(str);
} else{
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
return sdf.parse(str);
}
}
//计算俩个日期之间有多少天
public static int countDays(String begin,String end){
int days = 0;
DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
Calendar c_b = Calendar.getInstance();
Calendar c_e = Calendar.getInstance();
try{
c_b.setTime(df.parse(begin));
c_e.setTime(df.parse(end));
while(c_b.before(c_e)){
days++;
c_b.add(Calendar.DAY_OF_YEAR, 1);
}
}catch(ParseException pe){
System.out.println("日期格式必须为:yyyy-MM-dd;如:2010-4-4.");
}
return days;
}
//计算当前距离当前日期之后的某个日期
public static String addCalendarDay(Date calDate, long addDate) {
long time = calDate.getTime();
addDate = addDate * 24 * 60 * 60 * 1000;
time += addDate;
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
return dateFormat.format(new Date(time));
}
public static Date addDay(Date calDate, long addDate) {
long time = calDate.getTime();
addDate = addDate * 24 * 60 * 60 * 1000;
time += addDate;
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
return new Date(time);
}
//计算距离执行日期提前多少天的日期
public static Date reduceDay(Date calDate, long addDate) {
long time = calDate.getTime();
addDate = addDate * 24 * 60 * 60 * 1000;
time -= addDate;
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
return new Date(time);
}
public static void main(String[] args) {
// TODO Auto-generated method stub
// DateTool.getTodayTime();
// DateTool.currentYear();
try {
//System.out.println(DateTool.stringToDate("2001-10-10"));
Date date=new Date();
System.out.println(DateTool.addCalendarDay(date,1));
//System.out.println(DateTool.countDays("2012-4-10","2012-4-24"));
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
日期类型的转换哈
ExcelCells.java
package com.hna.aircrewhealth.excel.utils;
import java.util.ArrayList;
import java.util.List;
import jxl.Cell;
import jxl.Sheet;
public class ExcelCells {
public final static String regex = "\\$\\{[^\\}]+\\}";
private Sheet sheet ;
private Cell cell ;
private int sheetIndex;
public ExcelCells(){}
public ExcelCells(Sheet sheet,Cell cell){
this.sheet = sheet;
this.cell = cell;
}
public ExcelCells(Sheet sheet,Cell cell,int sheetIndex){
this.sheet = sheet;
this.cell = cell;
this.sheetIndex = sheetIndex;
}
public Sheet getSheet() {
return sheet;
}
public void setSheet(Sheet sheet) {
this.sheet = sheet;
}
public Cell getCell() {
return cell;
}
public void setCell(Cell cell) {
this.cell = cell;
}
public int getSheetIndex() {
return sheetIndex;
}
public void setSheetIndex(int sheetIndex) {
this.sheetIndex = sheetIndex;
}
/**
* 获取当前列当中【表达式】集合
* @return
*/
public List<String> getExps(){
List<String> list = new ArrayList<String>();
if(this.cell!=null){
String contents = this.cell.getContents();
if(!contents.isEmpty()){
list = StringUtils.search(this.regex, contents);
}
}
return list;
}
public String getFomatContext(){
String contents = this.cell.getContents();
//while(contents.)
return contents;
}
}
ExcelTemplate.java
package com.hna.aircrewhealth.excel.utils;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class ExcelTemplate {
private List heads = new ArrayList();//模型表头
private List eachs = new ArrayList();//模型表数据
private List beans = new ArrayList();//一般的数据集合
}
FileTool.java
package com.hna.aircrewhealth.excel.utils;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URL;
import javax.servlet.http.HttpServletResponse;
public class FileTool {
public static File createfile(String path) {
File file = new File(path);
return file;
}
public static boolean isExist(String path) {
File file = new File(path);
return file.exists();
}
public static InputStream getFileInputStream(String path) {
try {
if (isExist(path)) {
InputStream is = new FileInputStream(path);
return is;
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
public static void downLoad(String filePath, HttpServletResponse response, boolean isOnLine, String newname) throws Exception {
File f = new File(filePath);
if (!f.exists()) {
response.sendError(404, "File not found!");
return;
}
BufferedInputStream br = new BufferedInputStream(new FileInputStream(f));
byte[] buf = new byte[1024];
int len = 0;
response.reset(); // 非常重要
if (isOnLine) { // 在线打开方式
URL u = new URL("file:///" + filePath);
response.setContentType(u.openConnection().getContentType());
response.setHeader("Content-Disposition", "inline; filename=" + new String(newname.getBytes("gb2312"), "iso8859-1"));
// 文件名应该编码成UTF-8
} else { // 纯下载方式
response.setContentType("application/x-msdownload");
response.setHeader("Content-Disposition", "attachment; filename=" + new String(newname.getBytes("gb2312"), "iso8859-1"));
}
OutputStream out = response.getOutputStream();
while ((len = br.read(buf)) > 0)
out.write(buf, 0, len);
br.close();
out.close();
}
public static void downLoad(InputStream f, HttpServletResponse response, String newname) throws Exception {
if (f == null) {
response.sendError(404, "File not found!");
return;
}
BufferedInputStream br = new BufferedInputStream(f);
byte[] buf = new byte[1024];
int len = 0;
response.reset(); // 非常重要
// 纯下载方式
response.setContentType("application/x-msdownload");
response.setHeader("Content-Disposition", "attachment; filename=" + newname);
OutputStream out = response.getOutputStream();
while ((len = br.read(buf)) > 0)
out.write(buf, 0, len);
br.close();
out.close();
}
/**
* 在线看文件
*
* @param filePath
* @param fileType
* @param response
* @param newname
* @throws Exception
*/
public static void viewfile(String filePath, String ContentType, HttpServletResponse response, String newname) throws Exception {
File f = new File(filePath);
if (!f.exists()) {
response.sendError(404, "File not found!");
return;
}
BufferedInputStream br = new BufferedInputStream(new FileInputStream(f));
byte[] buf = new byte[1024];
int len = 0;
response.reset(); // 非常重要
// 在线打开方式
URL u = new URL("file:///" + filePath);
// response.setContentType(u.openConnection().getContentType());
response.setContentType(ContentType);
// response.setContentType("application/vnd.ms-excel; charset=gb2312");
response.setHeader("Content-Disposition", "inline; filename=" + new String(newname.getBytes("gb2312"), "iso8859-1"));
OutputStream out = response.getOutputStream();
while ((len = br.read(buf)) > 0)
out.write(buf, 0, len);
br.close();
out.close();
}
/**
* 把文本编码为Html代码
*
* @param target
* @return 编码后的字符串
*/
public static String htmEncode(String target) {
StringBuffer stringbuffer = new StringBuffer();
int j = target.length();
for (int i = 0; i < j; i++) {
char c = target.charAt(i);
switch (c) {
case 60:
stringbuffer.append("<");
break;
case 62:
stringbuffer.append(">");
break;
case 38:
stringbuffer.append("&");
break;
case 34:
stringbuffer.append(""");
break;
case 169:
stringbuffer.append("©");
break;
case 174:
stringbuffer.append("®");
break;
case 165:
stringbuffer.append("¥");
break;
case 8364:
stringbuffer.append("€");
break;
case 8482:
stringbuffer.append("™");
break;
case 13:
if (i < j - 1 && target.charAt(i + 1) == 10) {
stringbuffer.append("<br>");
i++;
}
break;
case 32:
if (i < j - 1 && target.charAt(i + 1) == ' ') {
stringbuffer.append(" ");
i++;
break;
}
default:
stringbuffer.append(c);
break;
}
}
return new String(stringbuffer.toString());
}
public static void main(String[] arg) {
File file = new File("F:\\js\\json_parse.js");
BakFile(file);
}
/**
* 备份一个文件
*
* @param file
*/
public static void BakFile(File file) {
if (file.isFile()) {
String filename = file.getName();
String p = file.getParent();
String newfilename = p + "\\bak." + filename;
File bakfile = createfile(newfilename);
CopyFile(file, bakfile);
}
}
public static void CopyFile(File oldFile, File newFile) {
FileInputStream input = null;
FileOutputStream output = null;
try {
input = new FileInputStream(oldFile);
output = new FileOutputStream(newFile);
byte[] buffer = new byte[4096];
int n = 0;
while (-1 != (n = input.read(buffer))) {
output.write(buffer, 0, n);
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
try {
if (input != null) {
input.close();
}
if (output != null) {
output.close();
}
} catch (IOException ioe) {
// ignore
}
}
}
public static void CompressJS(File file,String newname){
// Runtime.getRuntime().exec(commandStr)
}
}
ObjectCustomUtil.java
package com.hna.aircrewhealth.excel.utils;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class ObjectCustomUtil {
public static Field[] getAllFields(Class cl) {
Field[] field = cl == null ? null : cl.getDeclaredFields();
return field;
}
public static Field getFieldByName(Class cl, String name) throws Exception {
if (name == null || name.equals(""))
return null;
Field field = cl == null ? null : cl.getDeclaredField(name);
return field;
}
/**
* 根据属性对象获取属性值
*
* @param field
* @param obj
* @return
*/
public static Object getValueByField(Field field, Object obj) {
Object result = null;
try {
String name = field.getName();
String stringLetter = name.substring(0, 1).toUpperCase();
String getName = "get" + stringLetter + name.substring(1);
Method getmethod0 = obj.getClass().getMethod(getName);
result = getmethod0.invoke(obj);
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchMethodException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return result;
}
/**
* 根据属性名称获取属性值
*
* @param name
* @param obj
* @return
*/
public static Object getValueByFieldName(String name, Object obj) {
Object result = null;
try {
if (obj.getClass().getName().equals(Map.class.getName()) || obj.getClass().getName().equals(HashMap.class.getName())) {
return ((Map) obj).get(name);
}
String stringLetter = name.substring(0, 1).toUpperCase();
String getName = "get" + stringLetter + name.substring(1);
Method getmethod0 = obj.getClass().getMethod(getName);
result = getmethod0.invoke(obj);
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchMethodException e) {
// TODO Auto-generated catch block
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return result;
}
/**
* 根据属性,给对象赋值
*
* @param name
* @param obj
* @return
*/
public static Object setValueByField(Field field, Object bean, Object value) {
Object result = null;
try {
String name = field.getName();
String stringLetter = name.substring(0, 1).toUpperCase();
String setName = "set" + stringLetter + name.substring(1);
Method method = bean.getClass().getMethod(setName, field.getType());
if (method != null) {
if (value.getClass().getName().equals("org.json.JSONObject$Null")) {
} else if (field.getType().getName().equals(String.class.getName())) {
method.invoke(bean, value.toString());
} else if (field.getType().getName().equals(int.class.getName()) || field.getType().getName().equals(Integer.class.getName())) {
method.invoke(bean, Integer.parseInt(StringUtils.isNull(value.toString()) ? "0" : value.toString()));
} else if (field.getType().getName().equals(float.class.getName()) || field.getType().getName().equals(Float.class.getName())) {
method.invoke(bean, Float.parseFloat(StringUtils.isNull(value.toString()) ? "0" : value.toString()));
} else if (field.getType().getName().equals(double.class.getName()) || field.getType().getName().equals(Double.class.getName())) {
method.invoke(bean, Double.parseDouble(StringUtils.isNull(value.toString()) ? "0" : value.toString()));
} else if (field.getType().getName().equals(long.class.getName()) || field.getType().getName().equals(Long.class.getName())) {
method.invoke(bean, Long.parseLong(StringUtils.isNull(value.toString()) ? "0" : value.toString()));
} else if (field.getType().getName().equals(Date.class.getName())) {
method.invoke(bean, StringUtils.isNull(value.toString()) ? null : DateTool.parse(value.toString()));
} else if (field.getType().getName().equals(BigDecimal.class.getName())) {
method.invoke(bean, StringUtils.isNull(value.toString()) ? null : BigDecimal.valueOf(Double.parseDouble(value.toString())));
} else {
method.invoke(bean, value);
}
}
return bean;
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchMethodException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return result;
}
public static String getSimpleNameByClassName(String classname) {
try {
return Class.forName(classname).getSimpleName();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
public static void main(String[] arg) {
// Field[] fields = getAllFields(Aircrafttype.class);
//
// for (Field f : fields) {
// System.out.println("name=\"" + f.getName() + "\"");
// }
// Aircrafttype arg0 = new Aircrafttype();
// arg0.setAircraftModel("aaa");
// arg0.setAircrafttypeId(1234);
//
// Aircrafttype arg1 = new Aircrafttype();
// // arg1.setAircraftModel("aaa");
// arg1.setAircrafttypeId(1235);
// // arg0.getAircraftSize()
// copyNotNull(arg0, arg1);
// try {
// // System.out.println(ObjectPropertyCompare(arg0, arg1));
// } catch (Exception e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
}
/**
* 对象属性比较,确保两对象属于同一类型
*
* @param arg0
* @param arg1
* @return
*/
public static List<String> ObjectPropertyCompare(Object arg0, Object arg1) throws Exception {
List<String> result = null;
if (!arg0.getClass().getName().equals(arg1.getClass().getName())) {
throw new Exception("两个对象不是同一类型,没法比较");
}
Field[] fields = getAllFields(arg0.getClass());
if (fields != null && fields.length > 0)
result = new ArrayList<String>();
for (Field f : fields) {
String name = f.getName();
String stringLetter = name.substring(0, 1).toUpperCase();
String getName = "get" + stringLetter + name.substring(1);
Method method = arg0.getClass().getMethod(getName);
Object value0 = method.invoke(arg0);
Object value1 = method.invoke(arg1);
if (value0 == null && value1 == null) {
} else if (value0 == null && value1 != null) {
if (value1.getClass().getName().equals(String.class.getName())) {
if (StringUtils.isNull(value1.toString())) {
continue;
}
}
result.add(name);
} else if (value0 != null && value1 == null) {
if (value0.getClass().getName().equals(String.class.getName())) {
if (StringUtils.isNull(value0.toString())) {
continue;
}
}
result.add(name);
} else if (!value0.equals(value1))
result.add(name);
}
return result;
}
/**
* 对象属性复制(只为为空的属性复制)
*
* @param arg0
* 被复制对象
* @param arg1
* 复制原对象
* @return
*/
public static Object copyNotNull(Object arg0, Object arg1) {
// arg1.getClass().getDeclaredFields();
Field[] fields = getAllFields(arg1.getClass());
try {
for (Field f : fields) {
String typename = f.getType().getName();
Field f0 = null;
try {
f0 = arg0.getClass().getDeclaredField(f.getName());
} catch (NoSuchFieldException e) {
continue;
}
String name = f.getName();
String stringLetter = name.substring(0, 1).toUpperCase();
String getName = "get" + stringLetter + name.substring(1);
String setName = "set" + stringLetter + name.substring(1);
try {
Method setmethod1 = arg1.getClass().getMethod(setName, f.getType());
Method getmethod1 = arg1.getClass().getMethod(getName);
Method getmethod0 = arg0.getClass().getMethod(getName);
if (typename.equals(int.class.getName()) || typename.equals(Integer.class.getName()) || typename.equals(float.class.getName()) || typename.equals(Float.class.getName()) || typename.equals(double.class.getName()) || typename.equals(Double.class.getName())) {
if (getmethod1.invoke(arg1).equals(0) && f0 != null && f.getType().getName().equals(f0.getType().getName())) {
setmethod1.invoke(arg1, getmethod0.invoke(arg0));
}
} else if (getmethod1.invoke(arg1) == null) {
if (f0 != null && f.getType().getName().equals(f0.getType().getName())) {
setmethod1.invoke(arg1, getmethod0.invoke(arg0));
}
}
} catch (NoSuchMethodException e) {
// TODO Auto-generated catch block
// e.printStackTrace();
}
}
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// System.out.println("");
return arg1;
}
}
StringUtils.java
package com.hna.aircrewhealth.excel.utils;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class StringUtils {
/**
* 查找一个字符串在数组中的索引值
*
* @param data
* @param string
* @return
*/
public static int searchIndex(String[] data, String string) {
if (data == null || data.length == 0)
return -1;
for (int i = 0; i < data.length; i++) {
if ((data[i] != null && data[i].equals(string)) || (data[i] == null && string == null)) {
return i;
}
}
return -1;
}
public static boolean isNull(String string) {
if (string == null || string.equals(""))
return true;
return false;
}
public static String arrayToString(List<String> list, String split) {
if (list == null || list.size() == 0)
return null;
String result = "";
if (isNull(split))
split = ",";
for (String str : list) {
result += str + split;
}
result = result.substring(0, result.length() - 1);
return result;
}
public static String arrayToString(String[] list, String split) {
if (list == null || list.length == 0)
return null;
String result = "";
if (isNull(split))
split = ",";
for (String str : list) {
result += str + split;
}
result = result.substring(0, result.length() - 1);
return result;
}
public static String getFileName(String name) {
if (isNull(name))
return null;
if (name.lastIndexOf("\\") != -1) {
name = name.substring(name.lastIndexOf("\\") + 1, name.length());
} else if (name.lastIndexOf("/") != -1) {
name = name.substring(name.lastIndexOf("/") + 1, name.length());
}
return name;
}
public static String getExtensionName(String name) {
if (isNull(name))
return null;
if (name.lastIndexOf(".") != -1) {
return name.substring(name.lastIndexOf(".") + 1);
}
return "";
}
public static void main(String[] arg0) {
String a = "${bean.aid} sdfad ${xx.yy}sfdd";
String regex = "";
search(regex, a);
}
public static String getUID() {
return UUID.randomUUID().toString().replaceAll("-", "");
}
/**
* 查找【正则表达式】描述的内容。
* @param regex
* @param string
* @return
*/
public static List<String> search(String regex, String string) {
List<String> list = new ArrayList<String>();
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(string);
while (m.find()) {
String g = m.group();
list.add(g);
}
return list;
}
}
代码贴完了,至于下载
下面是我自己写的可以参照 一下,Excel生成并下载
ccAction.java 方法
@RequestMapping(params = "method=InitExport", method = RequestMethod.GET)
public @ResponseBody String InitExport(HttpServletRequest request,HttpServletResponse response) throws UnsupportedEncodingException, JSONException{
String parameter=URLDecoder.decode(request.getParameter("parameter"),"UTF-8");
JSONObject jsonObj=new JSONObject(parameter);
Map<String,Object> map=new HashMap<String,Object>();
String path = request.getSession().getServletContext().getRealPath("/")+ "ExcelTemplate" +"\\招飞初检.xls";
Physical physical=new Physical();
physical.setCompany(jsonObj.get("company").toString());
physical.setDateTimes(jsonObj.get("dateTime").toString());
// String area= hnabaseCityBO.findoneById(jsonObj.get("area").toString()).getBaseChn();
physical.setArea(jsonObj.optString("area"));//
physical.setRealNumber(jsonObj.get("realNumber").toString());
physical.setPassNumber(jsonObj.get("passNumber").toString());
physical.setEndYield(jsonObj.get("endYield").toString());
physical.setDoctors(jsonObj.get("doctorInit").toString());//
physical.setComment(jsonObj.get("comment").toString());
map.put("physical", physical);
// ExcelTool.exportExcel(path, map);
OutputStream out=null;
BufferedOutputStream bos=null;
BufferedInputStream bis=null;
InputStream in=null;
try{
in=ExcelTool.exportExcel(path, map);
bis=new BufferedInputStream(in);
response.setHeader("Content-Disposition", "attachment;filename=" + java.net.URLEncoder.encode("招飞初检.xls", "UTF-8"));//设置头文件 可参照
byte[] data=new byte[1024];
int bytes=0;
out=response.getOutputStream();
bos=new BufferedOutputStream(out);
while((bytes=bis.read(data, 0, data.length))!=-1){
bos.write(data,0,bytes); //写出文件流
}
bos.flush();
}catch(Exception e){
e.printStackTrace();
}finally{
try {
bos.close();
out.close();
bis.close();
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return "success";
}
其中有一个循环的,下面代码也给出来吧
each代表循环
代码完毕!