各位高人,偶今天在由DataGrid导出Excel时遇到一个问题,就是偶的一个单元格的内容是从一个明细表取出的,我将每条明细单独一行,在DataGrid显示的时候用</br>来换行,可是在导出Excel的时候,没有换行,连带</br>一起导出在一个单元格中。
所以想请问各位高人如何才能做到导出后的Excel文件也能做到在这个单元格中分行啊?我试过用((char)10).ToString(),可是也没什么效果。谢谢!
所以想请问各位高人如何才能做到导出后的Excel文件也能做到在这个单元格中分行啊?我试过用((char)10).ToString(),可是也没什么效果。谢谢!
而不是</br>
{
if (j == 1)
{
Response.Write("<td>" + i.ToString() + j.ToString() + "<br>aaaaaaaa" + "</td>");//输出的第二列,这一列就分了行
}
else
{
Response.Write("<td>" + i.ToString() + j.ToString() + "</td>");
}
}头和尾的部分写成了方法
就不全贴出来了
贴出来的是写Table的一部分
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(" ", "") + "\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>");
}
}
呵呵,这个我已经试过了,也是导成Excel是没问题的
不但Excel没问题,Word也可以,都是MS做的,它们都认识,哈哈
是<br>的,我写错了而已,
=================================
是吗?
那为什么我可以成功呢?你可以这样试一下
你把你的Excel保存以后打开(用Office)
选择一个单元格然后按Alt+Enter来换行
保存再用UE或者记事本打开该文件并找到你改过的那个单元格的位置
你会发现那个地方就多了个<br>这个应该是不会有问题的啊
我其实也就是在页面个画了个Table
你的方法我还没看明白,呵呵而我画的那个Table就会直接存到Excel文件里(看起来和在IE看的差不多)我还是把我的代码都贴出来好了
{
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方法里
关键应该在你是怎么写的因为你用的方法我没用过也没见过
所以也不太清楚问题出在什么地方如果你不赚麻烦的话可以转用我贴的方式试试