卡号 姓名           证件类别  证件号码 地址 总次数 总金额 折后金额
1 1 鍏朵粬璇佷欢     0 1 0 0
2 2 韬唤璇?/td> 4 0 0
页面数据:
卡号 姓名 证件类别 证件号码 地址 总次数 总金额 折后金额 
001  001  其他证件  00000   1  0.0000  0.0000  
002  002  身份证    4  0.0000  0.0000      导出ECLE代码:
  public static void DataTableToExcel(System.Data.DataTable dtData)
        {
            //dtData.TableName = dtData.TableName.Substring(dtData.TableName.LastIndexOf('.') + 1, dtData.TableName.Length - dtData.TableName.LastIndexOf('.') - 1);
            //将标头替换成中文显示
            //foreach (DataColumn DC in dtData.Columns)
            //{
            //DC.ColumnName = Global.GetFieldChName(dtData.TableName + "." + DC.ColumnName);
            //}            System.Web.UI.WebControls.DataGrid dgExport = null;
            // 当前对话 
            System.Web.HttpContext curContext = System.Web.HttpContext.Current;
            // IO用于导出并返回excel文件 
            System.IO.StringWriter strWriter = null;
            System.Web.UI.HtmlTextWriter htmlWriter = null;            if (dtData != null)
            {
                // 导出excel文件 
                strWriter = new System.IO.StringWriter();
                htmlWriter = new System.Web.UI.HtmlTextWriter(strWriter);                // 为了解决dgData中可能进行了分页的情况,需要重新定义一个无分页的DataGrid 
                dgExport = new System.Web.UI.WebControls.DataGrid();
                dgExport.DataSource = dtData.DefaultView;
                dgExport.AllowPaging = false;
                //dgExport.ItemDataBound += new DataGridItemEventHandler(dgExport_ItemDataBound);
                dgExport.DataBind();                // 设置编码和附件格式 
                curContext.Response.ContentType = "application/vnd.ms-excel";
                curContext.Response.ContentEncoding = System.Text.Encoding.UTF8;
                curContext.Response.Charset = "gb2312";
                // 添加头信息,为"文件下载/另存为"对话框指定默认文件名 
                curContext.Response.AddHeader("Content-Disposition", "attachment; filename=Report.xls");
                // 添加头信息,指定文件大小,让浏览器能够显示下载进度 
                //curContext.Response.AddHeader("Content-Length", htmlWriter...ToString());                // 返回客户端 
                dgExport.RenderControl(htmlWriter);
                curContext.Response.Write(strWriter.ToString());
                curContext.Response.End();
            }
        }
         整个系统的导出调用的全是这个方法  为什么唯独有一个页面的导出来的数据为乱码数据!
         如何解决!
   

