DataGrid 导出 CSV
DataGrid 使用第三方库 CSVLib 导出CSV,遇到如下两个问题:
- ActionScript 默认的文本编码为 UTF-8,而 CSV 不支持这种编码,导致中文表头在 Excel 中显示为乱码,而用记事本打开正常。解决方法:CSV 导出时用 ByteArray 转码,代码如下:
var byte:ByteArray = new ByteArray();
byte.writeMultiByte(result,"gb2312");
- 之前的导出实现是基于 DataGrid 的数据源的,与 DataGrid 所展示的内容并不是完全相同,尤其是当 DataGrid 中的某一列指定了 labelFunction 时,必须在保存之前执行 labelFunction 把该列的数据转为可视的表格 ,这种情况下,很难写出一个通用的功能。直到最近想起 DataGrid 的 GridColumn 有个方法为itemToLabel,才算彻底解决这个问题,代码如下:
var csv:CSV = new CSV();
csv.embededHeader = false;
var header:Array = [];
for(var i:int = 0;i < _dataProvider.length;i++)
{
var item:Object = _dataProvider.getItemAt(i);
var rowData:Array = [];
for(var j:int = 0;j < grid.columns.length;j++)
{
var column:GridColumn = grid.columns.getItemAt(j) as GridColumn;
header.push(column.headerText);
rowData.push(column.itemToLabel(item));
}
csv.addRecordSet(rowData);
}
csv.header = header;
var file:FileReference = new FileReference();
csv.encode();
file.save(csv.data,"data.csv");