asp.net导出excel
程序员文章站
2023-11-18 13:39:22
asp.net 根据html模板导出excel public class ExcelHelper { /// /// 根据html模板文件生成excel文件 /// /// 数据源 ///
asp.net 根据html模板导出excel
public class excelhelper { /// <summary> /// 根据html模板文件生成excel文件 /// </summary> /// <param name="ds">数据源</param> /// <param name="templatefilepath">html模板文件路径(虚拟路径而非物理路径)</param> /// <param name="tofilename">生成的excel文件名,带后缀不带路径</param> /// <returns></returns> public static string getexcel(dataset ds, string templatefilepath, string tofilename) { string tofilepath = syshelper.getvirtualpath() + "upload/export_excel/"; string stroutpath = httpcontext.current.server.mappath(tofilepath); if (!directory.exists(stroutpath)) { directory.createdirectory(stroutpath); } string templatecontent = getstringfromtemplate(ds, templatefilepath); //保存文件 using (filestream fs = new filestream(stroutpath + tofilename, filemode.create)) { using (streamwriter sw = new streamwriter(fs)) { sw.write(templatecontent); } } return tofilepath + tofilename; } /// <summary> /// 根据模板生成字符换 /// </summary> /// <param name="ds"></param> /// <param name="templatefilepath"></param> /// <returns></returns> private static string getstringfromtemplate(dataset ds, string templatefilepath) { //读取模板 string templatecontent = ""; using (streamreader sr = new streamreader(httpcontext.current.server.mappath(templatefilepath))) { templatecontent = sr.readtoend(); } //解析每个表 for (int tableindex = 0; tableindex < ds.tables.count; tableindex++) { datatable dt = ds.tables[tableindex]; //获取表的模板集合 string tabletag = string.format(@"#table.{0}#", tableindex);//表的标签 string pattern = string.format(@"#table\.{0}#.*?#table\.{0}#", tableindex); regex reg = new regex(pattern, regexoptions.singleline); matchcollection matchs = reg.matches(templatecontent); //解析每个模板 foreach (match match in matchs) { string tabletemplate = match.value; string table = "";//解析后内容 //解析每行数据 for (int i = 0; i < dt.rows.count; i++) { string rowtemplate = tabletemplate.replace(tabletag, "");//去掉模板标签 //解析行模板 for (int j = 0; j < dt.columns.count; j++) { string columnname = "#table." + tableindex + "." + dt.columns[j].columnname + "#"; rowtemplate = rowtemplate.replace(columnname, dt.rows[i][j].tostring()); } table += rowtemplate; } //解析完之后替换到模板 templatecontent = templatecontent.replace(tabletemplate, table); } } return templatecontent; } }
html模板格式
<!doctype html> <html> <head> <title></title> <meta http-equiv="content-type" content="text/html; charset=utf-8" /> </head> <body> <table border="1"> <tr><td colspan="4" style="text-align:center;">事件汇总表</td></tr> <tr> <td style="width:200px;">事件名称</td> <td style="width:500px;">事件简要情况</td> <td style="width:100px;">发生时间</td> <td style="width:100px;">发生地区</td> </tr> #table.0# <tr> <td>#table.0.omtb_title#</td> <td>#table.0.omtb_content#</td> <td>#table.0.omtb_date#</td> <td>#table.0.omtb_address#</td> </tr> #table.0# </table> </body> </html>
调用方式
string templatepath = syshelper.getvirtualpath() + "zfb/pro_list_excel.html", outfile = "事件汇总表" + datetime.now.tostring("yyyymmddhhmmss") + ".xls"; string excel_file_path = excelhelper.getexcel(dssource, templatepath, outfile);
附加获取应用程序虚拟目录方法
public class syshelper { public static string getvirtualpath() { string path = httpcontext.current.request.applicationpath; return path + (path != "/" ? "/" : ""); //以/结尾 } }
上一篇: js下载文件并修改文件名
推荐阅读
-
第三方网站评论插件多说宣布关闭:6月1日前可导出数据
-
How to debug ASP.NET MVC using source code
-
64 位 ASP.Net 已注册 需要 32 位 ASP.Net 才能安装 Microsoft Reporting
-
印象笔记怎么导出 使用印象笔记导出笔记方法图解
-
服务器完美设置,支持asp php cgi jsp asp.net mysql!
-
MindManager思维导图怎么导出为电子表格形式?
-
Excel单元格区域不连续有空行使用填充序列功能实现隔空行填充序号
-
Excel用COUNTIFS模糊条件计数统计产品规格带有*号的产品种类
-
将Excel工作簿进行共享设置以便实现数据的多人编辑和最终修订
-
一键将Excel中的零0值快速隐藏不仅适用于当前表和当前区域