as3xls,read and write Excle in Flex,开源项目首页: http://code.google.com/p/as3xls/
不过它对中文支持的不是很好,不知道现在有没有解决这个问题。有段时间我用过一下,曾经采取一个取巧的方式去解决,但我想并不是很好,如果有谁有更好的解决方法,或者已经对这个东东改造好的,给我一份,嘿嘿。
当初我临时解决的方式就是修改com/as3xls/xls/ExcelFile.as的大概255行那里:
- //var len:uint = String(value).length;
- var len:uint = GetStringLength(String(value)); //Bryan update
- cell.data.writeByte(len);
- //cell.data.writeUTFBytes(value);
- cell.data.writeMultiByte(String(value),"cn-gb"); //Bryan update
增加两个函数:
- //获取一个字符串的长度,如果是中文字符则 为2,其他的为1 bryan add
- private function GetStringLength(objString:String):int
- {
- var temp:int = 0;
- for(var i:int=0;i<objString.length;i++)
- {
- if(isChinese(objString.substring(i,i+1)))
- {
- temp += 2;
- }
- else{temp += 1;}
- }
- return temp;
- }
- //判断是否是中文 bryan add
- private function isChinese(char:String):Boolean{
- if(char == null){
- return false;
- }
- char = trim(char);
- var pattern:RegExp = /^[/u0391-/uFFE5]+$/;
- var result:Object = pattern.exec(char);
- if(result == null) {
- return false;
- }
- return true;
- }
然后就导出
- public function ExportSearchResultToExcel():void
- {
- var list:Array = this.peopleservice.List(this.SqlWhere);
- var temppeople:People;
- if(list != null && list.length > 0)
- {
- if(list.length > 1000)
- {
- Alert.show("考虑到程序运行安全,程序只允许导出树据数量最大为1000.");
- return;
- }
- var excelFile:ExcelFile = new ExcelFile();
- sheet = new Sheet();
- sheet.resize(list.length+1,2);
- sheet.setCell(0, 0, "姓");
- sheet.setCell(0, 1, "名");
- for(var i:int = 0;i<list.length;i++)
- {
- temppeople = People(list[i]);
- if(temppeople != null)
- {
- sheet.setCell(i+1, 0, temppeople.Xing);
- sheet.setCell(i+1, 1, temppeople.Ming);
- }
- }
- excelFile.sheets.addItem(sheet);
- var mbytes:ByteArray = excelFile.saveToByteArray();
- var stream:FileStream = new FileStream();
- var docsDir:File = File.documentsDirectory.resolvePath("Export.xls");
- try
- {
- docsDir.browseForSave("Save As");
- docsDir.addEventListener(Event.SELECT, saveData);
- }
- catch(er:Error)
- {
- Alert.show(er.message);
- }
- function saveData(event:Event):void
- {
- var newFile:File = event.target as File;
- if (!newFile.exists)
- {
- var stream:FileStream = new FileStream();
- stream.open(newFile, FileMode.WRITE);
- stream.writeBytes(mbytes);
- stream.close();
- }
- }
- }
- }
现在导出暂时解决了,但读取Excle档我没办法解决中文问题,所以最终还是放弃了使用as3xls, 采取其他的方法满足用户的需求了。其实也有办法解决的。例如我们可以使用标准的xml格式的Excle档进行上载,就相当于读取一个xml文件一样,但那样已经没有意义了,所以还是放弃了——|||......