目前的思路有3种:
1.在前台用js控制;
关键代码:
代码
var xls;
try
{
xls = new ActiveXObject( "Excel.Application" );
xls.visable=false;
}
catch(e)
{
alert( "要导入该表,您必须安装Excel电子表格软件,同时IE设置如下:打开IE浏览器的工具-〉Internet选项-〉安全-〉自定义级别中的“对没有标记为安全的ActiveX控件进行初始化和脚本运行”设置为“启用”即可!");
return false;
}
这个必须是要求客户端安装了EXCEL,还要设置IE安全选项,不好!
2.将table标记为"runatt=server",在后台导出excel文件
类似代码:
System.IO.StringWriter oStringWriter = new System.IO.StringWriter(myCItrad);
System.Web.UI.HtmlTextWriter oHtmlTextWriter = new System.Web.UI.HtmlTextWriter(oStringWriter);
this.tableID.RenderControl(oHtmlTextWriter);
Response.Write(oStringWriter.ToString());
Response.End()
可是这个得到的EXCEL文件没有了Table的样式,(要是能解决就好了)
3.我在服务器端建立一个EXCEL的模板文件,就是把那些动态改变的信息部填,等到要导出的时候,在后台先读取EXCEL文件,替换信息,再输出来,不知道这个思路可行
希望有这方面经验的朋友们给我点帮助,我没有用datagrid等了,单单是这种的Table难道导成EXCEL不行吗?(要考虑格式:如行列合并的问题,再就是字体、边框等,字体、边框问题万一真不好设置就算了!),期待您的帮助,谢谢!
一、其中第三种思路可行性高,可以看我的例子
http://www.cnblogs.com/downmoon/archive/2009/01/16/1376702.html
二、另外也有一些操作Excel的例子:
http://www.cnblogs.com/downmoon/archive/2008/08/20/1272185.html
http://www.codeproject.com/KB/database/cspreadsheet.aspx
三、也可以用第三方的原生Excel控件如
myxls,生成原生 xls文件,不需要安装office excel
还有Aspose.Cells也不错。
你查查是否可以使用excelwriter控件
2.不用模版文件.http://www.cnblogs.com/zhouxin/archive/2009/12/11/1622032.html看看说不定可以.
3.用模版文件如下.
#region "DataTable导出EXECL"
public static void EnumToExel(Microsoft.Office.Interop.Excel.Worksheet wsheet, DataTable data)
{
EnumToExel(wsheet, data, 1, 1, false, null);
}
public static void EnumToExel(Microsoft.Office.Interop.Excel.Worksheet wsheet, DataTable data, int top, int left)
{
EnumToExel(wsheet, data, top, left, false, null);
}
public static void EnumToExel(Microsoft.Office.Interop.Excel.Worksheet wsheet, DataTable data, int top, int left, bool IsHaveCoulumn)
{
EnumToExel(wsheet, data, top, left, IsHaveCoulumn, null);
}
public static void EnumToExel(Microsoft.Office.Interop.Excel.Worksheet wsheet, DataTable data, int top, int left, bool IsHaveCoulumn, string[] removeCoulumn)
{
if (removeCoulumn != null)
{
foreach (string pro in removeCoulumn)
{
int nCount = data.Columns.Count;
for (int i = 0; i < nCount; i++)
{
string coulumn = data.Columns[i].ColumnName.ToUpper();
if (coulumn == pro.ToUpper())
data.Columns.Remove(data.Columns[i]);
}
}
}
int nTop = top;
int nLeft = left;
if (IsHaveCoulumn)
{
foreach (DataColumn info in data.Columns)
{
wsheet.Cells[nTop, nLeft] = info.ColumnName;
nLeft++;
}
nTop++;
}
foreach (DataRow t in data.Rows)
{
nLeft = left;
foreach (DataColumn info in data.Columns)
{
wsheet.Cells[nTop, nLeft] = t[info];
nLeft++;
}
nTop++;
}
}
#endregion
#region "IEnumerable导出EXECL"
public static void EnumToExel<T>(Microsoft.Office.Interop.Excel.Worksheet wsheet, IEnumerable<T> data)
{
EnumToExel<T>(wsheet, data, 1, 1,false, null);
}
public static void EnumToExel<T>(Microsoft.Office.Interop.Excel.Worksheet wsheet, IEnumerable<T> data, int top, int left)
{
EnumToExel<T>(wsheet, data, top, left,false, null);
}
public static void EnumToExel<T>(Microsoft.Office.Interop.Excel.Worksheet wsheet, IEnumerable<T> data, int top, int left, bool IsHaveCoulumn)
{
EnumToExel<T>(wsheet, data, top, left, IsHaveCoulumn, null);
}
public static void EnumToExel<T>(Microsoft.Office.Interop.Excel.Worksheet wsheet, IEnumerable<T> data, int top, int left,bool IsHaveCoulumn,string[] removeProperty)
{
List<PropertyInfo> ps = typeof(T).GetProperties().ToList();
if (removeProperty != null)
{
foreach(string pro in removeProperty)
{
ps.Remove(ps.FirstOrDefault(p => p.Name.ToUpper() == pro.ToUpper()));
}
}
int nTop = top;
int nLeft = left;
if (IsHaveCoulumn)
{
foreach (PropertyInfo info in ps)
{
wsheet.Cells[nTop, nLeft] = info.Name;
nLeft++;
}
nTop++;
}
foreach (T t in data)
{
nLeft = left;
foreach (PropertyInfo info in ps)
{
wsheet.Cells[nTop, nLeft] = info.GetValue(t, null);
nLeft++;
}
nTop++;
}
}
#endregion ""