各位高人,偶今天在由DataGrid导出Excel时遇到一个问题,就是偶的一个单元格的内容是从一个明细表取出的,我将每条明细单独一行,在DataGrid显示的时候用</br>来换行,可是在导出Excel的时候,没有换行,连带</br>一起导出在一个单元格中。
所以想请问各位高人如何才能做到导出后的Excel文件也能做到在这个单元格中分行啊?我试过用((char)10).ToString(),可是也没什么效果。谢谢!

解决方案 »

  1.   

    用<br>
    而不是</br>
      

  2.   

    关注,也正遇到 导出Excel的问题,可否贴一下代码?
      

  3.   

    会不会是 EXCEL 单元格格式的问题?
      

  4.   

    for (int j = 0;j <= 7;j++)
                {
                    if (j == 1)
                   
                    {
                        Response.Write("<td>" + i.ToString() + j.ToString()  + "<br>aaaaaaaa" + "</td>");//输出的第二列,这一列就分了行
                    }
                    else
                    {
                        Response.Write("<td>" + i.ToString() + j.ToString() + "</td>");
                    }
                }头和尾的部分写成了方法
    就不全贴出来了
    贴出来的是写Table的一部分
      

  5.   

    楼上的,在DataGrid显示的时候用<br>换行是没有问题的,问题是导出到Excel的时候,Excel中的这个单元格的没有换行,而是把<br>也一并导出来了
    private void ExportExcel(DataGrid dataGrid)
            {
                if (Session["zbBigLabelSettingDataset1"] != null)
                {
                    ZbBigLabelSettingDataset ds = 
                        Session["zbBigLabelSettingDataset1"] as ZbBigLabelSettingDataset;                StringWriter sw = new StringWriter();
                    for(int i = 0; i < dataGrid.Columns.Count - 1; i++)
                    {
                        //如果列宽为0则不导出
                        if(!dataGrid.Columns[i].Visible)
                            continue;
                        sw.Write(dataGrid.Columns[i].HeaderText + "\t");                
                    }
                    sw.Write("左描述" + "\t");
                    sw.Write("右描述" + "\t");
                    sw.WriteLine();
                
                    foreach(DataGridItem item in dataGrid.Items)
                    {
                        string[] leftDescription = bigLabelSettting.GetLeftDescription(item.Cells[0].Text, 
                            item.Cells[1].Text);
                        string[] rightDescription = bigLabelSettting.GetRightDescription(item.Cells[0].Text, 
                            item.Cells[1].Text);                    for(int i = 0; i < item.Cells.Count - 1; i++)
                        {
                            sw.Write(item.Cells[i].Text.Replace("&nbsp;", "") + "\t");
                        }                    string leftDesc = string.Empty;
                        if (leftDescription.Length > 0)
                        {
                            for (int j = 0; j < leftDescription.Length; j++)
                            {
                                leftDesc += leftDescription[j] + ((char)10).ToString();
                            }
                        }                    string rightDesc = string.Empty;
                        if (rightDescription.Length > 0)
                        {
                            for (int j = 0; j < rightDescription.Length; j++)
                            {
                                rightDesc += rightDescription[j] + ((char)10).ToString();
                            }
                        }                    sw.Write(leftDesc + "\t");
                        sw.Write(rightDesc + "\t");                    sw.WriteLine();
                    }
                    sw.Close();
                    Response.Clear();
                    Response.AddHeader("Content-Disposition", "attachment; filename=" + DateTime.Now.ToShortDateString()+ ".xls");
                    Response.ContentType = "application/ms-excel";
                    Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");
                    Response.Write(sw);
                    Response.End();
                }
                else
                {
                    Response.Write("<script>alert('没有数据可以导出')</script>");
                }
            }
      

  6.   

    </br>有误,楼上有人指出了,应当是<br>这种导出应当可以识别html的我用&nbsp;试过,可以认出是空格
      

  7.   

    是<br>的,我写错了而已,
      

  8.   

    To Philip3(3)
      呵呵,这个我已经试过了,也是导成Excel是没问题的
    不但Excel没问题,Word也可以,都是MS做的,它们都认识,哈哈
      

  9.   

    Philip3(3) ( ) 信誉:93    Blog  2006-11-23 15:19:24  得分: 0  
     
     
       是<br>的,我写错了而已,
      
     
    =================================
    是吗?
    那为什么我可以成功呢?你可以这样试一下
    你把你的Excel保存以后打开(用Office)
    选择一个单元格然后按Alt+Enter来换行
    保存再用UE或者记事本打开该文件并找到你改过的那个单元格的位置
    你会发现那个地方就多了个<br>这个应该是不会有问题的啊
      

  10.   

    To conan1211(柯楠)  不会吧,你是从table导出到Excel的么?我是从DataGrid导出的,这样是不是有影响呢?
      

  11.   

    其实这个是没关系的
    我其实也就是在页面个画了个Table
    你的方法我还没看明白,呵呵而我画的那个Table就会直接存到Excel文件里(看起来和在IE看的差不多)我还是把我的代码都贴出来好了
      

  12.   

    public void  Report2()
         {
            ResponseHeader(this);        //write head
            Response.Write("<tr>");
            Response.Write("<td bgcolor=#CCFFFF>部門代號</td>");
            Response.Write("<td bgcolor=#CCFFFF>身份證</td>");
            Response.Write("<td bgcolor=#CCFFFF>會員</td>");
            Response.Write("<td bgcolor=#CCFFFF>紅利積點</td>");
            Response.Write("<td bgcolor=#CCFFFF>異動日</td>");
            Response.Write("<td bgcolor=#CCFFFF>異動原因</td>");
            Response.Write("<td bgcolor=#CCFFFF>訂單編號</td>");
            Response.Write("<td bgcolor=#CCFFFF>異動者</td>");
            Response.Write("</tr>");        for (int i = 0;i <= 10;i++)
            {
                Response.Write("<tr>");
                for (int j = 0;j <= 7;j++)
                {
                    if (j == 1)                {
                        Response.Write("<td>" + i.ToString() + j.ToString()  + "<br>aaaaaaaa" + "</td>");
                    }
                    else
                    {
                        Response.Write("<td>" + i.ToString() + j.ToString() + "</td>");
                    }
                }
                Response.Write("</tr>");
            }
               
            ResponseFooter(this);
         }
          public void ResponseHeader(System.Web.UI.Page inClass)
          {
            inClass.Response.Clear();
            inClass.Response.Buffer = true;
            inClass.Response.Charset = "utf-8";
            inClass.Response.ContentType = "application/ms-Word";
            inClass.Response.AppendHeader("Content-Disposition","attachment;filename=FileFlow.doc");
            inClass.Response.ContentEncoding = System.Text.Encoding.GetEncoding("utf-8");
            inClass.Response.ContentType = "application/ms-Word";
            inClass.Response.Write("<html><head>");
            inClass.Response.Write("<meta http-equiv='Content-Type' content='text/html; charset=utf-8'>");
            inClass.Response.Write("</head>");
            inClass.Response.Write("<table border=1>");    }    public void ResponseFooter(System.Web.UI.Page inClass )
        {
            inClass.Response.Write("</table>");
            inClass.Response.Write("</html>");
            inClass.Response.End();
            
        }
        protected void Button1_Click(object sender, EventArgs e)
        {
            this.Report2();
        }一共就这几个方法
    主要是Report2方法来画Table中的内容
    其它的为了方便就写在了ResponseHeader和ResponseFooter方法里
      

  13.   

    其实你说的写Grid也是把Grid中的数据取出来用
    关键应该在你是怎么写的因为你用的方法我没用过也没见过
    所以也不太清楚问题出在什么地方如果你不赚麻烦的话可以转用我贴的方式试试
      

  14.   

    可不可以将:EXCEL 格式要刷成自动换行44