为什么VS.NET里绘制表格………… 为什么VS.NET里绘制表格只能用表格生成器生成,不能手画呢,还有只能同一行合并单元格,同一列则不行?请指教,可能是我不会用 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 自己手写代码来罗。。因为VS。NET这个设计器支持还是很烂。建议你用DW设计好页面后在到VS。NET处理 直接在VS.NET弄比较复杂的表格是不大方便的,可以先在其它工具里弄好框架,再到vs.net里加程序就好了 VS.NET设计器对表格的支持很有限。 同一列合并单元格,你可以在html视图中对要合并的垂直对齐的几个单元格的最上一个<td>中加入rowspan="X"属性,X为要合并的单元格数量。 VS2003在排版方面是比较差的,可以用dreamweaver替代,2005就没这些问题了。或者可以用2003的html控件里table控件,不过生成的时候是三行三列的,你删掉一些行和列就行了。 1.Html<html><head> 评论表格统计</head><body><table border=0 width=100%> <TR> <td> <TR> <TD aligh="center">姓名</TD> <TD aligh="center">总量</TD> <TD aligh="center">专案名称</TD> <TD aligh="center">评论</TD> <TD aligh="center">总评论</TD> <TD aligh="center">角色</TD> </TR> <TR> <TD> <TR> <TD rowspan=4 aligh="center" color="blue"><font color='blue'>SuSuan</font></TD> <TD rowspan=4 aligh="center" bgcolor="lightgreen">100个</TD> <TD> <TR vlign="top"> <TD aligh="center" bgcolor="lightblue">IWP专案</TD> <TD aligh="center" bgcolor="lightblue">20</TD> <TD aligh="center" bgcolor="lightblue">60</TD> <TD aligh="center" bgcolor="lightblue">负责人</TD> </TR> <TR > <TD aligh="center" bgcolor="lightblue">BKD专案</TD> <TD aligh="center" bgcolor="lightblue">30</TD> <TD aligh="center" bgcolor="lightblue">40</TD> <TD aligh="center" bgcolor="lightblue">协助人</TD> </TR> <TR > <TD aligh="center" bgcolor="lightblue">BKD专案</TD> <TD aligh="center" bgcolor="lightblue">30</TD> <TD aligh="center" bgcolor="lightblue">40</TD> <TD aligh="center" bgcolor="lightblue">协助人</TD> </TR> </TD> </TR> <TR> <TD rowspan=4 aligh="center" bgcolor="lightgreen">CEO</TD> <TD rowspan=4 aligh="center" bgcolor="lightgreen">80个</TD> <TD> <TR vlign="top"> <TD aligh="center" bgcolor="lightblue">IIS专案</TD> <TD aligh="center" bgcolor="lightblue">30</TD> <TD aligh="center" bgcolor="lightblue">20</TD> <TD aligh="center" bgcolor="lightblue">负责人</TD> </TR> <TR > <TD aligh="center" bgcolor="lightblue">KDB专案</TD> <TD aligh="center" bgcolor="lightblue">50</TD> <TD aligh="center" bgcolor="lightblue">20</TD> <TD aligh="center" bgcolor="lightblue">协助人</TD> </TR> <TR > <TD aligh="center" bgcolor="lightblue">BKD专案</TD> <TD aligh="center" bgcolor="lightblue">30</TD> <TD aligh="center" bgcolor="lightblue">40</TD> <TD aligh="center" bgcolor="lightblue">协助人</TD> </TR> </TD> </TR> </TD> </TR> </td> </TR></table></body></html> 2 *.C文件中写法//存放最终结果字符串 string strHtmlStr; //存放表格头字符串 System.Text.StringBuilder stbHead = new System.Text.StringBuilder(); stbHead.Append("<table border=1 width=100% class=\"Table\">") .Append(" <TR>") .Append(" <TD align=\"center\" class=\"HeaderStyle\">姓名</TD>") .Append(" <TD align=\"center\" class=\"HeaderStyle\">个人评论总量</TD>") .Append(" <TD align=\"center\" class=\"HeaderStyle\">专案名称</TD> <TD align=\"center\" class=\"HeaderStyle\">个人评论数量</TD> ") .Append(" <TD align=\"center\" class=\"HeaderStyle\">评论总量</TD> <TD align=\"center\" class=\"HeaderStyle\">角色</TD>") .Append(" </TR>"); strHtmlStr = stbHead.ToString(); //将头追加 //存放表格中间n行数据字符串 System.Text.StringBuilder stbBody = new System.Text.StringBuilder(); for(int i = 0; i < ds.Tables.Count; i++) { if(this.ddlDisplayNum.SelectedValue != "") { if(i >= int.Parse(this.ddlDisplayNum.SelectedValue)) { break; } } string intDetailNum = (ds.Tables[i].Rows.Count).ToString(); //格式化表格用 stbBody.Append(" <TR>") .Append(" <TD rowspan="+intDetailNum+" align=\"center\" class=\"TableTitle\">" + "<a onclick=window.open('"+this.XframeSysInfo.SysRoot + this.XframeSysInfo.MainPage.Name+"?ModuleID=CRMPSCommentRead&ReportName=CommentStatDetail&StaffNo="+ds.Tables[i].Rows[0]["StaffNo"].ToString() + "&StartTime=" + strStartTime +"&EndTime="+strEndTime+"','popuppage','width=800,height=600,top=60,left=100,scrollbars,resizable') style='CURSOR: hand'>"+ds.Tables[i].Rows[0]["FullName"].ToString()+"</a>"+ "</TD> "); //姓名 try { if(ds.Tables[i].Rows[0]["OneToAllProjNum"].ToString().Trim() == "0") ////如果为零时不加链接 { stbBody.Append(" <TD rowspan="+intDetailNum+" align=\"right\" class=\"TableContent\">0</TD>"); } else { stbBody.Append(" <TD rowspan="+intDetailNum+" align=\"right\" class=\"TableContent\">" + "<a onclick=window.open('"+this.XframeSysInfo.SysRoot + this.XframeSysInfo.MainPage.Name+"?ModuleID=CRMPSCommentRead&ReportName=CommentStatDetail&StaffNo="+ds.Tables[i].Rows[0]["StaffNo"].ToString() + "&StartTime=" + strStartTime +"&EndTime="+strEndTime+"','popuppage','width=800,height=600,top=60,left=100,scrollbars,resizable') style='CURSOR: hand'>"+ds.Tables[i].Rows[0]["OneToAllProjNum"].ToString()+"</a>"+ "</TD>"); } } catch { //stbBody.Append(" <TD rowspan="+intDetailNum+" align=\"center\" class=\"TableContent\">"+"0"+"</TD>"); } stbBody.Append(" <TD align=\"center\" class=\"TableContent\">" +"<a href="+this.XframeSysInfo.SysRoot+ this.XframeSysInfo.MainPage.Name+"?ModuleID=CRMPreSell&Func=ReadProject&ProjNo="+ds.Tables[i].Rows[0]["ProjNo"].ToString()+" target=\"_blank\">"+ds.Tables[i].Rows[0]["ProjName"].ToString()+ "</TD>"); if(ds.Tables[i].Rows[0]["OneToOneProjNum"].ToString().Trim() == "0") { stbBody.Append(" <TD align=\"right\" class=\"TableContent\">0</TD>"); } else { stbBody.Append(" <TD align=\"right\" class=\"TableContent\">" + "<a onclick=window.open('"+this.XframeSysInfo.SysRoot + this.XframeSysInfo.MainPage.Name+"?ModuleID=CRMPSCommentRead&ReportName=CommentStatDetail&StaffNo="+ds.Tables[i].Rows[0]["StaffNo"].ToString()+"&ProjNo="+ds.Tables[i].Rows[0]["ProjNo"].ToString() + "&StartTime=" + strStartTime +"&EndTime="+strEndTime+"','popuppage','width=800,height=600,top=60,left=100,scrollbars,resizable') style='CURSOR: hand'>"+ds.Tables[i].Rows[0]["OneToOneProjNum"].ToString()+"</a>"+ "</TD>"); } if(ds.Tables[i].Rows[0]["MansToOneProjNum"].ToString().Trim() == "0") { stbBody.Append(" <TD align=\"right\" class=\"TableContent\">0</TD>"); } else { stbBody.Append(" <TD align=\"right\" class=\"TableContent\">" + "<a onclick=window.open('"+this.XframeSysInfo.SysRoot + this.XframeSysInfo.MainPage.Name+"?ModuleID=CRMPSCommentRead&ReportName=CommentStatDetail&ProjNo="+ds.Tables[i].Rows[0]["ProjNo"].ToString() + "&StartTime=" + strStartTime +"&EndTime="+strEndTime+"','popuppage','width=800,height=600,top=60,left=100,scrollbars,resizable') style='CURSOR: hand'>"+ds.Tables[i].Rows[0]["MansToOneProjNum"].ToString()+"</a>"+ "</TD>"); } stbBody.Append(" <TD align=\"center\" class=\"TableContent\">" + (ds.Tables[i].Rows[0]["UserStyle"].ToString().Trim() == "1" ? "<font color='blue'>11</font>" : "22") +"</TD>") //角色 .Append(" </TR>"); for(int j = 1; j < ds.Tables[i].Rows.Count; j++) { stbBody.Append(" <TR>") .Append(" <TD align=\"center\" class=\"TableContent\">" +"<a href="+this.XframeSysInfo.SysRoot+ this.XframeSysInfo.MainPage.Name+"?ModuleID=CRMPreSell&Func=ReadProject&ProjNo="+ds.Tables[i].Rows[j]["ProjNo"].ToString()+" target=\"_blank\">"+ds.Tables[i].Rows[j]["ProjName"].ToString()+ "</TD>"); //专案名称 if(ds.Tables[i].Rows[j]["OneToOneProjNum"].ToString().Trim() == "0") stbBody.Append(" <TD align=\"right\" class=\"TableContent\">0</TD>"); } else { stbBody.Append(" <TD align=\"right\" class=\"TableContent\">" + "<a onclick=window.open('"+this.XframeSysInfo.SysRoot + this.XframeSysInfo.MainPage.Name+"?ModuleID=CRMPSCommentRead&ReportName=CommentStatDetail&StaffNo="+ds.Tables[i].Rows[j]["StaffNo"].ToString()+"&ProjNo="+ds.Tables[i].Rows[j]["ProjNo"].ToString() + "&StartTime=" + strStartTime +"&EndTime="+strEndTime+"','popuppage','width=800,height=600,top=60,left=100,scrollbars,resizable') style='CURSOR: hand'>"+ds.Tables[i].Rows[j]["OneToOneProjNum"].ToString()+"</a>"+ "</TD>"); } if(ds.Tables[i].Rows[j]["MansToOneProjNum"].ToString().Trim() == "0") { stbBody.Append(" <TD align=\"right\" class=\"TableContent\">0</TD>"); } else { stbBody.Append(" <TD align=\"right\" class=\"TableContent\">" + "<a onclick=window.open('"+this.XframeSysInfo.SysRoot + this.XframeSysInfo.MainPage.Name+"?ModuleID=CRMPSCommentRead&ReportName=CommentStatDetail&ProjNo="+ds.Tables[i].Rows[j]["ProjNo"].ToString() + "&StartTime=" + strStartTime +"&EndTime="+strEndTime+"','popuppage','width=800,height=600,top=60,left=100,scrollbars,resizable') style='CURSOR: hand'>"+ds.Tables[i].Rows[j]["MansToOneProjNum"].ToString()+"</a>"+ "</TD>"); } stbBody.Append(" <TD align=\"center\" class=\"TableContent\">" + (ds.Tables[i].Rows[j]["UserStyle"].ToString().Trim() == "1" ? "<font color='blue'>111</font>" : "222") +"</TD>") .Append(" </TR>"); } } strHtmlStr += stbBody.ToString(); //存放表格尾字符串 System.Text.StringBuilder stbTail = new System.Text.StringBuilder(); stbTail.Append("</TABLE>"); strHtmlStr += stbTail; ChengKing:Sorry,弄错了纠正: 1.html应该为:<table border=1> <tr><td>asdfasdf</td><td>aaaaa</td><td>bbbbb</td></tr> <tr><td>asdfasdf</td><td>ccccc</td><td>ddddd</td></tr> <tr><td>asdfasdf</td><td>eeeee</td><td>fffff</td></tr> <tr><td>asdfasdf</td><td>ggggg</td><td>hhhhh</td></tr> <tr><td>asdfasdf</td><td>iiiii</td><td>jjjjj</td></tr> <tr> <td rowspan=3>kkkkk</td> <td rowspan=3>lllll</td> <td>mmmm1</td> </tr> <tr><td>mmmm2</td></tr> <tr><td>mmmm3</td></tr></table> 我的经验是:先用表格生成器生成表格,之后在修改HTML内容即可! asp.net发布后不能执行批处理文件 关于vss获取源码之后页面报错的问题 递归 这种图片列表怎么实现 showModalDialog的问题! 用web matrix server替代iis时的问题 快,高分来拿,装好vs.net不能运行.aspx,在线 我想要求当登录时候保存的Session=特定值的时候,才可以超链接到Search.aspx web考试系统的试题显示问题?如何出题 asp.net如何使用类似与asp中的包含语句? 请问如何用ViewState保存字符串数组。(急!) 如何在服务器端访问客户端提交的表单
或者可以用2003的html控件里table控件,不过生成的时候是三行三列的,你删掉一些行和列就行了。
<html>
<head>
评论表格统计
</head><body><table border=0 width=100%>
<TR>
<td>
<TR>
<TD aligh="center">姓名</TD> <TD aligh="center">总量</TD>
<TD aligh="center">专案名称</TD> <TD aligh="center">评论</TD>
<TD aligh="center">总评论</TD> <TD aligh="center">角色</TD>
</TR> <TR>
<TD>
<TR>
<TD rowspan=4 aligh="center" color="blue"><font color='blue'>SuSuan</font></TD>
<TD rowspan=4 aligh="center" bgcolor="lightgreen">100个</TD>
<TD>
<TR vlign="top">
<TD aligh="center" bgcolor="lightblue">IWP专案</TD>
<TD aligh="center" bgcolor="lightblue">20</TD>
<TD aligh="center" bgcolor="lightblue">60</TD>
<TD aligh="center" bgcolor="lightblue">负责人</TD>
</TR>
<TR >
<TD aligh="center" bgcolor="lightblue">BKD专案</TD>
<TD aligh="center" bgcolor="lightblue">30</TD>
<TD aligh="center" bgcolor="lightblue">40</TD>
<TD aligh="center" bgcolor="lightblue">协助人</TD>
</TR>
<TR >
<TD aligh="center" bgcolor="lightblue">BKD专案</TD>
<TD aligh="center" bgcolor="lightblue">30</TD>
<TD aligh="center" bgcolor="lightblue">40</TD>
<TD aligh="center" bgcolor="lightblue">协助人</TD>
</TR>
</TD>
</TR> <TR>
<TD rowspan=4 aligh="center" bgcolor="lightgreen">CEO</TD>
<TD rowspan=4 aligh="center" bgcolor="lightgreen">80个</TD>
<TD>
<TR vlign="top">
<TD aligh="center" bgcolor="lightblue">IIS专案</TD>
<TD aligh="center" bgcolor="lightblue">30</TD>
<TD aligh="center" bgcolor="lightblue">20</TD>
<TD aligh="center" bgcolor="lightblue">负责人</TD>
</TR>
<TR >
<TD aligh="center" bgcolor="lightblue">KDB专案</TD>
<TD aligh="center" bgcolor="lightblue">50</TD>
<TD aligh="center" bgcolor="lightblue">20</TD>
<TD aligh="center" bgcolor="lightblue">协助人</TD>
</TR>
<TR >
<TD aligh="center" bgcolor="lightblue">BKD专案</TD>
<TD aligh="center" bgcolor="lightblue">30</TD>
<TD aligh="center" bgcolor="lightblue">40</TD>
<TD aligh="center" bgcolor="lightblue">协助人</TD>
</TR>
</TD>
</TR>
</TD>
</TR>
</td>
</TR>
</table></body></html>
//存放最终结果字符串
string strHtmlStr;
//存放表格头字符串
System.Text.StringBuilder stbHead = new System.Text.StringBuilder();
stbHead.Append("<table border=1 width=100% class=\"Table\">")
.Append(" <TR>")
.Append(" <TD align=\"center\" class=\"HeaderStyle\">姓名</TD>")
.Append(" <TD align=\"center\" class=\"HeaderStyle\">个人评论总量</TD>")
.Append(" <TD align=\"center\" class=\"HeaderStyle\">专案名称</TD> <TD align=\"center\" class=\"HeaderStyle\">个人评论数量</TD> ")
.Append(" <TD align=\"center\" class=\"HeaderStyle\">评论总量</TD> <TD align=\"center\" class=\"HeaderStyle\">角色</TD>")
.Append(" </TR>");
strHtmlStr = stbHead.ToString(); //将头追加
//存放表格中间n行数据字符串
System.Text.StringBuilder stbBody = new System.Text.StringBuilder();
for(int i = 0; i < ds.Tables.Count; i++)
{
if(this.ddlDisplayNum.SelectedValue != "")
{
if(i >= int.Parse(this.ddlDisplayNum.SelectedValue))
{
break;
}
}
string intDetailNum = (ds.Tables[i].Rows.Count).ToString(); //格式化表格用
stbBody.Append(" <TR>")
.Append(" <TD rowspan="+intDetailNum+" align=\"center\" class=\"TableTitle\">"
+ "<a onclick=window.open('"+this.XframeSysInfo.SysRoot + this.XframeSysInfo.MainPage.Name+"?ModuleID=CRMPSCommentRead&ReportName=CommentStatDetail&StaffNo="+ds.Tables[i].Rows[0]["StaffNo"].ToString() + "&StartTime=" + strStartTime +"&EndTime="+strEndTime+"','popuppage','width=800,height=600,top=60,left=100,scrollbars,resizable') style='CURSOR: hand'>"+ds.Tables[i].Rows[0]["FullName"].ToString()+"</a>"+
"</TD> "); //姓名
try
{
if(ds.Tables[i].Rows[0]["OneToAllProjNum"].ToString().Trim() == "0") ////如果为零时不加链接
{
stbBody.Append(" <TD rowspan="+intDetailNum+" align=\"right\" class=\"TableContent\">0</TD>");
}
else
{
stbBody.Append(" <TD rowspan="+intDetailNum+" align=\"right\" class=\"TableContent\">"
+ "<a onclick=window.open('"+this.XframeSysInfo.SysRoot + this.XframeSysInfo.MainPage.Name+"?ModuleID=CRMPSCommentRead&ReportName=CommentStatDetail&StaffNo="+ds.Tables[i].Rows[0]["StaffNo"].ToString() + "&StartTime=" + strStartTime +"&EndTime="+strEndTime+"','popuppage','width=800,height=600,top=60,left=100,scrollbars,resizable') style='CURSOR: hand'>"+ds.Tables[i].Rows[0]["OneToAllProjNum"].ToString()+"</a>"+
"</TD>");
}
}
catch
{
//stbBody.Append(" <TD rowspan="+intDetailNum+" align=\"center\" class=\"TableContent\">"+"0"+"</TD>");
}
stbBody.Append(" <TD align=\"center\" class=\"TableContent\">" +"<a href="+this.XframeSysInfo.SysRoot+ this.XframeSysInfo.MainPage.Name+"?ModuleID=CRMPreSell&Func=ReadProject&ProjNo="+ds.Tables[i].Rows[0]["ProjNo"].ToString()+" target=\"_blank\">"+ds.Tables[i].Rows[0]["ProjName"].ToString()+ "</TD>");
if(ds.Tables[i].Rows[0]["OneToOneProjNum"].ToString().Trim() == "0")
{
stbBody.Append(" <TD align=\"right\" class=\"TableContent\">0</TD>");
}
else
{
stbBody.Append(" <TD align=\"right\" class=\"TableContent\">"
+ "<a onclick=window.open('"+this.XframeSysInfo.SysRoot + this.XframeSysInfo.MainPage.Name+"?ModuleID=CRMPSCommentRead&ReportName=CommentStatDetail&StaffNo="+ds.Tables[i].Rows[0]["StaffNo"].ToString()+"&ProjNo="+ds.Tables[i].Rows[0]["ProjNo"].ToString() + "&StartTime=" + strStartTime +"&EndTime="+strEndTime+"','popuppage','width=800,height=600,top=60,left=100,scrollbars,resizable') style='CURSOR: hand'>"+ds.Tables[i].Rows[0]["OneToOneProjNum"].ToString()+"</a>"+
"</TD>");
}
if(ds.Tables[i].Rows[0]["MansToOneProjNum"].ToString().Trim() == "0")
{
stbBody.Append(" <TD align=\"right\" class=\"TableContent\">0</TD>");
}
else
{
stbBody.Append(" <TD align=\"right\" class=\"TableContent\">"
+ "<a onclick=window.open('"+this.XframeSysInfo.SysRoot + this.XframeSysInfo.MainPage.Name+"?ModuleID=CRMPSCommentRead&ReportName=CommentStatDetail&ProjNo="+ds.Tables[i].Rows[0]["ProjNo"].ToString() + "&StartTime=" + strStartTime +"&EndTime="+strEndTime+"','popuppage','width=800,height=600,top=60,left=100,scrollbars,resizable') style='CURSOR: hand'>"+ds.Tables[i].Rows[0]["MansToOneProjNum"].ToString()+"</a>"+
"</TD>");
}
stbBody.Append(" <TD align=\"center\" class=\"TableContent\">" + (ds.Tables[i].Rows[0]["UserStyle"].ToString().Trim() == "1" ? "<font color='blue'>11</font>" : "22") +"</TD>") //角色
.Append(" </TR>");
for(int j = 1; j < ds.Tables[i].Rows.Count; j++)
{
stbBody.Append(" <TR>")
.Append(" <TD align=\"center\" class=\"TableContent\">" +"<a href="+this.XframeSysInfo.SysRoot+ this.XframeSysInfo.MainPage.Name+"?ModuleID=CRMPreSell&Func=ReadProject&ProjNo="+ds.Tables[i].Rows[j]["ProjNo"].ToString()+" target=\"_blank\">"+ds.Tables[i].Rows[j]["ProjName"].ToString()+ "</TD>"); //专案名称
if(ds.Tables[i].Rows[j]["OneToOneProjNum"].ToString().Trim() == "0")
stbBody.Append(" <TD align=\"right\" class=\"TableContent\">0</TD>");
}
else
{
stbBody.Append(" <TD align=\"right\" class=\"TableContent\">"
+ "<a onclick=window.open('"+this.XframeSysInfo.SysRoot + this.XframeSysInfo.MainPage.Name+"?ModuleID=CRMPSCommentRead&ReportName=CommentStatDetail&StaffNo="+ds.Tables[i].Rows[j]["StaffNo"].ToString()+"&ProjNo="+ds.Tables[i].Rows[j]["ProjNo"].ToString() + "&StartTime=" + strStartTime +"&EndTime="+strEndTime+"','popuppage','width=800,height=600,top=60,left=100,scrollbars,resizable') style='CURSOR: hand'>"+ds.Tables[i].Rows[j]["OneToOneProjNum"].ToString()+"</a>"+
"</TD>");
}
if(ds.Tables[i].Rows[j]["MansToOneProjNum"].ToString().Trim() == "0")
{
stbBody.Append(" <TD align=\"right\" class=\"TableContent\">0</TD>");
}
else
{
stbBody.Append(" <TD align=\"right\" class=\"TableContent\">"
+ "<a onclick=window.open('"+this.XframeSysInfo.SysRoot + this.XframeSysInfo.MainPage.Name+"?ModuleID=CRMPSCommentRead&ReportName=CommentStatDetail&ProjNo="+ds.Tables[i].Rows[j]["ProjNo"].ToString() + "&StartTime=" + strStartTime +"&EndTime="+strEndTime+"','popuppage','width=800,height=600,top=60,left=100,scrollbars,resizable') style='CURSOR: hand'>"+ds.Tables[i].Rows[j]["MansToOneProjNum"].ToString()+"</a>"+
"</TD>");
}
stbBody.Append(" <TD align=\"center\" class=\"TableContent\">" + (ds.Tables[i].Rows[j]["UserStyle"].ToString().Trim() == "1" ? "<font color='blue'>111</font>" : "222") +"</TD>")
.Append(" </TR>");
}
}
strHtmlStr += stbBody.ToString();
//存放表格尾字符串
System.Text.StringBuilder stbTail = new System.Text.StringBuilder();
stbTail.Append("</TABLE>");
strHtmlStr += stbTail;
Sorry,弄错了
纠正: 1.html
应该为:<table border=1>
<tr><td>asdfasdf</td><td>aaaaa</td><td>bbbbb</td></tr>
<tr><td>asdfasdf</td><td>ccccc</td><td>ddddd</td></tr>
<tr><td>asdfasdf</td><td>eeeee</td><td>fffff</td></tr>
<tr><td>asdfasdf</td><td>ggggg</td><td>hhhhh</td></tr>
<tr><td>asdfasdf</td><td>iiiii</td><td>jjjjj</td></tr>
<tr>
<td rowspan=3>kkkkk</td>
<td rowspan=3>lllll</td>
<td>mmmm1</td>
</tr>
<tr><td>mmmm2</td></tr>
<tr><td>mmmm3</td></tr>
</table>