package com.automic.monitor.dailyWork.toExcel.amount.action;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import net.sf.json.JSONObject;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import com.automic.monitor.remote.DataAmountVO;
import com.automic.monitor.power.util.Powers;
import com.automic.monitor.remote.busi.hisAmountData.* ;
import com.automic.monitor.dailyWork.toExcel.amount.busi.ToExcelAmountBusi;
import com.automic.monitor.dailyWork.toExcel.pvo.BackVO;
import com.automic.monitor.dailyWork.toExcel.util.ExcelUtil;
import com.automic.monitor.global.*;
import com.automic.monitor.util.CheckPowerAndSession;
import com.automic.monitor.util.Config;
public class ExcelAmountAction extends PagerAction {
@SuppressWarnings("deprecation")
public ActionForward execute(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response) {
try {
response.setContentType("text/xml;charset=GBK");
response.setCharacterEncoding("GBK");
PrintWriter out = response.getWriter();
// ////////////////////
String fountId = request.getParameter("fountId");
String gprsId = request.getParameter("gprsId");
String typeId = request.getParameter("typeId");
String startDt = request.getParameter("startDt");
String startHou = request.getParameter("startHou");
String endDt = request.getParameter("endDt");
String endHou = request.getParameter("endHou");
String reName = request.getParameter("reName");
reName = new String(reName.getBytes("ISO8859-1"),"utf-8");
PagerQuery query = createQuery(fountId,gprsId,typeId,startDt,startHou,endDt,endHou);
// 得到纪录总数目
ArrayList<DataAmountVO> li = this.queryItems(query,0,0);
//////start to excel//////
String message = "";
String savePath = Config.getConfig(Config.amountExcelDir);
String excelName = null;
if(reName != null && !reName.equals("")){
excelName = reName + ".xls";
}else{
excelName = this.buildExcelName(startDt,startHou,endDt,endHou);
}
ExcelUtil exUtil = ExcelUtil.getInstance();
BackVO bvo = new BackVO();
if(exUtil.isExist(savePath, excelName)){//如果此文件名已经存在,提示
message = excelName + "已经存在!!!";
bvo.setMessage(message);
bvo.setFiles(exUtil.getFiles(savePath));
JSONObject jobj = new JSONObject();
jobj.put("jobj", bvo);
out.print(jobj.toString());
out.flush();
out.close();
return null;
}
/////////
try{
ArrayList<String> headerLis = new ArrayList<String>(0);//头栏目内容
headerLis.add("矿泉名称");
headerLis.add("工程名称");
headerLis.add("瞬时流量(m3/d)");
headerLis.add("累计流量(m3)");
headerLis.add("温度(℃)");
headerLis.add("水位(mm)");
headerLis.add("电源工作状态");
headerLis.add("蓄电池工作状态");
headerLis.add("测控器工作模式");
headerLis.add("上报时间");
ArrayList<ArrayList<Object>> contentLlis = new ArrayList<ArrayList<Object>>(0);//excel文件内容
for(int i = 0; li != null && i < li.size();i++){
DataAmountVO vo = li.get(i);
ArrayList<Object> temp = new ArrayList<Object>(0);
temp.add(vo.getFountName());
temp.add(vo.getProjectName());
temp.add(vo.getInstantFlux());
temp.add(vo.getAccumuFlux());
temp.add(vo.getWaterRemain());
temp.add(vo.getWaterLevel());
temp.add(vo.getPowerStatus().replaceAll("<font color='#FF0000'>","").replaceAll("</font>", ""));
temp.add(vo.getStorePowerVoltStatus().replaceAll("<font color='#FF0000'>","").replaceAll("</font>", ""));
temp.add(vo.getMeterModel().replaceAll("<font color='#FF0000'>","").replaceAll("</font>", ""));
temp.add(vo.getDateTime());
contentLlis.add(temp);
}
exUtil.createBookSheet(savePath + excelName, "sheet1", 0);//构建excel模板
exUtil.buildHeader(headerLis);//构建excel标题栏
exUtil.buildContent(contentLlis);
exUtil.closed();
message = "导出" + excelName + "成功!!!";
}catch(Exception e){
e.printStackTrace();
message = "导出文件时出错!!!";
}finally{;}
// 保存,返回
bvo.setMessage(message);
bvo.setFiles(exUtil.getFiles(savePath));
JSONObject jobj = new JSONObject();
jobj.put("jobj", bvo);
out.print(jobj.toString());
out.flush();
out.close();
return null;
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
return null;
}
/**
*
* @param form
* @return
*/
public PagerQuery createQuery(String fountId,String gprsId,String typeId,String startDt,String startHou
,String endDt,String endHou) {
PagerQuery query = new PagerQuery();
query.set("fountId" , fountId) ;
query.set("typeId" , typeId) ;
query.set("gprsId" , gprsId) ;
query.set("startDt" , startDt) ;
query.set("startHou" , startHou) ;
query.set("endDt" , endDt) ;
query.set("endHou" , endHou) ;
return query ;
}
@Override
public PagerQuery createQuery(PagerForm form) {
// TODO Auto-generated method stub
return null;
}
/**
* @param form
* @return构建excel文档名称
*/
private String buildExcelName(String startDt,String startHou,String endDt,String endHou){
String name = "水量(" + startDt + startHou + "-" + endDt + endHou+ ")";
name += ".xls";
return name;
}
/**
*
* @param form
* @return
*/
public PagerQuery createQuery( PagerForm form , String userRoleId) {
return null ;
}
/**
* 得到总数
* @param query
* @return
*/
public int getItemTotal(PagerQuery query) {
return new HisDataSearch().getTotalHisData(query) ;
}
/**
* 查询
*/
public ArrayList<DataAmountVO> queryItems(PagerQuery query,int start,int count) {
return new ToExcelAmountBusi().getHisdataAmount(query);
}
/**
* 把不同矿泉分组
*
* @return
*/
private ArrayList<ArrayList<DataAmountVO>> cutListByFount(ArrayList<DataAmountVO> list) {
ArrayList<ArrayList<DataAmountVO>> l = new ArrayList<ArrayList<DataAmountVO>>();
if (list == null || list.size() == 0) {
return l;
} else {
while (list != null && !list.isEmpty()) {
ArrayList<DataAmountVO> lv = new ArrayList<DataAmountVO>();
DataAmountVO first = list.get(0);
lv.add(first);
list.remove(0);
for (int i = 0; i < list.size(); i++) {
DataAmountVO temp = ((DataAmountVO) list.get(i));
if (temp.getFountName().equals(first.getFountName())) {
lv.add(temp);
list.remove(i);
i--;
}
}
l.add(lv);
}
return l;
}
}
}
function exportExcel(dataType){
var fountId = document.getElementById("fountId").value;
var gprsId = document.getElementById("gprsId").value;
var startDt = document.getElementById("startDt").value;
var startHou = document.getElementById("startHou").value;
var endDt = document.getElementById("endDt").value;
var endHou = document.getElementById("endHou").value;
var reName = document.getElementById("reName").value;
var url = "";
var params = "fountId=" + fountId + "&gprsId=" + gprsId
+ "&startDt=" + startDt + "&startHou=" + startHou
+ "&endDt=" + endDt + "&endHou=" + endHou + "&reName=" + reName;
if(dataType == 'amount'){
var typeId = document.getElementById("typeId").value;
url = "excelAmountAction.do";
params += "&typeId=" + typeId;
}
if(dataType == 'quality'){
url = "excelQualityAction.do";
}
var ajax = new Ajax.Request(url,{method:"get",parameters:params,onLoading:load,onComplete:complete});
//loading function
function load(){
var loadDiv = document.getElementById("load");
var button = document.getElementById("excelButton");
if(loadDiv != null && loadDiv != undefined){
button.disabled = true;
loadDiv.style.display = "";
loadDiv.innerHTML = "<img src=\"images/loading5.gif\"/>正在导出excel文件,请稍等...";
}
}
function complete(response){//call back function
var loadDiv = document.getElementById("load");
loadDiv.style.display = "none";
var xml = response.responseText;
var objs = eval('(' + xml + ')');
var obj = objs.jobj;
var alt = obj.message;
var fobjs = obj.files;
var tbDiv = document.getElementById("excelFile");
var tb = new Array();
tb.push("<table width=\"100%\">");
tb.push("<tr>");
tb.push("<td width=\"5%\">");
tb.push(" ");
tb.push("</td>");
tb.push("<td width=\"85%\">");
tb.push("文件名称");
tb.push("</td>");
tb.push("<td width=\"10%\">");
tb.push("下载");
tb.push("</td>");
tb.push("</tr>");
for(var i = 0;fobjs != null && i < fobjs.length;i++){
var file = fobjs[i];
var fName = file.name;
var fPath = file.path;
tb.push("<tr>");
tb.push("<td>");
tb.push("<img src=\"images/excel.jpg\">");
tb.push("</td>");
tb.push("<td>");
tb.push(fName);
tb.push("</td>");
tb.push("<td>");
tb.push("<a href=\"downloadAction.do?fileName=" + fPath + "\">")
tb.push("<img src=\"images/download.gif\">");
tb.push("</a>");
tb.push("</td>");
tb.push("</tr>");
}
tb.push("</table>");
tbDiv.innerHTML = tb.join("");
//返回信息提示
alert(alt);
document.getElementById("excelButton").disabled = false;
}
}
附注:关于prototype.js +ajax 中文乱码问题,在action中标注:
request.setCharacterEncoding("GBK");
response.setContentType("text/xml;charset=GBK");
在得到参数后需要转码,从提交页面编码格式转成ajax编码格式(utf-8)
String city = request.getParameter("city");//获得城市名称
city = new String(city.getBytes("GBK"),"UTF-8");
分享到:
相关推荐
其中,JSON支持是Prototype库的一部分,它允许开发者轻松地进行JSON数据的处理,与json.js和json2.js类似,但它是作为更全面的JavaScript工具集的一部分。 5. prototype.chm:CHM是Microsoft的 Compiled HTML Help ...
Prototype.js 1.6中的AJAX(异步JavaScript和XML)功能大大简化了与服务器的通信。`Ajax.Request`和`Ajax.Updater`是核心组件,前者用于发送请求,后者用于更新页面的一部分。它们都支持多种HTTP方法(GET、POST等...
3. **Ajax** - prototype.js 改进了原始的XMLHttpRequest对象,提供了`Ajax`模块,包含`Ajax.Request`和`Ajax.Updater`等类,使异步数据交换更加简单和灵活。 4. **事件处理** - 库中的`Event.observe()`和`Event....
在这个Ajax实例中,前端使用Prototype.js发起Ajax请求,向服务器发送JSON数据,或者接收服务器返回的JSON数据。由于JSON是JavaScript的一部分,因此在JavaScript中解析JSON数据非常直观,这使得前后端之间的数据交换...
2. **Ajax**:Prototype.js提供了一套完善的Ajax解决方案,包括`Ajax.Request`和`Ajax.Updater`,使得异步数据交互更为简单,同时支持JSON、XML等多种数据格式。 3. **事件处理**:Prototype.js通过`Event.observe...
- **JSON支持**:Prototype.js提供了`toJSON`方法,可以将JavaScript对象转换为JSON字符串,便于与服务器进行数据交换。 ### 3. Prototype.js的事件处理 - **事件委托**:Prototype.js支持事件委托,允许在一个...
3. **Ajax支持**:Prototype.js提供了强大的Ajax功能,包括`Ajax.Request`和`Ajax.Updater`等,它们允许开发者轻松实现页面的异步更新,无需刷新整个页面,从而提高用户体验。 4. **事件处理**:库中包含了事件绑定...
2. **JSON处理**:Prototype.js内置了JSON支持,提供了`JSON.parse()`和`JSON.stringify()`方法,方便JSON数据的序列化和反序列化。 3. **特效与动画**:Prototype.js的Effect模块提供了一系列动画效果,如淡入淡出...
7. **JSON支持**:随着JSON成为数据交换的主流格式,Prototype.js 提供了JSON的解析和序列化功能,简化了数据的处理过程。 8. **实用工具**:Prototype.js 还包含许多实用工具函数,如`$()`用于快速获取DOM元素,`$...
Prototype.js是一个广泛使用的JavaScript库,它为JavaScript语言增加了许多实用功能,尤其在处理DOM操作、Ajax交互以及类(class)系统等方面提供了强大的支持。这个库的名字“Prototype”来源于JavaScript中的一个...
Prototype.js 是一个广泛使用的JavaScript库,它为JavaScript编程提供了丰富的功能和便利,旨在简化和优化在浏览器环境中进行的脚本编写。1.6.0.3 版本是该库的一个稳定版本,它包含了对先前版本的改进和修复,以...
4. **Ajax交互**:Prototype.js封装了Ajax请求,通过`Ajax.Request`和`Ajax.Updater`对象,可以实现与服务器的异步数据交换,大大简化了Web应用的动态更新。 5. **事件处理**:通过`Event.observe()`和`Event.stop...
Prototype.js是一个JavaScript库,它为Web开发提供了丰富的功能,特别是针对Ajax交互。Ajax,即异步JavaScript和XML,是一种在不刷新整个页面的情况下更新部分网页内容的技术。Prototype.js通过简化DOM操作、事件...
Prototype.js是一个轻量级的JavaScript库,主要由Sam Stephenson开发,旨在简化DOM操作,提供面向对象的编程支持,并优化JavaScript的一些常见任务。它以其强大的功能和良好的性能,在Web开发领域得到了广泛应用。在...
Prototype.js 是一个强大的JavaScript框架,它为DOM操作、事件处理、AJAX交互等提供了便利的API,极大地提高了开发效率。手册详细介绍了这个库的功能和用法,以下是基于该手册的一些关键知识点的深入解析。 1. **...
Prototype.js 是一个流行的JavaScript库,由Sam Stephenson创建,旨在简化DOM操作、事件处理、Ajax交互以及对象扩展等任务。在Prototype.js 1.6版本中,它提供了一系列高效且功能强大的工具,帮助开发者更高效地编写...
8. **JSON支持**:Prototype包含了JSON(JavaScript Object Notation)的支持,提供`Object.toJSON`和`String.fromJSON`方法,方便JSON数据的序列化和反序列化。 9. **Ajax缓存**:Prototype的`Ajax.CachedRequest`...
Prototype.js 是一个广泛使用的JavaScript库,它为JavaScript语言增加了许多实用的功能,使开发Web应用程序变得更加简单。这个压缩包包含了Prototype的1.6.0版本,包括中文版和英文版的文档,以及源代码文件。 首先...