package com.wks.util
{
 import flash.net.URLRequestMethod;
 import flash.net.navigateToURL;
 
 import mx.controls.AdvancedDataGrid;
 import mx.controls.advancedDataGridClasses.AdvancedDataGridColumn;
 import mx.controls.advancedDataGridClasses.AdvancedDataGridColumnGroup;
 import mx.controls.dataGridClasses.DataGridColumn;
 
 public class ToExcel
 {
  public function ToExcel()
  {
  }
  import flash.errors.*;
  import flash.events.*;
  import flash.external.*;
  import flash.net.URLRequest;
  import flash.net.URLVariables;
  import mx.controls.DataGrid; 
  
  private var myReg:RegExp = /undefined/gi;
  /** 
   * 作者:IT小金 
   * 时间:2011-09-07 
   * 功能:FLex DataGird生成HTML 导出Excel 
   */
  
  /*将DataGird导出成HTML格式*/
  public function convertDGToHTMLTable(dg:DataGrid,tableName:String):String { 
   
   //设置默认参数 
   var font:String = dg.getStyle('fontFamily'); 
   var size:String = dg.getStyle('fontSize'); 
   var str:String = ''; 
   var colors:String = ''; 
   var style:String = 'style="font-family:'+font+';font-size:'+size+'pt;"';                 
   var hcolor:Array;
   
   //设置标题行颜色 
   var styleName:Object = dg.styleName;
   if(dg.getStyle("headerColor") != undefined) {
    hcolor = [dg.getStyle("headerColor")];
   } else {
    hcolor = dg.getStyle("headerColors");
   }
   //根据datagrid设置基础结构
   str+='<table border="1" style="text-align:center"><tr><td>'+tableName+'</td></tr><tr><td>';
   if(hcolor)
    str+= '<table style="text-align:center" width="'+dg.width+'" border="1"><thead><tr width="'+dg.width+'" style="background-color:#' +Number((hcolor[0])).toString(16)+'">'; 
   else
    str+= '<table style="text-align:center" width="'+dg.width+'" border="1"><thead><tr width="'+dg.width+'" >'; 
   //设置列头           
   for(var i:int = 0;i<dg.columns.length;i++) { 
    colors = dg.getStyle("themeColor"); 
    if(dg.columns[i].headerText != undefined) { 
     str+="<th "+style+">"+dg.columns[i].headerText+"</th>"; 
    } else { 
     str+= "<th "+style+">"+dg.columns[i].dataField+"</th>"; 
    } 
   } 
   str += "</tr></thead><tbody>"; 
   colors = dg.getStyle("alternatingRowColors"); 
   //设置单元格数据,数据遍历DataGird 
   for(var j:int =0;j<dg.dataProvider.length;j++) {                  
    str+="<tr width=\""+Math.ceil(dg.width)+"\">"; 
    for(var k:int=0; k < dg.columns.length; k++) { 
     if(dg.dataProvider.getItemAt(j) != undefined && dg.dataProvider.getItemAt(j) != null) { 
      if(!dg.columns[k].dataField) {
       str += "<td width=\""+Math.ceil(dg.columns[k].width)+"\" "+style+"></td>";
      }
      else if(dg.columns[k].labelFunction != undefined) { 
       str += "<td width=\""+Math.ceil(dg.columns[k].width)+"\" "+style+">"+dg.columns[k].labelFunction(dg.dataProvider.getItemAt(j),dg.columns[k].dataField)+"</td>"; 
      } else { 
       str += "<td width=\""+Math.ceil(dg.columns[k].width)+"\" "+style+">"+dg.dataProvider.getItemAt(j)[dg.columns[k].dataField]+"</td>"; 
      }
     }
    }
    str += "</tr>";
   }
   str+="</tbody></table></td></tr></table>";
   
   str = str.replace(myReg,"");
   return str;
  }
  
  public function convertADGToHTMLTable(dg:AdvancedDataGrid,tableName:String):String { 
   
   //设置默认参数 
   var font:String = dg.getStyle('fontFamily'); 
   var size:String = dg.getStyle('fontSize'); 
   var str:String = ''; 
   var colors:String = ''; 
   var style:String = 'style="font-family:'+font+';font-size:'+size+'pt;"';                 
   var hcolor:Array;
   
   //设置标题行颜色 
   if(dg.getStyle("headerColor") != undefined) { 
    hcolor = [dg.getStyle("headerColor")]; 
   } else { 
    hcolor = dg.getStyle("headerColors"); 
   }                
   //根据datagrid设置基础结构 
   str+= '<table border="1" style="text-align:center"><tr><td>'+tableName+'</td></tr><tr><td><table style="text-align:center" width="'+dg.width+'" border="1"><thead><tr width="'+dg.width+'" style="background-color:#' +Number((hcolor[0])).toString(16)+'">'; 
   //得到ColumnGroup
   var gColLength:int = dg.groupedColumns.length;
   var colLength:int = dg.columnCount;
   //设置列头
   for(var i:int = 0;i<dg.groupedColumns.length;i++) { 
    colors = dg.getStyle("themeColor"); 
    if(dg.groupedColumns[i].headerText != undefined) {
     if(dg.groupedColumns[i] as AdvancedDataGridColumnGroup) {
      str+='<th><table style="text-align:center" border="1" width="100%" height="100%">';
      var adgcg:AdvancedDataGridColumnGroup = dg.groupedColumns[i];
      str+="<tr><th colspan=\""+adgcg.children.length+"\" >"+adgcg.headerText+"</th><tr/>";
      if(adgcg.children) {
       str+='<tr height="100%">';
       for(var k:int=0; k<adgcg.children.length; k++) {
        str+="<th>"+adgcg.children[k].headerText+"</th>";
       }
       str+="</tr>";
      }
      str+="</table></th>";
     }
     else if(dg.groupedColumns[i] as AdvancedDataGridColumn)
     {
      str+="<th "+style+">"+dg.groupedColumns[i].headerText+"</th>"; 
     }
    } else { 
     str+= "<th "+style+">"+dg.groupedColumns[i].dataField+"</th>"; 
    } 
   } 
   str += "</tr></thead><tbody>"; 
   colors = dg.getStyle("alternatingRowColors"); 
   //设置单元格数据,数据遍历DataGird
   var adc:AdvancedDataGridColumn = new AdvancedDataGridColumn;
   var dc:DataGridColumn = new DataGridColumn;
   for(var j:int =0;j<dg.dataProvider.length;j++) {
    str+="<tr width=\""+Math.ceil(dg.width)+"\">";
    for(var k:int=0; k < dg.groupedColumns.length; k++) {
     if(dg.dataProvider.getItemAt(j) != undefined && dg.dataProvider.getItemAt(j) != null) {
      if(dg.groupedColumns[k] as AdvancedDataGridColumnGroup) {
       str+='<td><table style="text-align:center" border="1" width="100%" height="100%">';
       var adgcg:AdvancedDataGridColumnGroup = dg.groupedColumns[k];
       if(adgcg.children.length == 1)
       {
       } else {
        str+="<tr>";
        for(var m:int=0; m<adgcg.children.length; m++) {
         if(!adgcg.children[m].dataField)
         {
          str += "<td width=\""+Math.ceil(adgcg.children[m].width)+"\" "+style+"></td>";
         }
         else if(adgcg.children[m].labelFunction != undefined) {
          str+="<td width=\""+Math.ceil(adgcg.children[m].width)+"\" "+style+">"+adgcg.children[m].labelFunction(dg.dataProvider.getItemAt(j),adgcg.children[m].dataField)+"</td>";
         } else {
          str+="<td width=\""+Math.ceil(adgcg.children[m].width)+"\" "+style+">"+dg.dataProvider.getItemAt(j)[adgcg.children[m].dataField]+"</td>";
         }
        }
        str+="</tr>";
       }
       str+="</table></td>";
      }
      else if(dg.groupedColumns[k] as AdvancedDataGridColumn)
      {
       if(!dg.groupedColumns[k].dataField)
       {
        str += "<td width=\""+Math.ceil(dg.groupedColumns[k].width)+"\" "+style+"></td>";
       }
       else if(dg.groupedColumns[k].labelFunction != undefined) {
        str += "<td width=\""+Math.ceil(dg.groupedColumns[k].width)+"\" "+style+">"+dg.groupedColumns[k].labelFunction(dg.dataProvider.getItemAt(j),dg.groupedColumns[k].dataField)+"</td>";
       }
       else {
        str += "<td width=\""+Math.ceil(dg.groupedColumns[k].width)+"\" "+style+">"+dg.dataProvider.getItemAt(j)[dg.groupedColumns[k].dataField]+"</td>";
       }
      }
     }
    }
    str += "</tr>";
   }
   str+="</tbody></table></td></tr></table>";
   
   str = str.replace(myReg,"");
   return str;
  }
  
  //接Asp。net中 ashx一般处理程序,输出html成Excel文件 
  public function loadDGInExcel(dg:DataGrid,url:String,titleStr:String):void {
   var variables:URLVariables = new URLVariables();
   variables.htmltable = convertDGToHTMLTable(dg,titleStr);
   var u:URLRequest = new URLRequest(url);
   u.data = variables;
   u.method = URLRequestMethod.POST;
   navigateToURL(u,"_self");
  }
  
  public function loadADGInExcel(adg:AdvancedDataGrid,url:String,titleStr:String):void {
   var variables:URLVariables = new URLVariables();
   variables.htmltable = convertADGToHTMLTable(adg,titleStr);
   var u:URLRequest = new URLRequest(url);
   u.data = variables;
   u.method = URLRequestMethod.POST;
   navigateToURL(u,"_self");
  }
 }
 /* asp端代码
 <%@ WebHandler Language="C#" Class="JinExcelExport" %>
 using System;
 using System.Web;
 
 public class JinExcelExport : IHttpHandler {
 public void Proce***equest (HttpContext context) {
 context.Response.ContentType = "application/vnd.ms-excel";
 context.Response.AddHeader("Content-Disposition",
 string.Format("p_w_upload;filename=ExportExcel.xls"));
 context.Response.Write(context.Request.Form["htmltable"]);
 }
 
 public bool IsReusable {
 get {
 return false;
 }
 }*/
 
 
 /*import flash.system.System;
 import com.mycompany.dto.SaleDTO;
 
 public function exportAsTSVtoClipBoard():void
 {
 var TSVString:String = "";
 
 // Run through each field to create the column headers row
 
 TSVString += "Buyer name" + "\t";
 TSVString += "Buyer id" + "\t";
 TSVString += "Buyer address" + "\t";
 TSVString += "Gross Amount" + "\t";
 TSVString += "VAT AMount" + "\t";
 TSVString += "Net Amount" + "\t";
 
 // Line break
 TSVString += "\t" + "\t" + "\t" + "\t" + "\t" + "\n";
 
 // Run through each datagrid row
 
 for each(var item:SaleDTO in this.model.sales)
 {
 TSVString += item.buyerName + "\t";
 TSVString += item.buyerId + "\t";
 TSVString += item.buyerAddress + "\t";
 TSVString += this.numberFormatter.format(item.grossAmount) + "\t";
 TSVString += this.numberFormatter.format(item.vatAmount) + "\t";
 TSVString += this.numberFormatter.format(item.netAmount) + "\n";
 }
 
 // Copy the TSV string to the clipboard
 System.setClipboard(TSVString);
 }*/
}