as3 xls 엑셀 디 코딩 문제 해결 방법 내 보 내기

http://blog.csdn.net/Baijinwen/archive/2009/01/06/3722408.aspx
  as3xls 오픈 소스 프로젝트 의 중국어 코드 문제 수장 하 다
< script type = "text / javascript" > document. body. oncopy = function () {if (window. clipboardData) {setTimeout (function () {var text = clipboardData. getData (& quot; text & quot;); if (text & amp; & amp; text. length & gt; 300) {text = text + & quot; \ r 본문 은 CSDN 블 로그 에서 왔 습 니 다. 출처: & quot; + location. href; clipboard Data. setData("text", text); } }, 100); } } function StorePage(){d=document;t=d.selection?(d.selection.type!='None'?d.selection.createRange().text:''):(d.getSelection?d.getSelection():'');void(keyit=window.open('http://www.365key.com/storeit.aspx?t='+escape(d.title)+'&u='+escape(d.location.href)+'&c='+escape(t),'keyit','scrollbars=no,width=475,height=575,left=75,top=20,status=no,resizable=yes'));keyit.focus();}
as3xls, read and write Excle in Flex, 오픈 소스 프로젝트 첫 페이지: http://code.google.com/p/as3xls/
하지만 그것 은 중국어 에 대한 지원 이 좋 지 않 습 니 다. 지금 이 문 제 를 해결 할 수 있 을 지 모 르 겠 습 니 다. 한동안 사용 해 봤 습 니 다. 교묘 한 방식 으로 해결 한 적 이 있 지만 좋 지 않다 고 생각 합 니 다. 만약 에 누가 더 좋 은 해결 방법 이 있 거나 이미 이 물건 을 개조 한 것 이 있다 면 저 에 게 하 나 를 주세요. 헤헤.
처음에 제 가 임시로 해결 한 방법 은 come / as3xls / xls / Excel File. 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
            {
  •              if (isChinese(objString.substring(i,i+1)))

  •             {
  •                 temp += 2;

  •             }
  •              else {temp += 1;}

  •         } 
  •             

  •          return  temp;
  •     }
    package cn.ishion.excel.util
    {
    	import com.as3xls.biff.BIFFVersion;
    	import com.as3xls.biff.BIFFWriter;
    	import com.as3xls.biff.Record;
    	import com.as3xls.xls.ExcelFile;
    	import com.as3xls.xls.Sheet;
    	import com.as3xls.xls.Type;
    	
    	import flash.utils.ByteArray;
    	
    	import mx.utils.StringUtil;
    	
    	
    	//  
    	
    	public class ConstomExcelFile extends ExcelFile
    	{
    		public function ConstomExcelFile()
    		{
    			
    		}
    		  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 =  StringUtil.trim(char);
                 var pattern:RegExp = /^[\u0391-\uFFE5]+$/; 
                 var result:Object = pattern.exec(char);
                 if(result == null) {
                     return false;
                 }
                 return true;
             }
    		override public function saveToByteArray():ByteArray{
    		//	var s:Sheet = _sheets[0] as Sheet; //          
    			var s:Sheet =super.sheets[0] as Sheet;
    			
    			var br:BIFFWriter = new BIFFWriter();
    			
    			// Write the BOF and header records
    			var bof:Record = new Record(Type.BOF);
    			bof.data.writeShort(BIFFVersion.BIFF2);
    			bof.data.writeByte(0);
    			bof.data.writeByte(0x10);
    			br.writeTag(bof);
    			
    			// Date mode
    			var dateMode:Record = new Record(Type.DATEMODE);
    			dateMode.data.writeShort(1);
    			br.writeTag(dateMode);
    			
    			// Store built in formats
    			var formats:Array = ["General", 
    				"0", "0.00", ",0", ",0.00", 
    				"", "", "", "",
    				"0%", "0.00%", "0.00E+00",
    				"?/?", "??/??",
    				"M/D/YY", "D-MMM-YY", "D-MMM", "MMM-YY"];
    			
    			var numfmt:Record = new Record(Type.BUILTINFMTCOUNT);
    			numfmt.data.writeShort(formats.length);
    			br.writeTag(numfmt);
    			
    			for(var n:uint = 0; n < formats.length; n++) {
    				var fmt:Record = new Record(Type.FORMAT);
    				fmt.data.writeByte(formats[n].length);
    				fmt.data.writeUTFBytes(formats[n]);
    				br.writeTag(fmt);
    			}
    			
    			var dimensions:Record = new Record(Type.DIMENSIONS);
    			dimensions.data.writeShort(0);
    			dimensions.data.writeShort(s.rows+1);
    			dimensions.data.writeShort(0);
    			dimensions.data.writeShort(s.cols+1);
    			br.writeTag(dimensions);
    			
    			for(var r:uint = 0; r < s.rows; r++) {
    				for(var c:uint = 0; c < s.cols; c++) {
    					var value:* = s.getCell(r, c).value;
    					var cell:Record = new Record(1);
    					cell.data.writeShort(r);
    					cell.data.writeShort(c);
    					
    					if(value is Date) {
    						var dateNum:Number = (value.time / 86400000) + 24106.667;
    						cell.type = Type.NUMBER;
    						cell.data.writeByte(0);
    						cell.data.writeByte(15);
    						cell.data.writeByte(0);
    						cell.data.writeDouble(dateNum);
    					} else if(isNaN(Number(value)) == false && String(value) != "") {
    						cell.type = Type.NUMBER;
    						cell.data.writeByte(0);
    						cell.data.writeByte(0);
    						cell.data.writeByte(0);
    						cell.data.writeDouble(value);
    					} else if(String(value).length > 0) {
    						cell.type = Type.LABEL;
    						cell.data.writeByte(0);
    						cell.data.writeByte(0);
    						cell.data.writeByte(0);
    					//	var len:uint = String(value).length; //       
    						var len:uint=this.GetStringLength(value);
    						cell.data.writeByte(len);
    					//	cell.data.writeUTFBytes(value);//          
    						cell.data.writeMultiByte(value,"gbk");
    					} else {
    						cell.type = Type.BLANK;
    						cell.data.writeByte(0);
    						cell.data.writeByte(0);
    						cell.data.writeByte(0);
    					}
    					
    					br.writeTag(cell);
    				}
    			}
    			
    			
    			// Finally, the closing EOF record
    			var eof:Record = new Record(Type.EOF);
    			br.writeTag(eof);
    			
    			br.stream.position = 0;
    			return br.stream;
    		}
    
    	}
    }
     예시
  • private function exportExcel():void{
    				var ex:ExcelFile=new ConstomExcelFile();
    				var arr:ArrayCollection=new ArrayCollection();
    				var sheet:Sheet=new Sheet();
    				sheet.header="dsafsdafsaf";
    				sheet.footer="foot";
    				sheet.name="hello";
    				 sheet.resize(10,10);
    				for(var i:int=0;i<10;i++){
    					 sheet.setCell(i,i,"   ");
    					 
    					 trace(ex.sheets);
    					
    				}
    				 ex.sheets.addItem(sheet);
    				var file:File=File.desktopDirectory.resolvePath("test333.xls");
    				var fs:FileStream=new FileStream();
    				fs.open(file,FileMode.WRITE);
    			
    				fs.writeBytes(ex.saveToByteArray());
    				fs.close();
    				
    			}
     
  • 좋은 웹페이지 즐겨찾기