flex advanceddatagrid导出数据到excel的问题,前台导出和后台jsp导出都不行。

flex有两种导出方式:一种是通过flex的一个as3xls这个工具导出,但是这种导出方式导出的excel文件不能用金山的WPS打开。另一种导出excel的方式是通过js... flex有两种导出方式:一种是通过flex的一个as3xls这个工具导出,但是这种导出方式导出的excel文件不能用金山的WPS打开。另一种导出excel的方式是通过jsp导出,但是这种方式是通过在flex中拼字符串来拼装出一个html页面,数据就放在拼装的html中的table中,然后打开一个jsp页面(jsp页面的类型设置为excel表格类型),这个html字符串输出到jsp页面中。假如数据太大,那就会出现两个问题:一个是字符串太长,拼装时间太久,浏览器假死。另一个问题就是拼装的字符串实在太长,已经超出flex或者java本身定义的String类型的最大限制。试了很多方法都不行,包括将数据传递到java端,由java进行拼装String,接触flex的时间很短,请哪位flex高手指点下迷津? 展开
 我来答
l229924175
2013-04-11 · 超过21用户采纳过TA的回答
知道答主
回答量:93
采纳率:0%
帮助的人:55.1万
展开全部
flex通用的导出方法,只需要你把数据源传给这方法就可以了。希望可以帮到你!
private function exportExcel():FileReference {
var xls:ExcelFile = new ExcelFile();
//数据源为Arraycollection的类型
if(_dataProvider){
var _sheet:Sheet = new Sheet(); //Excel选项卡
var _fields:Array = []; //需要呈现的字段数组
// 列头
var columns:XMLList = _dataProvider.grid.columns.column;
var colCount:uint = columns.length();
// 数据行
var rows:XMLList = _dataProvider.grid.dataset.item;
var rowCount:uint = rows.length();
_sheet.resize(rowCount+3 , colCount); //设置当前选项卡 有多少行多少列
_sheet.header = titleLabel.text;
// 生成列头
for(var i:uint = 0; i<colCount; i++){
var col:XML = columns[i];
_sheet.setCell(0, i, col.@headerText.toString()); //设置单元格 参数:1、行号;2、列号;3、单元格的值
_fields.push(col.@dataField.toString()); //保存字段
}
// 生成数据
for (i = 0; i<rowCount; i++) {
var row:XML = rows[i];
for(var j:uint = 0; j<_fields.length; j++){
var field:String = "@" + _fields[j];
var val:String = row[field].toString();
_sheet.setCell(i+1, j, val); //设置单元格 参数:1、行号;2、列号;3、单元格的值
}
}
xls.sheets.addItem(_sheet); //把选项卡写入Excel文件中
//数据源为xml的类型
}else if(_dataArray ){
var _sheet1:Sheet = new Sheet(); //Excel选项卡
var _fields1:Array = []; //需要呈现的字段数组
var filename1:String = "";
var columns1:Array = new Array;
var rows1:ArrayCollection = new ArrayCollection;
columns1=myGrid.columns;//获得头部数据
rows1=myGrid.dataProvider as ArrayCollection;//获得数据
filename1 = "";
var colCount1:int = columns1.length;//获得头部长度
var rowCount1:int = rows1.length;//获得数据长度
_sheet1.resize(rowCount1+3 , colCount1); //设置当前选项卡 有多少行多少列
_sheet1.header = "";
for(var i1:uint = 0; i1<colCount1; i1++){
var col1:String = columns1[i1].headerText.toString();
_sheet1.setCell(0, i1, col1); //设置单元格 参数:1、行号;2、列号;3、单元格的值
_fields1.push(columns1[i1].dataField.toString()); //保存字段
}
// 生成数据
for (i1 = 0; i1<rowCount1; i1++) {
var row1:Object = rows1[i];
for(var j1:uint = 0; j1<_fields1.length; j1++){
var field1:String = _fields1[j];
var val1:String = "";
if(row1[field1]){
val1 = row1[field1].toString();
}
_sheet1.setCell(i1+1, j1, val1); //设置单元格 参数:1、行号;2、列号;3、单元格的值
}
}
// TODO Auto-generated method stub
xls.sheets.addItem(_sheet1); //把选项卡写入Excel文件中
}

var bytes:ByteArray = xls.saveToByteArray();
var fr:FileReference = new FileReference(); //保存对话框
var pattern:RegExp = /(\(.*\))|((.*))/g;
var filename:String = orderParam[0].caption.replace(pattern, "");
fr.save(bytes, filename + ".xls");
return fr;
}
追问
这种方式导出的excel文件用金山的WPS打不开(用微软的excel可以打开),而且我使用了advanceddatagrid控件的分层功能,里面的数据是树结构的。
aspwolf1470
2013-04-11 · TA获得超过2643个赞
知道小有建树答主
回答量:1287
采纳率:0%
帮助的人:1250万
展开全部
我只是路过打个酱油的....只用过as3xls =。=,来膜拜一下
另外,WPS方式打不开有问题吗?这个应该算是WPS的兼容问题吧,当然前提是offce打开没问题..
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式