Flex 导出 Excel 表格

excel.as文件

package yes3d.utils
{
import flash.net.URLRequest;
import flash.net.URLRequestMethod;
import flash.net.navigateToURL;

public class Execl
{
public function Execl()
{
}
/**
* 导出excel
*/
public function load(url:String,keyids:String,fields:):void
{
//用post方式发送数据
var urlStr:String=url+'?keyids='+keyids;
var u:URLRequest = new URLRequest(urlStr);
u.method = URLRequestMethod.POST;

navigateToURL(u,"_self");
}
}

}



视图层sendExcel.mxml
服务端excel.php
header(”Content-type:application/vnd.ms-excel”);
header(”Content-Disposition:filename=”.date(’Y-m-d’,time()).”.xls”);
?>
$_REQUEST['keyid']
$_REQUEST['keyid']

完成,其实生成图片这种功能FLEX也是要通过服务端的。
昨天写了个FLEX导出EXCEL的例子,今天写一个FLEX导出图像的例子,其实原理一样,都是通过服务端进行。
注意把组件处理为图像的类库要下载下来,http://code.google.com/p/as3corelib/
flex把组件处理为图像字节流的类ExplortImage.as
package utils
{
import com.adobe.images.JPGEncoder;
import flash.display.BitmapData;
import flash.net.URLRequest;
import flash.net.URLRequestMethod;
import flash.net.navigateToURL;
import flash.utils.ByteArray;
import mx.core.UIComponent;
public class ExportImage
{
public function ExportImage()
{
}
/**
* 把图像发送到服务端,转为图像输出
*/
public function sendImageByte(target:UIComponent,url:String):void
{
var request:URLRequest = new URLRequest(url);
request.contentType = ‘applicatoin/octet-stream’;
request.data = getJPGByteArray(target);
request.method = URLRequestMethod.POST;
navigateToURL(request, “_blank”);
}
/**
* 把目标组件转换为图像数组
*/
private function getJPGByteArray(target:UIComponent):ByteArray
{
var bitmapData : BitmapData = new BitmapData(target.width, target.height);
bitmapData.draw(target);
var jpg : JPGEncoder = new JPGEncoder(80);
var jpgByteArray : ByteArray = jpg.encode(bitmapData);
return jpgByteArray;
}
}
}

