起步平台实现导出Excel表
本文主要介绍起步平台的.J文件调用action,在action类的方法里采用文件流的方式输出excel表格。其中数据是通过JavaScript得到过滤条件传到action里查询数据而得到的。
- 1.前端JavaScript方法设置
- 2.J文件的实现
- 3.action类的实现
- 4.配置action动作
- 5.导出的excel表
- 注意事项
一.JavaScript的方法实现
首先在起步平台的UI模块下新建一个.w文件,然后拖入相应的按钮,设置按钮的click事件,对应的click事件方法体如下
var mainActivity={};
mainActivity.exportExcel=function(event){
var filterHanding=justep.xbl("FLITERHANDING");
var filterAnd=filterHanding.getFilter("filter1");
var concept=filterHanding.getConceptName();
var url = justep.Request.convertURL("/UI/eample/eample/process/eample/eample/ExportExcel.j");
var parameters = [];//参数
parameters.push( "executor=" +justep.Context.getCurrentPersonID() );//当前执行者
parameters.push( "filter=" +encodeURIComponent(filterAnd));//查询数据的过滤条件,要进行JavaScript转码
parameters.push( "concept="+concept);//查询的概念
url += "&" + parameters.join("&");//打开窗口的URL地址
window.open(url);
};
二.编写.J文件
在相关的UI模块下新建.J文件,命名为/UI/example/example/process/example/example/ExportExcel.j。具体代码如下所示:
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.Date;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.justep.biz.client.Action;
import com.justep.biz.client.ActionEngine;
import com.justep.biz.client.ActionUtils;
import com.justep.biz.client.Callback;
import com.justep.biz.client.StreamCallback;
import com.justep.ui.util.NetUtils;
public class ExportExcel extends com.justep.ui.impl.JProcessorImpl {
@Override
public void execute(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//创建请求的action对象
Action action = new Action();
//添加Process参数 action.setProcess("/eample/eample/process/eample/eampleProcess");
//添加相应的Activity
action.setActivity("mainActivity");
//添加请求的action名称
action.setName("exportExcel");
//获取当前执行者的名称
String executor=request.getParameter("executor");
//添加当前执行者名称的参数
action.setExecutor(executor);
//创建时间戳
Date date=new Date();
//获取过滤的查询条件语句
String filter= request.getParameter("filter");
//获取查询的概念
String concept=request.getParameter("concept");
//传入action的参数 action.setParameter("parameters",filter+"@@@"+concept+"@@@"+date.getTime());
//获取sessionId值
String bSessionID = NetUtils.getBSessionID(request);
//语言目录
String language = NetUtils.getLanguage(request);
//设置返回页面的信息
String contentDisposition = null;
try {
contentDisposition = "attachment;filename=\"" + java.net.URLEncoder.encode("excel导出"+date.getTime()+".xls", "utf-8") + "\";";
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
//设置response的头信息
response.addHeader("Content-disposition", contentDisposition);
//设置编码格式
response.setCharacterEncoding("utf-8");
//创建action回调对象
Callback callback = new StreamCallback(response);
//反射调用actiong
try {
//调用action对象
ActionEngine.invokeAction(action, ActionUtils.XML_CONTENT_TYPE, bSessionID, language, callback);
} catch (Exception e) {
throw new RuntimeException("文件下载错误 : " + e.getMessage());
}
};
}
三.编写.J文件调用的exportExcel方法体
可以上面看到上面调用的action名称为exportExcel,下面编写其实现。
在UI对应的biz目录下新建action文件的类,添加方法体;或者在相应的xxx.action.m里添加相应的方法,方法里包含相应的参数,生成procedure文件,和java类,然后再在生成的java类里的方法体里添加相应的代码实现。
/**
* @author Jeao.H
* @param parameters
* @category 用于导出的excel表的action
* @return InputStream
* @throws Exception
*
*/
public static InputStream exportExcel(String parameters) throws Exception {
//创建输出流
InputStream inputSteam = null;
//创建导出文件路径
String basePath=System.getProperty("user.home")+"\\Excel文件导出\\";
//创建生成文件路径的文件对象
File base=new File(basePath);
//当前文件对象所指的硬盘对象是否存在
if (!base.exists()) {
//如果不存在,创建
base.mkdirs();
}
//创建导出的Excel文件对象
File file=new File(basePath+ File.separator+"经办文件excel导出"+parameters.split("@@@")[2]+".xls");
HSSFWorkbook book = new HSSFWorkbook();
HSSFSheet sheet = book.createSheet();
HSSFRow firstRow = sheet.createRow(0);
//获取经办文数据对象才
Table handingTable=queryFLITERHANDINGTASK(parameters);
//创建第一行的excel元素
HSSFCell[] firstCells = new HSSFCell[11];
//第(1,1)个坐标元素
firstCells[0] = firstRow.createCell(0);
firstCells[0].setCellValue(newHSSFRichTextString("XXX1"));
//第(1,2)个坐标元素
firstCells[1] = firstRow.createCell(1);
firstCells[1].setCellValue(new HSSFRichTextString("XXX2"));
//第(1,3)个坐标元素
firstCells[2] = firstRow.createCell(2);
firstCells[2].setCellValue(new HSSFRichTextString("XXX3"));
//第(1,4)个坐标元素
firstCells[3] = firstRow.createCell(3);
firstCells[3].setCellValue(new HSSFRichTextString("XXX4"));
//第(1,5)个坐标元素
firstCells[4] = firstRow.createCell(4);
firstCells[4].setCellValue(new HSSFRichTextString("XXX5"));
//第(1,6)个坐标元素
firstCells[5] = firstRow.createCell(5);
firstCells[5].setCellValue(new HSSFRichTextString("XXX6"));
//第(1,7)个坐标元素
firstCells[6] = firstRow.createCell(6);
firstCells[6].setCellValue(new HSSFRichTextString("XXX7"));
//第(1,8)个坐标元素
firstCells[7] = firstRow.createCell(7);
firstCells[7].setCellValue(new HSSFRichTextString("XXX8"));
//第(1,9)个坐标元素
firstCells[8] = firstRow.createCell(8);
firstCells[8].setCellValue(new HSSFRichTextString("XXX9"));
//第(1,10)个坐标元素
firstCells[9] = firstRow.createCell(9);
firstCells[9].setCellValue(newHSSFRichTextString("XXX10"));
//第(1,11)个坐标元素
firstCells[10] = firstRow.createCell(10);
firstCells[10].setCellValue(new HSSFRichTextString("XXX11"));
//如果查询的经办文数据不为空,往Excel表里塞入数据
if(handingTable!=null){
if (handingTable.size()>0) {
Iterator<Row>iterator=handingTable.iterator();
Row rows=null;
HSSFRow sheetRow = null;
int n=1;
while (iterator.hasNext()) {
rows =iterator.next();
sheetRow = sheet.createRow(n);
//循环创建第(n+1)行的excel元素
HSSFCell[] Cells = new HSSFCell[11];
//创建第(n+1,1)单元元素
Cells[0] = sheetRow.createCell(0);
Cells[0].setCellValue(new HSSFRichTextString(rows.getString("XXX1")));
//创建第(n+1,2)单元元素
Cells[1] = sheetRow.createCell(1);
Cells[1].setCellValue(new HSSFRichTextString(rows.getString("XXX2")));
//创建第(n+1,3)单元元素
Cells[2] = sheetRow.createCell(2);
Cells[2].setCellValue(new HSSFRichTextString(rows.getString("XXX3")));
//创建第(n+1,4)单元元素
Cells[3] = sheetRow.createCell(3);
Cells[3].setCellValue(new HSSFRichTextString(rows.getString("XXX4")));
//创建第(n+1,5)单元元素
Cells[4] = sheetRow.createCell(4);
Cells[4].setCellValue(new HSSFRichTextString(rows.getString("XXX5")));
//创建第(n+1,6)单元元素
Cells[5] = sheetRow.createCell(5);
Cells[5].setCellValue(new HSSFRichTextString(rows.getString("XXX6")));
//创建第(n+1,7)单元元素
Cells[6] = sheetRow.createCell(6);
Cells[6].setCellValue(new HSSFRichTextString(rows.getString("XXX7")));
//创建第(n+1,8)单元元素
Cells[7] = sheetRow.createCell(7);
Cells[7].setCellValue(new HSSFRichTextString(""+rows.getDate("XXX8")));
//创建第(n+1,9)单元元素
Cells[8] = sheetRow.createCell(8);
if (rows.getDate("XXX9")==null) {
Cells[8].setCellValue(new HSSFRichTextString("无"));
}else{
Cells[8].setCellValue(new HSSFRichTextString(""+rows.getDate("XXX9")));
}
//创建第(n+1,10)单元元素
Cells[9] = sheetRow.createCell(9);
if (rows.getString("XXX10")==null||"".equals(rows.getString("XXX"))) {
Cells[9].setCellValue(new HSSFRichTextString("无"));
}else{
Cells[9].setCellValue(new HSSFRichTextString(rows.getString("XXX10")));
}
//创建第(n+1,11)单元元素
Cells[10] = sheetRow.createCell(10);
if (rows.getString("XXX10")==null||"".equals(rows.getString("XXX11"))) {
Cells[10].setCellValue(new HSSFRichTextString("无"));
}else{
Cells[10].setCellValue(new HSSFRichTextString(rows.getString("XXX11")));
}
n++;
}
}
}
file = new File(basePath + File.separator +"excel导出"+parameters.split("@@@")[2]+".xls");
if (!file.exists()) {
file.createNewFile();
}
OutputStream os = new FileOutputStream(file);
book.write(os);
os.close();
inputSteam = new FileInputStream(basePath + File.separator +"excel导出"+parameters.split("@@@")[2]+".xls");
return inputSteam;
}
四.Excel导出
略