强烈建议版主把此贴置顶,昨天连开N贴居然无人能解~损失几百分了,一个导出成EXCEL保持原样的问题!

时间:2022-09-07 12:40:48
现在有这么一个情况,就是我把datagrid导出到EXCEL中,本来每一列标题栏里头的那些标题在IE中都是两行显示的(因为标题都比较长),但是我到出到EXCEL中后,那些标题自动就被调整到一行里头显示了,每一列也就相应变宽了,我想在EXCEL中维持IE中看到的样子,标题还是在EXCEL中两行显示,请问怎么做呀?谢谢~

请详细讲述解决过程~

还有,这个是导出到客户端,不是导出到服务器上!!!

原贴位置:
http://community.csdn.net/Expert/topic/3852/3852705.xml?temp=.8561518
http://community.csdn.net/Expert/topic/3852/3852266.xml?temp=8.222598E-02
http://community.csdn.net/Expert/topic/3851/3851802.xml?temp=.9751703

谁解决了这些分全部给他,欢迎大家都来给点建议!

41 个解决方案

#1


还是自己先UP

#2


还是没有人来么?

#3


如果要导出到客户端可以先导在服务器端,作为临时存放,然后用下载文件的方法,把文件传输到客户端,
至于原样导入Excel我也正在研究这个问题,我的DataGrid是嵌套的,在Excel中需要有些单元格合并起来

#4


现在保存为EXCEL没有什么问题,关键是要实现保持原样呀~~
大家一起叫版主把此贴置顶吧~看看有没有人能解决
这个东西也应该是经常用到的呀~

#5


你可以考虑录制宏的方法得到VB脚本,再用在你的页面中的客户端脚本里。
我记得Excel里的Cell有一个属性是NoWrap,这个属性也许能解决你的问题。
你可以尝试在一个单元格内填入很长的字符串,然后调整它,使它回行,整个过程在宏的监视下完成。之后你便能得到脚本了

#6


IE的单元格可以自动换行,而excel里只能添加控制符进行实现,所以,直接导出来是不会换行的。

#7


这个论坛能置顶的吗?

#8


Excel.Application oXL;
Excel._Workbook oWB;
Excel._Worksheet oSheet;
object oMissing =System.Reflection.Missing.Value;
Excel.Range oRng;
int row=5;
oXL = new Excel.ApplicationClass();
// oXL.Visible = true;
//创建一个新的workboot
//oWB = (Excel._Workbook)(oXL.Workbooks.Add(true));
oWB = (Excel._Workbook)(oXL.Workbooks.Add(oMissing));
oSheet= (Excel._Worksheet)oWB.ActiveSheet;
sql="";
search();
rd=new curruser();
SqlDataReader rdr;
if(sql=="")
{
 rdr=rd.GetDataReader("select  * from OPERATION_SUM where year='"+DateTime.Now.Year.ToString()+"' and month='"+DateTime.Now.Month.ToString()+"'");
}
else
{
 rdr=rd.GetDataReader("select  * from OPERATION_SUM "+sql);
}

oSheet.Cells[1, 1] = "TO:MR.MAEDA";
oSheet.Cells[2, 1] = "CC:MR.JOHN";
oSheet.Cells[3, 1] = "  :MR.MIKE";
if(DropDownList2.SelectedItem.Text!="")
{
oSheet.Cells[4, 1] = "KWESZX OPERATION SUMMARY IN "+DropDownList2.SelectedItem.Text+","+DropDownList3.SelectedItem.Text;
}
else
{
oSheet.Cells[4, 1] = "KWESZX OPERATION SUMMARY IN "+DateTime.Now.Month.ToString()+","+DateTime.Now.Year.ToString();
}
oSheet.Cells[row, 1] = "CUSTOMER";
oSheet.Cells[row, 2] = "DOMESTIC SHIPMENT";
oSheet.Cells[row, 3] = "CROSS BOARDER SHIPMENT";
oSheet.Cells[row, 4] = "OPERATION SHIPMENT";
oSheet.Cells[row, 5] = "DOMESTIC TRUCKING AMOUNT";
row=row+1;
int i=0;
int j=0;
while(rdr.Read())
{
i+=System.Convert.ToInt32(rdr["DOMESTIC_SHIPMENT"]);
j+=System.Convert.ToInt32(rdr["OPERATION_SHIPMENT"]);
oSheet.Cells[row,1]=System.Convert.ToString(rdr["Customer_Team"]);
oSheet.Cells[row,2]=System.Convert.ToString(rdr["DOMESTIC_SHIPMENT"]);
oSheet.Cells[row,4]=System.Convert.ToString(rdr["OPERATION_SHIPMENT"]);
row=row+1;
}
            oSheet.Cells[row, 1] = "TOTAL";
