首页 新闻 会员 周边

html的table导出excel文件

0
悬赏园豆:5 [已解决问题] 解决于 2010-03-19 19:28

目前的思路有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不行吗?(要考虑格式:如行列合并的问题,再就是字体、边框等,字体、边框问题万一真不好设置就算了!),期待您的帮助,谢谢!

科比*布莱恩T的主页 科比*布莱恩T | 初学一级 | 园豆:0
提问于:2010-03-19 00:27
< >
分享
最佳答案
0

一、其中第三种思路可行性高,可以看我的例子

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也不错。

收获园豆:2
邀月 | 高人七级 |园豆:25475 | 2010-03-19 08:12
其他回答(2)
0

你查查是否可以使用excelwriter控件

收获园豆:1
小丁 | 园豆:301 (菜鸟二级) | 2010-03-19 07:20
0

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 ""
收获园豆:2
天天不在 | 园豆:926 (小虾三级) | 2010-03-19 08:46
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册