解决方案 »

  1.   

    百度,从找个导出execl的代码吧~
      

  2.   

    编码改为 GBK试试。我也遇到过这样的问题。
      

  3.   

    1、由dataset生成public void CreateExcel(DataSet ds,string typeid,string FileName) 
      {
       HttpResponse resp;
       resp = Page.Response;
       resp.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");
       resp.AppendHeader("Content-Disposition", "attachment;filename=" + FileName);   
       string colHeaders= "", ls_item="";
       int i=0;
     
       //定义表对象与行对像,同时用DataSet对其值进行初始化
       DataTable dt=ds.Tables[0];
       DataRow[] myRow=dt.Select(""); 
       // typeid=="1"时导出为EXCEL格式文件;typeid=="2"时导出为XML格式文件
       if(typeid=="1")
       {
        //取得数据表各列标题,各标题之间以\t分割,最后一个列标题后加回车符
        for(i=0;i     colHeaders+=dt.Columns[i].Caption.ToString()+"\t";
        colHeaders +=dt.Columns[i].Caption.ToString() +"\n";   
        //向HTTP输出流中写入取得的数据信息
        resp.Write(colHeaders); 
        //逐行处理数据  
        foreach(DataRow row in myRow)
        {
         //在当前行中,逐列获得数据,数据之间以\t分割,结束时加回车符\n
         for(i=0;i      ls_item +=row[i].ToString() + "\t";     
         ls_item += row[i].ToString() +"\n";
         //当前行数据写入HTTP输出流,并且置空ls_item以便下行数据    
         resp.Write(ls_item);
         ls_item="";
        }
       }
       else
       {
        if(typeid=="2")
        { 
         //从DataSet中直接导出XML数据并且写到HTTP输出流中
         resp.Write(ds.GetXml());
        }    
       }
       //写缓冲区中的数据到HTTP头文件中
       resp.End();
     
     
      }
    2、由datagrid生成public void ToExcel(System.Web.UI.Control ctl)  
      {
       HttpContext.Current.Response.AppendHeader("Content-Disposition","attachment;filename=Excel.xls");
       HttpContext.Current.Response.Charset ="UTF-8";    
       HttpContext.Current.Response.ContentEncoding =System.Text.Encoding.Default;
       HttpContext.Current.Response.ContentType ="application/ms-excel";//image/JPEG;text/HTML;image/GIF;vnd.ms-excel/msword
       ctl.Page.EnableViewState =false;   
       System.IO.StringWriter  tw = new System.IO.StringWriter() ;
       System.Web.UI.HtmlTextWriter hw = new System.Web.UI.HtmlTextWriter (tw);
       ctl.RenderControl(hw);
       HttpContext.Current.Response.Write(tw.ToString());
       HttpContext.Current.Response.End();
      }
     
    用法:ToExcel(datagrid1);
     3、这个用dataviewpublic void OutputExcel(DataView dv,string str)
    {
       //
       // TODO: 在此处添加构造函数逻辑
       //
                               //dv为要输出到Excel的数据,str为标题名称
       GC.Collect();
       Application excel;// = new Application();
       int rowIndex=4;
       int colIndex=1;
     
       _Workbook xBk;
       _Worksheet xSt;
     
       excel= new ApplicationClass();
      
       xBk = excel.Workbooks.Add(true);
       
       xSt = (_Worksheet)xBk.ActiveSheet;
     
       //
       //取得标题
       //
       foreach(DataColumn col in dv.Table.Columns)
       {
        colIndex++;
        excel.Cells[4,colIndex] = col.ColumnName;
        xSt.get_Range(excel.Cells[4,colIndex],excel.Cells[4,colIndex]).HorizontalAlignment = XlVAlign.xlVAlignCenter;//设置标题格式为居中对齐
       }
     
       //
       //取得表格中的数据
       //
       foreach(DataRowView row in dv)
       {
        rowIndex ++;
        colIndex = 1;
        foreach(DataColumn col in dv.Table.Columns)
        {
         colIndex ++;
         if(col.DataType == System.Type.GetType("System.DateTime"))
         {
          excel.Cells[rowIndex,colIndex] = (Convert.ToDateTime(row[col.ColumnName].ToString())).ToString("yyyy-MM-dd");
          xSt.get_Range(excel.Cells[rowIndex,colIndex],excel.Cells[rowIndex,colIndex]).HorizontalAlignment = XlVAlign.xlVAlignCenter;//设置日期型的字段格式为居中对齐
         }
         else
          if(col.DataType == System.Type.GetType("System.String"))
         {
          excel.Cells[rowIndex,colIndex] = "'"+row[col.ColumnName].ToString();
          xSt.get_Range(excel.Cells[rowIndex,colIndex],excel.Cells[rowIndex,colIndex]).HorizontalAlignment = XlVAlign.xlVAlignCenter;//设置字符型的字段格式为居中对齐
         }
         else
         {
          excel.Cells[rowIndex,colIndex] = row[col.ColumnName].ToString();
         }
        }
       }
       //
       //加载一个合计行
       //
       int rowSum = rowIndex + 1;
       int colSum = 2;
       excel.Cells[rowSum,2] = "合计";
       xSt.get_Range(excel.Cells[rowSum,2],excel.Cells[rowSum,2]).HorizontalAlignment = XlHAlign.xlHAlignCenter;
       //
       //设置选中的部分的颜色
       //
       xSt.get_Range(excel.Cells[rowSum,colSum],excel.Cells[rowSum,colIndex]).Select();
       xSt.get_Range(excel.Cells[rowSum,colSum],excel.Cells[rowSum,colIndex]).Interior.ColorIndex = 19;//设置为浅黄色,共计有56种
       //
       //取得整个报表的标题
       //
       excel.Cells[2,2] = str;
       //
       //设置整个报表的标题格式
       //
       xSt.get_Range(excel.Cells[2,2],excel.Cells[2,2]).Font.Bold = true;
       xSt.get_Range(excel.Cells[2,2],excel.Cells[2,2]).Font.Size = 22;
       //
       //设置报表表格为最适应宽度
       //
       xSt.get_Range(excel.Cells[4,2],excel.Cells[rowSum,colIndex]).Select();
       xSt.get_Range(excel.Cells[4,2],excel.Cells[rowSum,colIndex]).Columns.AutoFit();
       //
       //设置整个报表的标题为跨列居中
       //
       xSt.get_Range(excel.Cells[2,2],excel.Cells[2,colIndex]).Select();
       xSt.get_Range(excel.Cells[2,2],excel.Cells[2,colIndex]).HorizontalAlignment = XlHAlign.xlHAlignCenterAcrossSelection;
       //
       //绘制边框
       //
       xSt.get_Range(excel.Cells[4,2],excel.Cells[rowSum,colIndex]).Borders.LineStyle = 1;
       xSt.get_Range(excel.Cells[4,2],excel.Cells[rowSum,2]).Borders[XlBordersIndex.xlEdgeLeft].Weight = XlBorderWeight.xlThick;//设置左边线加粗
       xSt.get_Range(excel.Cells[4,2],excel.Cells[4,colIndex]).Borders[XlBordersIndex.xlEdgeTop].Weight = XlBorderWeight.xlThick;//设置上边线加粗
       xSt.get_Range(excel.Cells[4,colIndex],excel.Cells[rowSum,colIndex]).Borders[XlBordersIndex.xlEdgeRight].Weight = XlBorderWeight.xlThick;//设置右边线加粗
       xSt.get_Range(excel.Cells[rowSum,2],excel.Cells[rowSum,colIndex]).Borders[XlBordersIndex.xlEdgeBottom].Weight = XlBorderWeight.xlThick;//设置下边线加粗
       //
       //显示效果
       //
       excel.Visible=true;
     
       //xSt.Export(Server.MapPath(".")+"\\"+this.xlfile.Text+".xls",SheetExportActionEnum.ssExportActionNone,Microsoft.Office.Interop.OWC.SheetExportFormat.ssExportHTML);
       xBk.SaveCopyAs(Server.MapPath(".")+"\\"+this.xlfile.Text+".xls");
     
       ds = null;
                xBk.Close(false, null,null);
       
                excel.Quit();
                System.Runtime.InteropServices.Marshal.ReleaseComObject(xBk);
                System.Runtime.InteropServices.Marshal.ReleaseComObject(excel);
        System.Runtime.InteropServices.Marshal.ReleaseComObject(xSt);
                xBk = null;
                excel = null;
       xSt = null;
                GC.Collect();
       string path = Server.MapPath(this.xlfile.Text+".xls");
     
       System.IO.FileInfo file = new System.IO.FileInfo(path);
       Response.Clear();
       Response.Charset="GB2312";
       Response.ContentEncoding=System.Text.Encoding.UTF8;
       // 添加头信息,为"文件下载/另存为"对话框指定默认文件名
       Response.AddHeader("Content-Disposition", "attachment; filename=" + Server.UrlEncode(file.Name));
       // 添加头信息,指定文件大小,让浏览器能够显示下载进度
       Response.AddHeader("Content-Length", file.Length.ToString());
       
       // 指定返回的是一个不能被客户端读取的流,必须被下载
       Response.ContentType = "application/ms-excel";
       
       // 把文件流发送到客户端
       Response.WriteFile(file.FullName);
       // 停止页面的执行
      
       Response.End();
      

  4.   

    gridview导出excel
    打开excel 模板赋值给单元格
    编码问题
    Response.Charset = "UTF-8";  
    Response.ContentEncoding = System.Text.Encoding.GetEncoding("UTF-8");