oSheet.Cells[row, 2] = i;
            oSheet.Cells[row, 4] = j;
//oSheet.get_Range("a"+row,"m"+row).Merge(true) ;
  
//在特定的四个单元格中填入内容
//oSheet.get_Range("A1","e1").Font.Size= 24 ;
//oSheet.get_Range("A1","e1").Font.Bold = true;
//oSheet.get_Range("A1","e1").VerticalAlignment =  Excel.XlVAlign.xlVAlignCenter;

//该范围内设置外面一层边框
//oSheet.get_Range("A1","e1").BorderAround(Excel.XlLineStyle.xlContinuous,Excel.XlBorderWeight.xlThin ,Excel.XlColorIndex.xlColorIndexAutomatic,Color.Black.ToArgb()) ;

//该范围内设置里面所有单元格的边框
//oSheet.get_Range("A1","e1").Borders.Weight = Excel.XlBorderWeight.xlThin ;
// oSheet.get_Range("A1","h1").Borders.Color = Color.Black.ToArgb() ;

//合并该范围内的所有单位格为一个单元格
//oSheet.get_Range("A1","e1").Merge(true) ;
//oSheet.get_Range("a2","h2").Merge(true) ;

//范围内单元格自动适应文字的长短
//oRng = oSheet.get_Range("A1", "e1");
//oRng.HorizontalAlignment=Excel.XlHAlign.xlHAlignCenter;//水平方向居中
//oRng.VerticalAlignment=Excel.XlVAlign.xlVAlignCenter;//竖直方向居中
//oRng.EntireColumn.AutoFit();

//范围内单元格添加背景颜色
//oSheet.get_Range("A1","h1").Cells.Interior.Color = Color.LightGray.ToArgb() ;
//oSheet.get_Range("A1","h1").Cells.Interior.Pattern = Excel.XlBackground.xlBackgroundAutomatic ;
oRng = oSheet.get_Range("A5", "e"+System.Convert.ToString(row));
oRng.Font.Name="宋体";
oRng.Font.Size=14;
//oRng.Font.ColorIndex=5;//字体颜色
oRng.HorizontalAlignment=Excel.XlHAlign.xlHAlignCenter;//水平方向居中
oRng.Cells.Borders.LineStyle=Excel.XlLineStyle.xlContinuous;//加表格线
oRng.Borders.Weight=Excel.XlBorderWeight.xlThin;//细线

//外边框加粗
oRng.Borders[Excel.XlBordersIndex.xlEdgeLeft].Weight=Excel.XlBorderWeight.xlMedium;
oRng.Borders[Excel.XlBordersIndex.xlEdgeRight].Weight=Excel.XlBorderWeight.xlMedium;
oRng.Borders[Excel.XlBordersIndex.xlEdgeTop].Weight=Excel.XlBorderWeight.xlMedium;
oRng.Borders[Excel.XlBordersIndex.xlEdgeBottom].Weight= Excel.XlBorderWeight.xlMedium;
// oRng.get_Range("b1","b1").ColumnWidth=12.25;
// oRng.get_Range("d1","d1").ColumnWidth=9.63;
// oRng.get_Range("h1","h1").ColumnWidth=15;
oRng.EntireColumn.AutoFit();//自动调整列宽
oRng.WrapText=true;//自动换行
oRng.VerticalAlignment=Excel.XlVAlign.xlVAlignCenter;//竖直方向居中
oRng.EntireRow.AutoFit();//自动调整行高
oWB.SaveAs("c:\\Inetpub\\wwwroot\\transportation\\Excel\\Operation_summary.xls",System.Reflection.Missing.Value,"","",true,false,Excel.XlSaveAsAccessMode.xlNoChange,1,true,System.Reflection.Missing.Value,oMissing,oMissing);
oWB.Close(false,null,null);
oXL.UserControl =false;
oXL.Quit();
System.Runtime.InteropServices.Marshal.ReleaseComObject(oSheet);
System.Runtime.InteropServices.Marshal.ReleaseComObject(oWB);
System.Runtime.InteropServices.Marshal.ReleaseComObject(oXL);
oSheet = null;
oXL = null;
oWB = null;
System.GC.Collect();
Response.Write("<script>window.open('../transportation/excel/Operation_summary.xls');</script>");

