使用mht格式做多sheet excel報表
2008-09-20 15:37
197 查看
用excel做報表是最常用的形式,文員MM們都用熟了,你叫他們看網頁,人家不習慣嘛!沒辦法,只好挖空心思,誰叫我們好呆是個男人呢!
關于使用mime 等方法做excel園子里有很多論述,如http://www.cnblogs.com/birdshome/archive/2005/07/14/mime_excel_sheets.html,他們研究的太仔細.其實我覺得最多的應用過程是:用excel生成模板,用C#處理模板,加入數據.處理的方法大家很多用xsl,比較規則,我覺得直接用文本處理也是可以的:
1、先用excel做好一個模板,當然可是有多sheet,也可以有圖表等,另存為單一網頁格式.mht;
2、找到每個sheet放數據的表格行,如一般是這個樣子:
Code
public static string ReplaceHeader(DataTable dtHeaderSrc, string text)
{
if (dtHeaderSrc == null)
return text;
text = text.Replace("\r\n", "__Sys_Blank__") + " ";
string pattern = @"{@(.*?)@}";
MatchCollection Matches = Regex.Matches(text, pattern);
if (Matches.Count > 0)
{
StringBuilder sbNew = new StringBuilder();
foreach (Match nextMatch in Matches)//其實只有一個
{
string item = nextMatch.Value;
string fname = item.Substring(2, item.Length - 4).Replace("__Sys_Blank__", "\r\n");
foreach (DataRow dr in dtHeaderSrc.Rows)
{
string row = fname.ToLower();
foreach (System.Data.DataColumn dc in dtHeaderSrc.Columns)
{
string cName = dc.ColumnName.ToLower();
row = row.Replace("{~" + cName + "~}", dr[cName].ToString());
}
sbNew.Append(row);
}
text = text.Replace(item, sbNew.ToString());
}
}
return text.Replace("__Sys_Blank__", "\r\n"); ;
}
原理簡單,就是找到{@模板@}這個東西,把一行一行數據填進去,組裝起來,然後替換.
具體使用,讀出模板數據text,讀出table,調用這個函數就可以把數據插入後寫成以擴展名.xls的文件就行,當然這里以"{@"為其中的一個sheet,其他的sheet可以以其他特殊符號標記,無非是為了找到替換而已.如果有圖表,只用excel打開就會變化,用其他的就不行啦,所以最好做成缺省是excel打開的文件.
這個方法跟birdshome比就是想讓MM直接編輯模板,不能讓我們做模板(多sheet時)做得太累.
覺悟:有時找這個格式,有時找那個格式,發現直接處理文本是最簡單的格式.
關于使用mime 等方法做excel園子里有很多論述,如http://www.cnblogs.com/birdshome/archive/2005/07/14/mime_excel_sheets.html,他們研究的太仔細.其實我覺得最多的應用過程是:用excel生成模板,用C#處理模板,加入數據.處理的方法大家很多用xsl,比較規則,我覺得直接用文本處理也是可以的:
1、先用excel做好一個模板,當然可是有多sheet,也可以有圖表等,另存為單一網頁格式.mht;
2、找到每個sheet放數據的表格行,如一般是這個樣子:
Code
public static string ReplaceHeader(DataTable dtHeaderSrc, string text)
{
if (dtHeaderSrc == null)
return text;
text = text.Replace("\r\n", "__Sys_Blank__") + " ";
string pattern = @"{@(.*?)@}";
MatchCollection Matches = Regex.Matches(text, pattern);
if (Matches.Count > 0)
{
StringBuilder sbNew = new StringBuilder();
foreach (Match nextMatch in Matches)//其實只有一個
{
string item = nextMatch.Value;
string fname = item.Substring(2, item.Length - 4).Replace("__Sys_Blank__", "\r\n");
foreach (DataRow dr in dtHeaderSrc.Rows)
{
string row = fname.ToLower();
foreach (System.Data.DataColumn dc in dtHeaderSrc.Columns)
{
string cName = dc.ColumnName.ToLower();
row = row.Replace("{~" + cName + "~}", dr[cName].ToString());
}
sbNew.Append(row);
}
text = text.Replace(item, sbNew.ToString());
}
}
return text.Replace("__Sys_Blank__", "\r\n"); ;
}
原理簡單,就是找到{@模板@}這個東西,把一行一行數據填進去,組裝起來,然後替換.
具體使用,讀出模板數據text,讀出table,調用這個函數就可以把數據插入後寫成以擴展名.xls的文件就行,當然這里以"{@"為其中的一個sheet,其他的sheet可以以其他特殊符號標記,無非是為了找到替換而已.如果有圖表,只用excel打開就會變化,用其他的就不行啦,所以最好做成缺省是excel打開的文件.
這個方法跟birdshome比就是想讓MM直接編輯模板,不能讓我們做模板(多sheet時)做得太累.
覺悟:有時找這個格式,有時找那個格式,發現直接處理文本是最簡單的格式.
相关文章推荐
- 使用java将网页保存为mht格式
- 使用java将网页保存为mht格式(1)
- 使用C#和Excel进行报表开发-设置单元格的显示格式
- js使用正则表达式验证身份证格式
- Delphi中使用JSON格式数据
- 使用 C++ 处理 JSON 数据交换格式
- Mac OS搭建Tomcat服务器, 与客户端使用JSON格式和Servlet进行HTTP通信
- [待解决]自定义头像时使用vue-cropper进行图片裁剪,得到的是base64格式的图片,如何对接file类型的api接口
- 使用JAVA 实现jpg/tif/bmp 等图片之间格式得互相转换
- Class文件格式实战:使用ASM动态生成class文件
- Linux下使用RecordMyDesktop进行屏幕录像 输出图像格式转换
- Jstl之核心标签库与格式标签库使用
- FastJSON使用 - JavaBean,List,Map转成json格式
- 在DataGrid中简单使用下拉列表框等自定义格式
- 使用php输出时间格式
- 【Android】YUV使用总结 —— Android常用的几种格式:NV21/NV12/YV12/YUV420P的区别
- Delphi使用StrToDatetime在不同操作系统出现不同的情况(控制面板的时间格式都记录在注册表里,因此也可修改注册表)
- CentOS 的使用 —— 各种格式文件的解压
- 在Oracle使用sql语句中如何插入日期格式的数据
- Crontab使用语法格式