我尝试在JSP页面中使用Apache POI从输入Excel表格生成HTML表格。我已设法编写从Excel获取数据并显示为HTML表的部分,但问题是某些主要ID已在多行中重复,但它们在其他行中具有不同的值。例子(2姓不同姓氏的约翰斯):
<table>
<tr>
<td>Jill</td>
<td>Smith</td>
<td>50</td>
</tr>
<tr>
<td>John</td>
<td>Jackson</td>
<td>94</td>
</tr>
<tr>
<td>John</td>
<td>Doe</td>
<td>80</td>
</tr>
</table>
生成表格的代码:
out.println("<table>");
while (rowIter.hasNext())
{
row =(HSSFRow)rowIter.next();
input_fname = row.getCell(0);
input_lname = row.getCell(1);
input_age = row.getCell(2);
fname = input_fname.getRichStringCellValue().getString();
lname = input_lname.getRichStringCellValue().getString();
age = input_age.getRichStringCellValue().getString();
out.println("<tr>");
out.println("<td>"+fname+"</td>");
out.println("<td>"+lname+"</td>");
out.println("<td>"+age+"</td>");
out.println("</tr>");
}
}
out.println("</table>");
请有人告诉我如何根据主ID,名字合并重复的行,如下所示:
<table>
<tr>
<td>Jill</td>
<td>Smith</td>
<td>50</td>
</tr>
<tr>
<td rowspan="2">John</td>
<td>Jackson</td>
<td>94</td>
</tr>
<tr>
<td>Doe</td>
<td>80</td>
</tr>
</table>
我试过搜索类似的问题,但我找不到解决问题的方法,而且我是Javascript和JQuery的初学者(可能就是这个问题)。任何建议都非常感谢。提前谢谢!
答案 0 :(得分:2)
你问的是错误的问题。首先正确编写HTML而不是尝试在HTML上进行某些合并会不会更容易?
因此,循环条目并将它们放入一些合适的数据结构中,例如由fname键入并以列表作为值的Map。 Person类是一个容纳数据的简单bean。
for(String key : people.keySet()){
List<Person> persons = people.get(key));
int rowSpan = persons.size();
//write the HTML accordingly.
}
然后循环遍历此数据结构并编写HTML:
{{1}}
答案 1 :(得分:1)
你可以:
out.println("<td class="fname">"+fname+"</td>");
然后使用jQuery
var last_selected_name = "";
/* Get all the first names cells */
jQuery('td.fname').each(function(i,obj){
current_name = jQuery(obj).text();
/* check for repeated names */
if (current_name == last_selected_name)
{
jQuery("td.fname:contains('"+current_name+"')").each(function(index,object){
if (index == 0)
{
/* check if already has rowspan attribtue */
row_span = jQuery(object).attr('rowspan')?jQuery(object).attr('rowspan'):1;
/* add one */
row_span++;
/* include the new rowspan number */
jQuery(object).attr('rowspan',row_span)
}
else
{
/* delete the other first name cells */
jQuery(object).remove();
}
})
}
last_selected_name = current_name;
})