#9


TO:luyuan6894(陆云龙)
能具体说说步骤么?

To:net_lover(孟子E章)
我以前看到过一个用PB编的程序,到处成EXCEL之后,开始EXCEL中也没有表格中的格式,但是,一会它就自动调整出格式了,不知道这个是不是像luyuan6894(陆云龙)说的那样用宏实现的呢?

TO: bitsbird(一瓢 单身走我路)
我的表格的标头相当复杂,用程序一格一格的到处不太现实,确实太复杂了

#10


学习!

#11



public bool ExportDataTableToFile(int FileType,DataTable Dt,string FileName,DataGrid Dg)
{

bool RValue=false;
string Lines="";
FileStream fs = new FileStream(FileName,FileMode.Create  , FileAccess.Write, FileShare.None);
StreamWriter TmpFile = new StreamWriter(fs , System.Text.Encoding.GetEncoding("GB2312"));
int i=0;
Lines="";
for(i=0;i<Dg.Columns.Count ;i++)
{
Lines+=Dg.Columns[i].HeaderText+" "; 
}
TmpFile.WriteLine(Lines);

for( i=0;i<Dt.Rows.Count ;i++)
{
Lines="";
for(int j=0;j<Dt.Columns.Count;j++)
{
Regex r = new Regex(@"^\d+$");

string t="";

decimal d=0;
t=Dt.Rows[i][j].ToString().Trim();
if(r.IsMatch(t))
{
d=Convert.ToDecimal ( t);
Lines+=d.ToString("N")+" ";
}
else
{
Lines+=t+" ";
}
}
TmpFile.WriteLine(Lines);

}
TmpFile.Close();
RValue=true;
return RValue;
}
一点建议:首先导出时不要使用Excel文件来导出,直接将要导出的数据和列标头写成一个文本文件,没个字段用TAB键分开,保存时将文件名的后缀写成.xls就可以了
先写在服务器上,在从客户端下载是比较好的方法,以上代代码的函数,将绑定在datagrid中的datatable所有数据导出,并且导出datagrid的列标题
另外,如果直接使用datagrid导出数据,当数据量很大的时候,速度会很慢,如果datagrid是翻页的话,则只能导出当前页的数据

#12


help up

#13


TO: Eagle_Tiger(孤刀浪子)
表头太复杂,你的方法到处很困难呀~~~

#14


顶!

#15


Annex

#16


up

#17


关于导出EXCEL的问题,我研究了好久,一个是客户端OFFICE版本的问题,另外就是如何让datagrid原样显示的问题,到现在都没有特别好的解决方法,最好最方便最简单的还是用脚本,但这有一个弊端,就是客户端的IE安全级别必须设置为低
给你参考一下:
http://www.cnblogs.com/acelove/archive/2005/02/23/108183.html

#18


学习

#19


学习

#20


