一
这种方法是把 DataSet的DataTable里面的数据拼接成html的<table></table>形式输出
缺点()这是一种伪Excel格式用Excel打开的时候会提示 格式与文件扩展名格式不一致 每次都要手动确定打开烦
()这样一个一个的循环效率低
优点直接从浏览器输出用户可以选择保存路径
View Code
public string GetExportString(DataSet ds)
{
StringBuilder data = new StringBuilder()//因为循环很多用 StringBuilder速度会快很多
//data = dsDataSetName + \n;
foreach (DataTable tb in dsTables)//多个表
{
//data += tbTableName + \n;
dataAppend(<table cellspacing=\\ cellpadding=\\ rules=\all\ border=\\>)
//写出列名
dataAppend(<tr style=\fontweight: bold; whitespace: nowrap;\>)
foreach (DataColumn column in tbColumns)
{
dataAppend(<td>)
dataAppend(columnColumnName)
dataAppend(</td>)
}
dataAppend(</tr>)
//写出数据
foreach (DataRow row in tbRows)
{
dataAppend(<tr>)
foreach (DataColumn column in tbColumns)
{
//if (columnColumnNameEquals(证件编号) || columnColumnNameEquals(报名编号))
// dataAppend(<td style=\vndmsexcelnumberformat:@\> + row[column]ToString() + </td>)
//else
dataAppend(<td>)
dataAppend(row[column]ToString())
dataAppend(</td>)
}
dataAppend(</tr>)
}
dataAppend(</table>)
}
return dataToString()
}
public void ExportDsToXls(Page page string fileName DataSet ds)
{
pageResponseClear()
pageResponseBuffer = true;
pageResponseCharset = GB;
//pageResponseCharset = UTF;<BR> //如果输出中文名乱码的话可以这样编码 文件名 HttpUtilityUrlEncode(fileName SystemTextEncodingUTF)
pageResponseAppendHeader(ContentDisposition attachment;filename= + fileName + SystemDateTimeNowToString(_yyMMdd_hhmm) + xls)
pageResponseContentEncoding = SystemTextEncodingGetEncoding(GB)//设置输出流为简体中文
pageResponseContentType = application/msexcel;//设置输出文件类型为excel文件
pageEnableViewState = false;
pageResponseWrite(GetExportString(ds))
pageResponseEnd()
}
// 可以去除自动科学计数法的困扰
//输出为Table能够最大限度的减少字段中数据对生成的文件格式的影响在这里我没有处理数据中含有HTML标签的情况 在页面后台中这样使用就可以了
二用到 MicrosoftOfficeInteropExcel dll在服务器输出输出的Excel在服务器(如果是b/s架构的话还要想着怎么把这个导出的文件拿回来)而且如果出现异常或者中断的话在服务器上面有很多excel的进程需要手动去关闭要不过不了多久服务器就挂掉了所以这个方法比较适合用在WinForm的开发不适合用在web的