`
zy77612
  • 浏览: 284016 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

flex实现客户端导出报表数据到excel

    博客分类:
  • J2EE
阅读更多

转:http://lqw.iteye.com/blog/528123

 

用flex实现客户端导出报表数据到excel的,实现步骤如下:

jxls下载地址
http://jxls.sourceforge.net/

1. flex端代码

 
<mx:Script>
<![CDATA[
import net.shopin.service.ReportService;
import net.shopin.vo.DateKeyVO;
import mx.controls.Alert;

[Bindable]
private var sales:Array=new Array;

public function check():Boolean
{
	if (start.text == "" || end.text == "")
	{
		Alert.show("请您选择起始和结束日期");
		return false;
	}
	else
	{
		var dateKeyVO:DateKeyVO=new DateKeyVO();
		dateKeyVO.startDate=DateField.stringToDate(start.text, "YYYY-MM-DD");
		dateKeyVO.endDate=DateField.stringToDate(end.text, "YYYY-MM-DD");
		if (dateKeyVO.startDate.getFullYear() > dateKeyVO.endDate.getFullYear())
		{
Alert.show("您选择结束日期小于起始日期");
return false;
		}
		else
		{
if (dateKeyVO.startDate.getMonth() > dateKeyVO.endDate.getMonth() && dateKeyVO.startDate.getFullYear() == dateKeyVO.endDate.getFullYear())
{
	Alert.show("您选择结束日期小于起始日期");
	return false;
}
else
{
	if (dateKeyVO.startDate.getDate() > dateKeyVO.endDate.getDate() && dateKeyVO.startDate.getFullYear() == dateKeyVO.endDate.getFullYear() && dateKeyVO.startDate.getMonth() == dateKeyVO.endDate.getMonth())
	{
		Alert.show("您选择结束日期小于起始日期");
		return false;
	}
	else
	{
		return true;
	}
}
		}
	}
}
//查询报表数据
public function search():void
{
	var flag:Boolean=check();
	if (flag == true)
	{
		var dateKeyVO:DateKeyVO=new DateKeyVO();
		dateKeyVO.startDate=DateField.stringToDate(start.text, "YYYY-MM-DD");
		dateKeyVO.endDate=DateField.stringToDate(end.text, "YYYY-MM-DD");
		var backService:ReportService=new ReportService(result);
		backService.getRefunReport(dateKeyVO);
	}
}


//查询返回数据
public function result(data:Object):void
{
	sales=data as Array;
	refunGrid.dataProvider=sales;
}

//导出报表数据到客户端供下载	
public function export():void{
	var flag:Boolean=check();
	if (flag == true)
	{
	var start:String=start.text;
	var end:String=end.text;
	navigateToURL(new URLRequest("http://localhost:80/web/getRefunReport/" + start + "/" + end + "/report.xls"), "_blank");
	}
}

//导出报表数据到服务器	
public function exportToServer():void
{
	var flag:Boolean=check();
	if (flag == true)
	{
		var dateKeyVO:DateKeyVO=new DateKeyVO();
		dateKeyVO.reportType="退货报表";
		dateKeyVO.startDate=DateField.stringToDate(start.text, "YYYY-MM-DD");
		dateKeyVO.endDate=DateField.stringToDate(end.text, "YYYY-MM-DD");
		var backService:ReportService=new ReportService(resultExport);
		backService.toExport(dateKeyVO);
	}
}

public function resultExport(data:Object):void
{
	var flag:Boolean=data as Boolean;
	if (flag)
	{
		Alert.show("成功导出退货报表到服务器D盘,稍后下载");
	}
	else
	{
		Alert.show("导出报表失败");
	}

}
//合计汇总数据列
public function sumFunction(col:DataGridColumn):String
{
	var n:int=sales.length;
	var sum:Number=0;
	for (var i:int=0; i < n; i++)
	{
		sum+=sales[i][col.dataField];
	}

	return sum.toFixed(2);
}
]]>
</mx:Script>
<mx:Label x="222" y="30" text="退货日期  从"/>
<mx:Label x="437" y="30" text="到"/>
<mx:Button x="614" y="30" label="查询" click="search()"/>
<mx:Button x="715" y="30" label="导出报表到Execl" click="export()"/>

<mx:DateField id="start" x="313" y="28" yearNavigationEnabled="true" dayNames="['日','一','二','三','四','五','六']"  monthNames='["一","二","三","四","五","六","七","八","九","十","十一","十二"]' formatString="YYYY-MM-DD"/>

<mx:DateField id="end" x="482" y="28" yearNavigationEnabled="true" dayNames="['日','一','二','三','四','五','六']"  monthNames='["一","二","三","四","五","六","七","八","九","十","十一","十二"]' formatString="YYYY-MM-DD"/>



2. 用spring mvc 实现的java端控制层

 

 

@Controller
public class LoadExcelController {
    @Autowired
    BackControlService backService;

    @RequestMapping(value = "/getSaleReport/{start}/{end}/report.xls", method = RequestMethod.GET)
    public String getSaleReport(Model m,@PathVariable("start") String start,@PathVariable("end") String end) {
        DateKeyVO dateKeyVO = new DateKeyVO();
        SimpleDateFormat f = new SimpleDateFormat("yyyy-MM-dd");
        //把地址栏传过来的字符串转换成日期
        try {
            Date start1 = f.parse(start);
            Date end1 = f.parse(end);
            dateKeyVO.setStartDate(start1);
            dateKeyVO.setEndDate(end1);
        } catch (ParseException px) {
            px.printStackTrace();
        }
        //获得service层查询的报表数据
        List<SaleReportVO> list = backService.getSaleReport(dateKeyVO);
        //找到报表的模板
        m.addAttribute("Template", "/templates/sale.xls");
        m.addAttribute("list", list);
        return "excelView";
    }
}



模板sale.xls代码

 
                    
  销售日期	             订单号	    销售单号
<jx:forEach var="sale" items="${list}">						
${sale.saleTime}${sale.orderNumber}	${sale.saleNO}	

</jx:forEach>						



3.控制层return "excelView"映射

views.properties,views_zh_CN.properties

 
 
excelView.(class)=com.shopin.modules.web.view.ExcelView



ExcelView 代码

  
package com.shopin.modules.web.view;

import java.util.List;
import java.util.Map;
import java.util.ArrayList;
import java.util.HashMap;
import java.io.*;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.ServletOutputStream;

import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.springframework.web.servlet.view.document.AbstractExcelView;
import org.springframework.web.servlet.view.AbstractView;
import org.springframework.util.ResourceUtils;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
import net.sf.jxls.transformer.XLSTransformer;


/**
 * 数据导出到Excel中
 */
public class ExcelView extends AbstractView {
    public ExcelView() {
        super();
        setContentType("application/vnd.ms-excel");
    }

    @Override
    protected final void renderMergedOutputModel(
            Map<String, Object> model, HttpServletRequest request, HttpServletResponse response) throws Exception {
        Resource resource = new ClassPathResource((String) model.get("Template"));
        HSSFWorkbook book = new XLSTransformer().transformXLS(resource.getInputStream(), model);
        response.setContentType(getContentType());
        ServletOutputStream out = response.getOutputStream();
        book.write(out);
        out.flush();
    }

}



4.java端service层代码

  
 public List<SaleReportVO> getSaleReport(DateKeyVO dateKeyVO) {
        Session session = null;
        Transaction tx = null;
        List<SaleReportVO> listVO = new ArrayList<SaleReportVO>();
        try {
            session = sessionFactory.openSession();
            tx = session.beginTransaction();
            Query query = session.createSQLQuery(ReportSQL.salesSQL);
            query.setDate(0,dateKeyVO.getStartDate());
            query.setDate(1,dateKeyVO.getEndDate());
            List list = query.list();
            for (int i = 0; i < list.size(); i++) {
                Object[] objs = (Object[]) list.get(i);
//               SalesBean salesBean=new SalesBean((String)objs[0],((BigDecimal)objs[1]).doubleValue(),((BigDecimal)objs[2]).doubleValue(),((BigDecimal)objs[3]).doubleValue(),((BigDecimal)objs[4]).doubleValue(),((BigDecimal)objs[5]).doubleValue(),((BigDecimal)objs[6]).doubleValue(),((BigDecimal)objs[7]).doubleValue(),((BigDecimal)objs[8]).doubleValue(),((BigDecimal)objs[9]).doubleValue(),((BigDecimal)objs[10]).doubleValue(),((BigDecimal)objs[11]).doubleValue(),(String)objs[12],(String)objs[13],(String)objs[14],(String)objs[15],(String)objs[16],(String)objs[17]);
                SaleReportVO salesBean = new SaleReportVO();
                if (objs[0] != null) {
                    salesBean.setSaleTime(((Date) objs[0]).toString());
                }
                if (objs[1] != null) {
                    salesBean.setOrderNumber((String) objs[1]);
                }
                if (objs[2] != null) {
                    salesBean.setSaleNO((String) objs[2]);
                }
                //把数据库中查询出的BigDecimal类型转换成Double类型
                if (objs[3] != null) {
                    salesBean.setSaleNum(((BigDecimal) objs[3]).doubleValue());
                }
                if (objs[4] != null) {
                    salesBean.setOrderSum(((BigDecimal) objs[4]).doubleValue());
                }
                if (objs[5] != null) {
                    salesBean.setProductSale(((BigDecimal) objs[5]).doubleValue());
                }
                if (objs[6] != null) {
                    salesBean.setSendCost(((BigDecimal) objs[6]).doubleValue());
                }
                if (objs[7] != null) {
                    salesBean.setRealCost(((BigDecimal) objs[7]).doubleValue());
                }
               listVO.add(salesBean);
            }
        } catch (Exception e) {
            if (session != null && tx != null && session.isOpen()) {
                tx.rollback();
            }
            e.printStackTrace();
        } finally {
            if (session != null && session.isOpen()) {
                session.close();
            }
        }
        return listVO;
    }

 

 

 

=================================================================

 

ExcelServlet.java

Java code
<!-- Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ --> package test; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.hssf.usermodel.HSSFRichTextString; import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; public class ExcelServlet extends HttpServlet { private static final long serialVersionUID = 1407382389107180200L ; @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doMainDispatch(req, resp); } @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doMainDispatch(req, resp); } protected void doMainDispatch(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String filename = " excel.xls " ; resp.reset(); resp.setCharacterEncoding( " UTF-8 " ); resp.setContentType( " application/vnd.ms-excel " ); resp.addHeader( " Content-Disposition " , " attachment; filename=\" " + filename + " \" " ); HSSFWorkbook wb = generateExcel(); wb.write(resp.getOutputStream()); resp.getOutputStream().flush(); } private HSSFWorkbook generateExcel() { HSSFWorkbook wb = new HSSFWorkbook(); HSSFSheet sheet = wb.createSheet( " Sheet1 " ); HSSFRow row = sheet.createRow( 0 ); HSSFCell cell = row.createCell(( short ) 0 ); cell.setCellValue( new HSSFRichTextString( " Excel " )); return wb; } }




web.xml中加入:

XML code
<!-- Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ --> < servlet > < servlet-name > Excel Servlet </ servlet-name > < servlet-class > test.ExcelServlet </ servlet-class > < load-on-startup > 1 </ load-on-startup > </ servlet > < servlet-mapping > < servlet-name > Excel Servlet </ servlet-name > < url-pattern > /DownloadExcel </ url-pattern > </ servlet-mapping >




Download.mxml

JScript code
<!-- Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ --> <? xml version = " 1.0 " encoding = " utf-8 " ?> < mx:Application xmlns:mx = " http://www.adobe.com/2006/mxml " layout = " absolute " > < mx:Script > <! [CDATA[ import flash.net.FileReference; import flash.net.URLRequest; private var fileReference:FileReference = null ; private function download(): void { var request:URLRequest = new URLRequest( " http://localhost:8080/xxx/DownloadExcel " ); fileReference = new FileReference(); fileReference.download(request, " excel.xls " ); } ]] > < / mx:Script> < mx:Button label = " Download " click = " download() " / > < / mx:Application>
 
分享到:
评论

相关推荐

    利用ASP架构将flex中的datagrid数据导出为excel表格方式。

    在IT行业中,将数据从应用程序导出到常见格式如Excel是一种常见的需求,这有助于数据分析、报表制作和数据共享。在本场景中,我们将探讨如何利用ASP(Active Server Pages)架构来实现这一功能,特别是针对Flex中的...

    flex与java结合的excel导出

    在Flex和Java结合的环境中,实现Excel导出是一项常见的需求,尤其在数据分析和报表生成时。以下是关于这个主题的关键知识点: 1. **Flex与Java的交互**:Flex是一种基于Adobe Flash Player运行时的富互联网应用...

    flex+java读写excel文件

    Flex客户端通过 BlazeDS 或 Adobe LiveCycle Data Services 与Java后端服务进行AMF通信,发送请求来导入或导出Excel文件。Java服务器端使用POI处理文件,然后将结果以AMF格式返回给Flex前端。 4. **具体步骤**: -...

    jasperreports+alivepdf+Flex解决打印和导出PDF问题

    3. **生成PDF**:在Flex客户端,通过HTTP服务请求服务器上的jasperreports服务,将填充好的报表转换为PDF格式。这里可能需要设置一些参数,如PDF的页面大小、方向、边距等。 4. **使用alivepdf**:在Flex应用中引入...

    flex 3.0 actionscript 2.0

    4. **数据导入导出**:在Flex应用中,结合POI可以实现从Excel文件导入数据到数据库,或者将数据库结果导出为Excel文件,为用户提供方便的数据管理工具。 5. **性能优化**:POI 提供了流式处理API,如SXSSF,用于...

    报表软件--Style Report报表数据填报

    ### Style Report报表软件智能数据填报的关键特性解析 #### 一、通用性和易用性 - **Flex技术的应用**:Style Report报表软件采用了Flex技术,这是一种跨平台的开发框架,能够提供丰富的互联网应用体验。Flex技术...

    应用系统统一开发平台(SG-UAP)培训_快速开发-即席报表.pptx

    - 报表导出接口:支持自动导出报表为多种格式,如Word、Excel、PDF。 五、快速上手 1. 打开报表设计器:启动设计工具,进入报表设计环境。 2. 配置数据集:连接数据库,定义报表所需数据。 3. 设计报表模板:使用...

    as3xls-1.0.1.swc

    2. **Datagrid数据导出**:可以方便地将Flex Datagrid中的数据快速导出为Excel格式,非常适合于报表生成或数据分析场景。 3. **多工作表操作**:支持在一个Excel文件中创建多个工作表,每个工作表可以独立管理数据...

    FlexWebReport

    FlexWebReport是一个基于Flex技术的报表系统,它主要用于在Web环境中生成和导出表格数据到多种格式的文档。Flex是一种由Adobe开发的开源框架,主要应用于创建富互联网应用程序(RIA)。这个系统的核心特性是它的灵活...

    as3xls-1.0.1

    在实际项目中,as3xls库可以应用于在线报表工具、数据导入/导出功能、数据可视化应用,甚至教育软件中创建互动练习和测试。由于它直接在客户端运行,用户可以在不离开浏览器的情况下进行数据操作,提高了用户体验。 ...

Global site tag (gtag.js) - Google Analytics