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高手指点下迷津?
展开
展开全部
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;
}
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控件的分层功能,里面的数据是树结构的。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询