表现层自己随便写什么什么东西进去都行test.mxml吧
<?xml version=”1.0″ encoding=”utf-8″?>
<mx:TitleWindow xmlns:mx=”http://www.adobe.com/2006/mxml” layout=”absolute” width=”700″ height=”620″ showCloseButton=”true” close=”PopUpManager.removePopUp(this)”>
<mx:Script>
<![CDATA[
import utils.ExportImage;
private var exportImage:ExportImage=new ExportImage;
]]>
</mx:Script>
<mx:ViewStack x=”0″ y=”0″ id=”vs_chart” width=”100%” height=”100%” creationPolicy=”all”>
<mx:Canvas id=”cv_column” label=”柱型图” width=”100%” height=”100%”>
<mx:ColumnChart id=”ch_column” showDataTips=”true” top=”91″ right=”10″ bottom=”153″ left=”200″/>
<mx:Legend dataProvider=”{ch_column}” direction=”horizontal” x=”200″ y=”55″/>
<mx:Label x=”200″ y=”27″ text=”柱状图” id=”lb_imgInfo”/>
<mx:Label x=”325″ y=”27″ text=”开始时间:2008-03-14″ id=”lb_startTime”/>
<mx:Label x=”531″ y=”27″ text=”结束时间:2008-12-24″ id=”lb_endTime”/>
<mx:DataGrid id=”db_info” left=”10″ top=”438″ bottom=”0″ right=”10″/>
<mx:Button x=”482″ y=”55″ label=”导出图像” click=”exportImage.sendImageByte(cv_column,’http://192.168.0.114/exportImage.php’)”/>
<mx:Panel title=”数据来源” borderThicknessLeft=”1″ borderAlpha=”1″ borderThicknessRight=”1″ top=”91″ left=”10″ bottom=”183″ right=”502″ cornerRadius=”4″ layout=”absolute” backgroundAlpha=”1.0″>
<mx:Text id=”txt_dataCome” top=”10″ left=”10″ right=”10″ bottom=”10″/>
</mx:Panel>
</mx:Canvas>
<mx:Canvas id=”cv_pie” label=”饼型图” width=”100%” height=”100%”>
<mx:PieChart id=”ch_pie” showDataTips=”true” left=”10″ top=”48″ right=”10″ bottom=”138″>
<mx:series>
<mx:PieSeries nameField=”xaxis” field=”value”/>
</mx:series>
</mx:PieChart>
<mx:Legend id=”le_pie” dataProvider=”{ch_pie}” x=”10″ y=”48″/>
<mx:Panel layout=”absolute” title=”数据来源” top=”462″ left=”10″ right=”10″ bottom=”10″>
<mx:Text x=”10″ y=”10″ id=”txt_pieDataCome”/>
</mx:Panel>
<mx:Label x=”24″ y=”19″ text=”饼状图” id=”lb_pieImgInfo”/>
<mx:Label x=”208″ y=”19″ text=”开始时间:2008-03-14″ id=”lb_pieStartTime”/>
<mx:Label x=”364″ y=”19″ text=”结束时间:2008-12-24″ id=”lb_pieEndTime”/>
<mx:Button x=”534″ y=”17″ label=”导出图像” click=”exportImage.sendImageByte(cv_pie,’http://192.168.0.114/exportImage.php’)”/>
</mx:Canvas>
</mx:ViewStack>
</mx:TitleWindow>
下面就是服务端的代码了,非常简单,是把FLEX发过来的数据转为图像输出。
<?php
if (isset($GLOBALS["HTTP_RAW_POST_DATA"])) {
$jpg = $GLOBALS["HTTP_RAW_POST_DATA"];

header('Content-Type: image/jpeg');

header("Content-Disposition: attachment; filename=".time().".jpg");

echo $jpg;
}
?>

本文来源于 冰山上的播客 http://xinsync.xju.edu.cn , 原文地址:http://xinsync.xju.edu.cn/index.php/archives/4148
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个使用ExtJS 4.2.1的完整例子,可以将Grid表格导出Excel文件: ``` Ext.require([ 'Ext.grid.*', 'Ext.data.*', 'Ext.util.*', 'Ext.toolbar.Paging', 'Ext.ux.exporter.Exporter' ]); Ext.onReady(function() { // 模拟数据 var data = []; for (var i = 0; i < 20; i++) { data.push({ name: 'User ' + i, email: 'user' + i + '@example.com', phone: '555-' + Ext.Number.randomInt(1000, 9999) }); } // 创建数据模型 Ext.define('User', { extend: 'Ext.data.Model', fields: ['name', 'email', 'phone'] }); // 创建数据源 var store = Ext.create('Ext.data.Store', { model: 'User', data: data, proxy: { type: 'memory', reader: { type: 'json', root: 'data' } } }); // 创建Grid表格 var grid = Ext.create('Ext.grid.Panel', { store: store, columns: [{ text: 'Name', dataIndex: 'name' }, { text: 'Email', dataIndex: 'email', flex: 1 }, { text: 'Phone', dataIndex: 'phone' }], width: 400, height: 200, dockedItems: [{ xtype: 'toolbar', dock: 'top', items: [{ xtype: 'button', text: 'Export to Excel', handler: function() { // 导出Excel Ext.ux.exporter.Exporter.exportGrid(grid, 'Excel', { title: 'User List' }); } }] }, { xtype: 'pagingtoolbar', store: store, dock: 'bottom', displayInfo: true }] }); // 渲染Grid表格 Ext.create('Ext.container.Viewport', { layout: 'fit', items: [grid] }); }); ``` 在上面的代码中,我们首先定义了一个模拟数据数组,然后创建了一个数据模型和一个数据源。接下来,我们创建了一个Grid表格,将数据源绑定到该表格中,并添加了一个工具栏和一个分页工具栏。在工具栏中,我们添加了一个按钮,当用户单击该按钮时,将调用Ext.ux.exporter.Exporter.exportGrid函数将Grid表格导出Excel文件。 需要注意的是,我们使用了Ext.ux.exporter.Exporter类来执行导出操作。该类是ExtJS的一个扩展,需要在应用程序中明确声明。在本例中,我们使用了Ext.require函数来加载必需的类和扩展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值