版主呀~~把这个帖子置顶吧~看看谁能解决~~`

#21


高手都进来看看呀~

#22


救命呀~

#23


帮你顶 希望高手能来回答啊!

#24


我也遇到过相同的问题.也搞了很久,但还是不行.

#25


高手还没有来呀?

#26


有人没有?

#27


来人呀~

#28


你那个折行是自动折的吧,
如果你用手个折的话(在中间驾加入<br>),我想应该没有你那个问题了

#29


UP

#30


没有人知道吗?
真的没有吗?

#31


提供一个空白excel文件,把表头的格式做好
数据导出时,往这个空白文件里导,另存成最后的文档

#32


没有谁解决过这个问题吗?

#33


TO: littlegang(Gang)
说说具体步骤,或提供点资料~如果知道的话

#34


littlegang(Gang) 的方法可行,就是创建一个模版,再去填充啊

#35


gz

#36


我在pb里是先保存为html格式,然后用excel打开,没有问题

#37


自定义格式:                      
                           DataTable dt = new DataTable();

DataRow dn;

dt.Columns.Add();
dt.Columns.Add();
dt.Columns.Add();

//Titile1
dn=dt.NewRow();
dn[0]="International <BR> Business";
dt.Rows.Add(dn);
//Titile2
dn=dt.NewRow();
dn[0]="International <BR> Business";
dt.Rows.Add(dn);
//Title3
dn=dt.NewRow();
dn[0]="International <BR> Business";
dt.Rows.Add(dn);

                           DataView dv = new DataView(dt);

                           datagrid1.DataSource=dv;
                           datagrid1.DataBind();
最后导出Excel。

#38


楼主注意这个属性:WrapText //自动换行
xlSheet.Range(.Cells(1, 1), .Cells(1, colIndex)).WrapText = True

#39


今天才看到这个贴,昨晚一个晚上就搞好了,很简单啊,DIV加style就可以了,合并的也没问题

#40


TO:
yuxiang9999(用C#重载比尔盖茨) 

请说说具体步骤呀~如果知道的话,表头的分行也要保持哟~~~

#41


希望会的朋友把方法详细讲述一下,贴出来,造福人类

#1


还是自己先UP

#2


还是没有人来么?

#3


如果要导出到客户端可以先导在服务器端,作为临时存放,然后用下载文件的方法,把文件传输到客户端,
至于原样导入Excel我也正在研究这个问题,我的DataGrid是嵌套的,在Excel中需要有些单元格合并起来

#4


现在保存为EXCEL没有什么问题,关键是要实现保持原样呀~~
大家一起叫版主把此贴置顶吧~看看有没有人能解决
这个东西也应该是经常用到的呀~

#5


你可以考虑录制宏的方法得到VB脚本,再用在你的页面中的客户端脚本里。
我记得Excel里的Cell有一个属性是NoWrap,这个属性也许能解决你的问题。
你可以尝试在一个单元格内填入很长的字符串,然后调整它,使它回行,整个过程在宏的监视下完成。之后你便能得到脚本了

#6


IE的单元格可以自动换行,而excel里只能添加控制符进行实现,所以,直接导出来是不会换行的。

#7


这个论坛能置顶的吗?

#8


Excel.Application oXL;
Excel._Workbook oWB;
Excel._Worksheet oSheet;
object oMissing =System.Reflection.Missing.Value;
Excel.Range oRng;
int row=5;
oXL = new Excel.ApplicationClass();
// oXL.Visible = true;
//创建一个新的workboot
//oWB = (Excel._Workbook)(oXL.Workbooks.Add(true));
oWB = (Excel._Workbook)(oXL.Workbooks.Add(oMissing));
oSheet= (Excel._Worksheet)oWB.ActiveSheet;
sql="";
search();
rd=new curruser();
SqlDataReader rdr;
if(sql=="")
{
 rdr=rd.GetDataReader("select  * from OPERATION_SUM where year='"+DateTime.Now.Year.ToString()+"' and month='"+DateTime.Now.Month.ToString()+"'");
}
else
{
 rdr=rd.GetDataReader("select  * from OPERATION_SUM "+sql);
}

oSheet.Cells[1, 1] = "TO:MR.MAEDA";
oSheet.Cells[2, 1] = "CC:MR.JOHN";
oSheet.Cells[3, 1] = "  :MR.MIKE";
if(DropDownList2.SelectedItem.Text!="")
{
oSheet.Cells[4, 1] = "KWESZX OPERATION SUMMARY IN "+DropDownList2.SelectedItem.Text+","+DropDownList3.SelectedItem.Text;
}
else
{
oSheet.Cells[4, 1] = "KWESZX OPERATION SUMMARY IN "+DateTime.Now.Month.ToString()+","+DateTime.Now.Year.ToString();
}
oSheet.Cells[row, 1] = "CUSTOMER";
oSheet.Cells[row, 2] = "DOMESTIC SHIPMENT";
oSheet.Cells[row, 3] = "CROSS BOARDER SHIPMENT";
oSheet.Cells[row, 4] = "OPERATION SHIPMENT";
oSheet.Cells[row, 5] = "DOMESTIC TRUCKING AMOUNT";
row=row+1;
int i=0;
int j=0;
while(rdr.Read())
{
i+=System.Convert.ToInt32(rdr["DOMESTIC_SHIPMENT"]);
j+=System.Convert.ToInt32(rdr["OPERATION_SHIPMENT"]);
oSheet.Cells[row,1]=System.Convert.ToString(rdr["Customer_Team"]);
oSheet.Cells[row,2]=System.Convert.ToString(rdr["DOMESTIC_SHIPMENT"]);
oSheet.Cells[row,4]=System.Convert.ToString(rdr["OPERATION_SHIPMENT"]);
row=row+1;
}
            oSheet.Cells[row, 1] = "TOTAL";
oSheet.Cells[row, 2] = i;
            oSheet.Cells[row, 4] = j;
//oSheet.get_Range("a"+row,"m"+row).Merge(true) ;
  
//在特定的四个单元格中填入内容
//oSheet.get_Range("A1","e1").Font.Size= 24 ;
//oSheet.get_Range("A1","e1").Font.Bold = true;
//oSheet.get_Range("A1","e1").VerticalAlignment =  Excel.XlVAlign.xlVAlignCenter;

//该范围内设置外面一层边框
//oSheet.get_Range("A1","e1").BorderAround(Excel.XlLineStyle.xlContinuous,Excel.XlBorderWeight.xlThin ,Excel.XlColorIndex.xlColorIndexAutomatic,Color.Black.ToArgb()) ;

//该范围内设置里面所有单元格的边框
//oSheet.get_Range("A1","e1").Borders.Weight = Excel.XlBorderWeight.xlThin ;
// oSheet.get_Range("A1","h1").Borders.Color = Color.Black.ToArgb() ;

//合并该范围内的所有单位格为一个单元格
//oSheet.get_Range("A1","e1").Merge(true) ;
//oSheet.get_Range("a2","h2").Merge(true) ;

//范围内单元格自动适应文字的长短
//oRng = oSheet.get_Range("A1", "e1");
//oRng.HorizontalAlignment=Excel.XlHAlign.xlHAlignCenter;//水平方向居中
//oRng.VerticalAlignment=Excel.XlVAlign.xlVAlignCenter;//竖直方向居中
//oRng.EntireColumn.AutoFit();

//范围内单元格添加背景颜色
//oSheet.get_Range("A1","h1").Cells.Interior.Color = Color.LightGray.ToArgb() ;
//oSheet.get_Range("A1","h1").Cells.Interior.Pattern = Excel.XlBackground.xlBackgroundAutomatic ;
oRng = oSheet.get_Range("A5", "e"+System.Convert.ToString(row));
oRng.Font.Name="宋体";
oRng.Font.Size=14;
//oRng.Font.ColorIndex=5;//字体颜色
oRng.HorizontalAlignment=Excel.XlHAlign.xlHAlignCenter;//水平方向居中
oRng.Cells.Borders.LineStyle=Excel.XlLineStyle.xlContinuous;//加表格线
oRng.Borders.Weight=Excel.XlBorderWeight.xlThin;//细线

//外边框加粗
oRng.Borders[Excel.XlBordersIndex.xlEdgeLeft].Weight=Excel.XlBorderWeight.xlMedium;
oRng.Borders[Excel.XlBordersIndex.xlEdgeRight].Weight=Excel.XlBorderWeight.xlMedium;
oRng.Borders[Excel.XlBordersIndex.xlEdgeTop].Weight=Excel.XlBorderWeight.xlMedium;
oRng.Borders[Excel.XlBordersIndex.xlEdgeBottom].Weight= Excel.XlBorderWeight.xlMedium;
// oRng.get_Range("b1","b1").ColumnWidth=12.25;
// oRng.get_Range("d1","d1").ColumnWidth=9.63;
// oRng.get_Range("h1","h1").ColumnWidth=15;
oRng.EntireColumn.AutoFit();//自动调整列宽
oRng.WrapText=true;//自动换行
oRng.VerticalAlignment=Excel.XlVAlign.xlVAlignCenter;//竖直方向居中
oRng.EntireRow.AutoFit();//自动调整行高
oWB.SaveAs("c:\\Inetpub\\wwwroot\\transportation\\Excel\\Operation_summary.xls",System.Reflection.Missing.Value,"","",true,false,Excel.XlSaveAsAccessMode.xlNoChange,1,true,System.Reflection.Missing.Value,oMissing,oMissing);
oWB.Close(false,null,null);
oXL.UserControl =false;
oXL.Quit();
System.Runtime.InteropServices.Marshal.ReleaseComObject(oSheet);
System.Runtime.InteropServices.Marshal.ReleaseComObject(oWB);
System.Runtime.InteropServices.Marshal.ReleaseComObject(oXL);
oSheet = null;
oXL = null;
oWB = null;
System.GC.Collect();
Response.Write("<script>window.open('../transportation/excel/Operation_summary.xls');</script>");

#9


TO:luyuan6894(陆云龙)
能具体说说步骤么?

To:net_lover(孟子E章)
我以前看到过一个用PB编的程序,到处成EXCEL之后,开始EXCEL中也没有表格中的格式,但是,一会它就自动调整出格式了,不知道这个是不是像luyuan6894(陆云龙)说的那样用宏实现的呢?

TO: bitsbird(一瓢 单身走我路)
我的表格的标头相当复杂,用程序一格一格的到处不太现实,确实太复杂了

#10


学习!

#11



public bool ExportDataTableToFile(int FileType,DataTable Dt,string FileName,DataGrid Dg)
{

bool RValue=false;
string Lines="";
FileStream fs = new FileStream(FileName,FileMode.Create  , FileAccess.Write, FileShare.None);
StreamWriter TmpFile = new StreamWriter(fs , System.Text.Encoding.GetEncoding("GB2312"));
int i=0;
Lines="";
for(i=0;i<Dg.Columns.Count ;i++)
{
Lines+=Dg.Columns[i].HeaderText+" "; 
}
TmpFile.WriteLine(Lines);

for( i=0;i<Dt.Rows.Count ;i++)
{
Lines="";
for(int j=0;j<Dt.Columns.Count;j++)
{
Regex r = new Regex(@"^\d+$");

string t="";

decimal d=0;
t=Dt.Rows[i][j].ToString().Trim();
if(r.IsMatch(t))
{
d=Convert.ToDecimal ( t);
Lines+=d.ToString("N")+" ";
}
else
{
Lines+=t+" ";
}
}
TmpFile.WriteLine(Lines);

}
TmpFile.Close();
RValue=true;
return RValue;
}
一点建议:首先导出时不要使用Excel文件来导出,直接将要导出的数据和列标头写成一个文本文件,没个字段用TAB键分开,保存时将文件名的后缀写成.xls就可以了
先写在服务器上,在从客户端下载是比较好的方法,以上代代码的函数,将绑定在datagrid中的datatable所有数据导出,并且导出datagrid的列标题
另外,如果直接使用datagrid导出数据,当数据量很大的时候,速度会很慢,如果datagrid是翻页的话,则只能导出当前页的数据

#12


help up

#13


TO: Eagle_Tiger(孤刀浪子)
表头太复杂,你的方法到处很困难呀~~~

#14


顶!

#15


Annex

#16


up

#17


关于导出EXCEL的问题,我研究了好久,一个是客户端OFFICE版本的问题,另外就是如何让datagrid原样显示的问题,到现在都没有特别好的解决方法,最好最方便最简单的还是用脚本,但这有一个弊端,就是客户端的IE安全级别必须设置为低
给你参考一下:
http://www.cnblogs.com/acelove/archive/2005/02/23/108183.html

#18


学习

#19


学习

#20


版主呀~~把这个帖子置顶吧~看看谁能解决~~`

