表格重复数据筛选里有重复品种怎么合并

已经生成的数据表格大致内容如下:
地区地区商品代码商品名称数量有效期至距效期(月)产品批号规格单位条形码
需要将前四列具有相同文本的相邻单元格进行自动合并,合并后如下:
地区地区商品代码商品名称数量有效期至距效期(月)产品批号规格单位条形码
1、在html的head中引入jQuery
2、添加合并单元格的函数
1. //函数说明:合并指定表格(表格id为_w_table_id)指定列(列数为_w_table_colnum)的相同文本的相邻单元格
2. //参数说明:_w_table_id 为需要进行合并单元格的表格的id。如在HTMl中指定表格 id="data" ,此参数应为 #data
3. //参数说明:_w_table_colnum 为需要合并单元格的所在列。为数字,从最左边第一列为1开始算起。
4. function _w_table_rowspan(_w_table_id,_w_table_colnum){
_w_table_firsttd = "";
_w_table_currenttd = "";
_w_table_SpanNum = 0;
_w_table_Obj = $(_w_table_id + " tr td:nth-child(" + _w_table_colnum + ")");
_w_table_Obj.each(function(i){
_w_table_firsttd = $(this);
_w_table_SpanNum = 1;
_w_table_currenttd = $(this);
if(_w_table_firsttd.text()==_w_table_currenttd.text()){
_w_table_SpanNum++;
_w_table_currenttd.hide(); //remove();
_w_table_firsttd.attr("rowSpan",_w_table_SpanNum);
_w_table_firsttd = $(this);
_w_table_SpanNum = 1;
27. //函数说明:合并指定表格(表格id为_w_table_id)指定行(行数为_w_table_rownum)的相同文本的相邻单元格
28. //参数说明:_w_table_id 为需要进行合并单元格的表格id。如在HTMl中指定表格 id="data" ,此参数应为 #data
29. //参数说明:_w_table_rownum 为需要合并单元格的所在行。其参数形式请参考jQuery中nth-child的参数。
如果为数字,则从最左边第一行为1开始算起。
"even" 表示偶数行
"odd" 表示奇数行
"3n+1" 表示的行数为1、4、7、10.
34. //参数说明:_w_table_maxcolnum 为指定行中单元格对应的最大列数,列数大于这个数值的单元格将不进行比较合并。
此参数可以为空,为空则指定行的所有单元格要进行比较合并。
36. function _w_table_colspan(_w_table_id,_w_table_rownum,_w_table_maxcolnum){
if(_w_table_maxcolnum == void 0){_w_table_maxcolnum=0;}
_w_table_firsttd = "";
_w_table_currenttd = "";
_w_table_SpanNum = 0;
$(_w_table_id + " tr:nth-child(" + _w_table_rownum + ")").each(function(i){
_w_table_Obj = $(this).children();
_w_table_Obj.each(function(i){
_w_table_firsttd = $(this);
_w_table_SpanNum = 1;
}else if((_w_table_maxcolnum&0)&&(i&_w_table_maxcolnum)){
return "";
_w_table_currenttd = $(this);
if(_w_table_firsttd.text()==_w_table_currenttd.text()){
_w_table_SpanNum++;
_w_table_currenttd.hide(); //remove();
_w_table_firsttd.attr("colSpan",_w_table_SpanNum);
_w_table_firsttd = $(this);
_w_table_SpanNum = 1;
3、在html的head中调用合并函数合并单元格
1. &script type="text/javascript"&&!--
$(document).ready(function(){
_w_table_rowspan("#spdata",4);
_w_table_rowspan("#spdata",3);
_w_table_rowspan("#spdata",2);
_w_table_rowspan("#spdata",1);
9. &/script&
正好项目中有个小需求, 要求把表格指定列中内容相同的单元格进行合并,本质上涉及的就是td的rowspan属性, 数出含相同内容单元格的个数, 然后给第一个与上一行内容不同的td其rowspan属性附上正确的值即可, 为了能直观的理解, 效果如下
SuZhouCity
SuZhouCity
SuZhouCity
ShangHaiCity
ShangHaiCity
ShangHaiCity
GuangZhouCity
GuangZhouCity
处理之后的样子:
SuZhouCity
ShangHaiCity
GuangZhouCity
效果出来, 看上去比较简单, 下面先看下页面
&table id="process" cellpadding="2" cellspacing="0" border="1"&
&td&col0&/td&
&td&col1&/td&
&td&col2&/td&
&td&col3&/td&
&td&SuZhou&/td&
&td&11111&/td&
&td&22222&/td&
&td&SuZhouCity&/td&
&td&SuZhou&/td&
&td&33333&/td&
&td&44444&/td&
&td&SuZhouCity&/td&
&td&SuZhou&/td&
&td&55555&/td&
&td&66666&/td&
&td&SuZhouCity&/td&
&td&ShangHai&/td&
&td&77777&/td&
&td&88888&/td&
&td&ShangHaiCity&/td&
&td&ShangHai&/td&
&td&uuuuu&/td&
&td&hhhhh&/td&
&td&ShangHaiCity&/td&
&td&ShangHai&/td&
&td&ggggg&/td&
&td&ccccc&/td&
&td&ShangHaiCity&/td&
&td&GuangZhou&/td&
&td&ttttt&/td&
&td&eeeee&/td&
&td&GuangZhouCity&/td&
&td&GuangZhou&/td&
&td&ppppp&/td&
&td&qqqqq&/td&
&td&GuangZhouCity&/td&
// 这里写成了一个jquery插件的形式
$('#process').mergeCell({
// 目前只有cols这么一个配置项, 用数组表示列的索引,从0开始
// 然后根据指定列来处理(合并)相同内容单元格
cols: [0, 3]
下面看看这个小插件的完整代码:
;(function($) {
// 看过jquery源码就可以发现$.fn就是$.prototype, 只是为了兼容早期版本的插件
// 才保留了jQuery.prototype这个形式
$.fn.mergeCell = function(options) {
return this.each(function() {
var cols = options.
for ( var i = cols.length - 1; cols[i] != i--) {
// fixbug console调试
// console.debug(cols[i]);
mergeCell($(this), cols[i]);
dispose($(this));
// 如果对javascript的closure和scope概念比较清楚, 这是个插件内部使用的private方法
// 具体可以参考本人前一篇随笔里介绍的那本书
function mergeCell($table, colIndex) {
$table.data('col-content', ''); // 存放单元格内容
$table.data('col-rowspan', 1);
// 存放计算的rowspan值
$table.data('col-td', $());
// 存放发现的第一个与前一行比较结果不同td(jQuery封装过的), 默认一个"空"的jquery对象
$table.data('trNum', $('tbody tr', $table).length); // 要处理表格的总行数, 用于最后一行做特殊处理时进行判断之用
// 我们对每一行数据进行"扫面"处理 关键是定位col-td, 和其对应的rowspan
$('tbody tr', $table).each(function(index) {
// td:eq中的colIndex即列索引
var $td = $('td:eq(' + colIndex + ')', this);
// 取出单元格的当前内容
var currentContent = $td.html();
// 第一次时走此分支
if ($table.data('col-content') == '') {
$table.data('col-content', currentContent);
$table.data('col-td', $td);
// 上一行与当前行内容相同
if ($table.data('col-content') == currentContent) {
// 上一行与当前行内容相同则col-rowspan累加, 保存新值
var rowspan = $table.data('col-rowspan') + 1;
$table.data('col-rowspan', rowspan);
// 值得注意的是
如果用了$td.remove()就会对其他列的处理造成影响
$td.hide();
// 最后一行的情况比较特殊一点
// 比如最后2行 td中的内容是一样的, 那么到最后一行就应该把此时的col-td里保存的td设置rowspan
if (++index == $table.data('trNum'))
$table.data('col-td').attr('rowspan', $table.data('col-rowspan'));
} else { // 上一行与当前行内容不同
// col-rowspan默认为1, 如果统计出的col-rowspan没有变化, 不处理
if ($table.data('col-rowspan') != 1) {
$table.data('col-td').attr('rowspan', $table.data('col-rowspan'));
// 保存第一次出现不同内容的td, 和其内容, 重置col-rowspan
$table.data('col-td', $td);
$table.data('col-content', $td.html());
$table.data('col-rowspan', 1);
// 同样是个private函数
清理内存之用
function dispose($table) {
$table.removeData();
})(jQuery);
主要的说明在注释里应该都有了, 代码的确比较简单, 像有些地方还值得改进
处理的table内容是从tbody开始查找的, 如果没有tbody, 那应该给出个更通用化的方案
for ( var i = cols.length - 1; cols[i] != i--)...如果表格数据量大, 处理的列也比较多, 这里不进行优化会有造成浏览器线程阻塞的风险, 可以考虑用setTimeout
其他什么值得改进的, 我想应该会不少的
阅读(...) 评论() &您还未登陆,请登录后操作!
怎么把几个表格合并在一起
怎么把1234个表里面相同位置的数据相加在一起?
在另一个工作表里输入公式:=IF(SUM('1:4'!A1)=0,"",SUM('1:4'!A1))向下和向右进行复制到所需位置即可。请看附件。
回答数:2044
您的举报已经提交成功,我们将尽快处理,谢谢!把excel里有一列单元格值相同的各行合并成一行 怎么做到?_百度知道
把excel里有一列单元格值相同的各行合并成一行 怎么做到?
比如说B2 B3 B4三个单元格值相同 就要第二三四行合并成一行怎样做最简单?好像有一个数据-筛选-去重但是试了几次都不行
谢谢楼上两位 但是我感觉应该有比你们说的简单的方法 再看看吧~
提问者采纳
hiphotos。&nbsp://f.hiphotos.jpg" target="_blank" title="点击查看大图" class="ikqb_img_alink"><img class="ikqb_img" src="http,给你个附件?<a href="http://f.com/zhidao/wh%3D450%2C600/sign=7a8a8baeb48f8c54e386cd2b0f1901c3//zhidao/wh%3D600%2C800/sign=a31ddf9fce1b9d168aee98b7/8644ebf81a4c510f0c22af5aaa588://f.hiphotos.baidu.jpg" esrc="是这种效果吗./zhidao/pic/item/8644ebf81a4c510f0c22af5aaa588,留个联系方式如果数据量大或经常这样操作用VBA
是的 是这个意思原来用过 应该很简单的
不知道很简单的,可以用格式刷,但数量多,没有规律,非VBA不可。
其他类似问题
按默认排序
其他3条回答
默认为列标题:$B$12!错误为止:$B$12。对于2003版可以在某一单元格如C1输入(例子是B2至B12中须有数据)=OFFSET($B$2:$B$12)-2,0)=ROW($B$3,0)&&quot,以Ctrl+Shift+Enter三键结束向下填充至出现空格后再出现#NUM,65530),SMALL(IF(MATCH($B$3;此公式为数组公式,$B$3,ROW(A1));&quot:$B$12)-2,ROW($B$3。注意第一行不参加筛选,将筛选后的数据复制——粘贴(或者选中“将筛选结果复制到其他位置”)即可对于版可以在数据——筛选——高级中选中“选择不重复记录”
可以利用 数据分类汇总,再利用定位,合并单元格,再使用格式刷,思路基本这样,要看具体问题。
输入公式=if(countif(b:b,b2)=1,&&,&重复&),向下填充就能看到重复了。希望能帮到你!
excel的相关知识
您可能关注的推广
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁jQuery合并html表格中相同文本的相邻单元格_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
评价文档:
4页免费3页免费7页免费3页&#165;2.005页&#165;3.002页免费6页免费5页免费2页免费2页免费
喜欢此文档的还喜欢3页免费6页免费84页1下载券10页免费88页2下载券
jQuery合并html表格中相同文本的相邻单元格|网&#8203;上&#8203;收&#8203;集&#8203;j&#8203;Q&#8203;u&#8203;e&#8203;r&#8203;y&#8203;合&#8203;并&#8203;t&#8203;a&#8203;b&#8203;l&#8203;e&#8203;的&#8203;行&#8203;列
把文档贴到Blog、BBS或个人站等:
普通尺寸(450*500pix)
较大尺寸(630*500pix)
你可能喜欢

我要回帖

更多关于 表格合并 的文章

 

随机推荐