as3xls开源项目的中文乱码问题

as3xls,read and write Excle in Flex,开源项目首页: http://code.google.com/p/as3xls/

不过它对中文支持的不是很好,不知道现在有没有解决这个问题。有段时间我用过一下,曾经采取一个取巧的方式去解决,但我想并不是很好,如果有谁有更好的解决方法,或者已经对这个东东改造好的,给我一份,嘿嘿。

当初我临时解决的方式就是修改com/as3xls/xls/ExcelFile.as的大概255行那里:

  1.                         //var len:uint = String(value).length;
  2.                         var len:uint = GetStringLength(String(value));          //Bryan update
  3.                         cell.data.writeByte(len);
  4.                         //cell.data.writeUTFBytes(value);
  5.                         cell.data.writeMultiByte(String(value),"cn-gb");        //Bryan update

增加两个函数:

  1. //获取一个字符串的长度,如果是中文字符则  为2,其他的为1      bryan add          
  2.     private function GetStringLength(objString:String):int
  3.     {
  4.         var temp:int = 0;
  5.         for(var i:int=0;i<objString.length;i++)
  6.         {
  7.             if(isChinese(objString.substring(i,i+1)))
  8.             {
  9.                 temp += 2;
  10.             }
  11.             else{temp += 1;}
  12.         } 
  13.             
  14.         return temp;
  15.     }
  16.     //判断是否是中文   bryan add
  17.         private function isChinese(char:String):Boolean{
  18.             if(char == null){
  19.                 return false;
  20.             }
  21.             char = trim(char);
  22.             var pattern:RegExp = /^[/u0391-/uFFE5]+$/; 
  23.             var result:Object = pattern.exec(char);
  24.             if(result == null) {
  25.                 return false;
  26.             }
  27.             return true;
  28.         }

然后就导出

  1.             public function ExportSearchResultToExcel():void
  2.             {
  3.                 
  4.                 var list:Array = this.peopleservice.List(this.SqlWhere);
  5.                 var temppeople:People;
  6.                 if(list != null && list.length > 0)
  7.                 {
  8.                     if(list.length > 1000)
  9.                     {
  10.                         Alert.show("考虑到程序运行安全,程序只允许导出树据数量最大为1000.");
  11.                         return;
  12.                     }
  13.                     var excelFile:ExcelFile = new ExcelFile();
  14.                     sheet = new Sheet();
  15.                     sheet.resize(list.length+1,2);
  16.                     sheet.setCell(0, 0, "姓");
  17.                     sheet.setCell(0, 1, "名");
  18.                     for(var i:int = 0;i<list.length;i++)
  19.                     {
  20.                         temppeople = People(list[i]);
  21.                         if(temppeople != null)
  22.                         {
  23.                             sheet.setCell(i+1, 0, temppeople.Xing);
  24.                             sheet.setCell(i+1, 1, temppeople.Ming);                             
  25.                         }
  26.                     }
  27.                     excelFile.sheets.addItem(sheet);
  28.                     var mbytes:ByteArray = excelFile.saveToByteArray();
  29.                     var stream:FileStream = new FileStream(); 
  30.                     var docsDir:File = File.documentsDirectory.resolvePath("Export.xls");  
  31.                     try
  32.                     {
  33.                         docsDir.browseForSave("Save As");
  34.                         docsDir.addEventListener(Event.SELECT, saveData);
  35.                     }
  36.                     catch(er:Error)
  37.                     {
  38.                         Alert.show(er.message);
  39.                     }
  40.                     function saveData(event:Event):void 
  41.                     {
  42.                         var newFile:File = event.target as File;
  43.                         if (!newFile.exists)
  44.                         {
  45.                              var stream:FileStream = new FileStream();
  46.                              stream.open(newFile, FileMode.WRITE);
  47.                              stream.writeBytes(mbytes);
  48.                              stream.close();
  49.                         }
  50.                     }
  51.                 }
  52.             }

现在导出暂时解决了,但读取Excle档我没办法解决中文问题,所以最终还是放弃了使用as3xls, 采取其他的方法满足用户的需求了。其实也有办法解决的。例如我们可以使用标准的xml格式的Excle档进行上载,就相当于读取一个xml文件一样,但那样已经没有意义了,所以还是放弃了——|||......

你可能感兴趣的:(as3xls开源项目的中文乱码问题)