#21


高手都进来看看呀~

#22


救命呀~

#23


帮你顶 希望高手能来回答啊!

#24


我也遇到过相同的问题.也搞了很久,但还是不行.

#25


高手还没有来呀?

#26


有人没有?

#27


来人呀~

#28


你那个折行是自动折的吧,
如果你用手个折的话(在中间驾加入<br>),我想应该没有你那个问题了

#29


UP

#30


没有人知道吗?
真的没有吗?

#31


提供一个空白excel文件,把表头的格式做好
数据导出时,往这个空白文件里导,另存成最后的文档

#32


没有谁解决过这个问题吗?

#33


TO: littlegang(Gang)
说说具体步骤,或提供点资料~如果知道的话

#34


littlegang(Gang) 的方法可行,就是创建一个模版,再去填充啊

#35


gz

#36


我在pb里是先保存为html格式,然后用excel打开,没有问题

#37


自定义格式:                      
                           DataTable dt = new DataTable();

DataRow dn;

dt.Columns.Add();
dt.Columns.Add();
dt.Columns.Add();

//Titile1
dn=dt.NewRow();
dn[0]="International <BR> Business";
dt.Rows.Add(dn);
//Titile2
dn=dt.NewRow();
dn[0]="International <BR> Business";
dt.Rows.Add(dn);
//Title3
dn=dt.NewRow();
dn[0]="International <BR> Business";
dt.Rows.Add(dn);

                           DataView dv = new DataView(dt);

                           datagrid1.DataSource=dv;
                           datagrid1.DataBind();
最后导出Excel。

#38


楼主注意这个属性:WrapText //自动换行
xlSheet.Range(.Cells(1, 1), .Cells(1, colIndex)).WrapText = True

#39


今天才看到这个贴,昨晚一个晚上就搞好了,很简单啊,DIV加style就可以了,合并的也没问题

#40


TO:
yuxiang9999(用C#重载比尔盖茨) 

请说说具体步骤呀~如果知道的话,表头的分行也要保持哟~~~

#41


希望会的朋友把方法详细讲述一下,贴出来,造福人类