问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

高分悬赏!如何在EXCEL里分组排序!

发布网友 发布时间:2022-04-24 08:09

我来回答

5个回答

懂视网 时间:2022-05-15 08:16

这次给大家带来实现带分组数据Table表头排序功能,实现带分组数据Table表头排序功能的注意事项有哪些,下面就是实战案例,一起来看一下。

如下图:

要求:点击表头排序时,"分组"及"分组明细"的数据层次关系不变

从网上找了一段常规的table排序,改了改,以满足“分组支持”,贴在这里备份

<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
 <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
 <style type="text/css">
 .tbl-list, .tbl-list td, .tbl-list th {
 border: solid 1px #000;
 border-collapse: collapse;
 padding: 10px;
 margin: 15px;
 }
 </style>
 <script type="text/javascript" src="jquery.min.js"></script>
 <title>table sort</title>
 <script type="text/javascript">
 //排序 tableId: 表的id,iCol:第几列 ;dataType:iCol对应的列显示数据的数据类型
 function sortAble(th, tableId, iCol, dataType) {
 var ascChar = "▲";
 var descChar = "▼";
 var table = document.getElementById(tableId);
 //排序标题加背景色
 for (var t = 0; t < table.tHead.rows[0].cells.length; t++) {
 var th = $(table.tHead.rows[0].cells[t]);
 var thText = th.html().replace(ascChar, "").replace(descChar, "");
 if (t == iCol) {
 th.css("background-color", "#ccc");
 }
 else {
 th.css("background-color", "#fff");
 th.html(thText);
 }
 }
 var tbody = table.tBodies[0];
 var colRows = tbody.rows;
 var aTrs = new Array;
 //将得到的行放入数组,备用
 for (var i = 0; i < colRows.length; i++) {
 //注:如果要求“分组明细不参与排序”,把下面的注释去掉即可
 //if ($(colRows[i]).attr("group") != undefined) {
 aTrs.push(colRows[i]);
 //}
 }
 //判断上一次排列的列和现在需要排列的是否同一个。
 var thCol = $(table.tHead.rows[0].cells[iCol]);
 if (table.sortCol == iCol) {
 aTrs.reverse();
 } else {
 //如果不是同一列,使用数组的sort方法,传进排序函数
 aTrs.sort(compareEle(iCol, dataType));
 }
 var oFragment = document.createDocumentFragment();
 for (var i = 0; i < aTrs.length; i++) {
 oFragment.appendChild(aTrs[i]);
 }
 tbody.appendChild(oFragment);
 //记录最后一次排序的列索引
 table.sortCol = iCol;
 //给排序标题加“升序、降序” 小图标显示
 var th = $(table.tHead.rows[0].cells[iCol]);
 if (th.html().indexOf(ascChar) == -1 && th.html().indexOf(descChar) == -1) {
 th.html(th.html() + ascChar);
 }
 else if (th.html().indexOf(ascChar) != -1) {
 th.html(th.html().replace(ascChar, descChar));
 }
 else if (th.html().indexOf(descChar) != -1) {
 th.html(th.html().replace(descChar, ascChar));
 }
 //重新整理分组
 var subRows = $("#" + tableId + " tr[parent]");
 for (var t = subRows.length - 1; t >= 0 ; t--) {
 var parent = $("#" + tableId + " tr[group='" + $(subRows[t]).attr("parent") + "']");
 parent.after($(subRows[t]));
 }
 }
 //将列的类型转化成相应的可以排列的数据类型
 function convert(sValue, dataType) {
 switch (dataType) {
 case "int":
 return parseInt(sValue, 10);
 case "float":
 return parseFloat(sValue);
 case "date":
 return new Date(Date.parse(sValue));
 case "string":
 default:
 return sValue.toString();
 }
 }
 //排序函数,iCol表示列索引,dataType表示该列的数据类型
 function compareEle(iCol, dataType) {
 return function (oTR1, oTR2) {
 var vValue1 = convert(removeHtmlTag($(oTR1.cells[iCol]).html()), dataType);
 var vValue2 = convert(removeHtmlTag($(oTR2.cells[iCol]).html()), dataType);
 if (vValue1 < vValue2) {
 return -1;
 }
 else {
 return 1;
 }
 };
 }
 //去掉html标签
 function removeHtmlTag(html) {
 return html.replace(/<[^>]+>/g, "");
 }
 //jQuery加载完以后,分组行高亮背景,分组明细隐藏
 $(document).ready(function () {
 $("tr[group]").css("background-color", "#ff9");
 $("tr[parent]").hide();
 });
 //点击分组行时,切换分组明细的显示/隐藏
 function showSub(a) {
 var groupValue = $(a).parent().parent().attr("group");
 var subDetails = $("tr[parent='" + groupValue + "']");
 subDetails.toggle();
 }
 </script>
</head>
<body>
 <table id="tableId" class="tbl-list" cellpadding="0" cellspacing="0">
 <thead>
 <tr>
 <th>序号</th>
 <th onclick="sortAble(this,'tableId', 1,'string')"
 style="cursor:pointer">姓名</th>
 <th onclick="sortAble(this,'tableId', 2, 'date')"
 style="cursor:pointer">生日</th>
 <th onclick="sortAble(this,'tableId', 3, 'int')"
 style="cursor:pointer">年龄</th>
 <th onclick="sortAble(this,'tableId', 4, 'float')"
 style="cursor:pointer">工资</th>
 </tr>
 </thead>
 <tbody>
 <tr group="A">
 <td>1</td>
 <td><a href="#" onclick="showSub(this)">Group-A</a></td>
 <td>01/12/1982</td>
 <td>25</td>
 <td>1000.50</td>
 </tr>
 <tr parent="A">
 <td>2</td>
 <td>A-01</td>
 <td>01/09/1982</td>
 <td>25</td>
 <td>2000.10</td>
 </tr>
 <tr parent="A">
 <td>3</td>
 <td>A-02</td>
 <td>01/10/1982</td>
 <td>26</td>
 <td>2000.20</td>
 </tr>
 <tr group="B">
 <td>4</td>
 <td><a href="#" onclick="showSub(this)">Group-B</a></td>
 <td>10/14/1999</td>
 <td>18</td>
 <td>1000.20</td>
 </tr>
 <tr parent="B">
 <td>5</td>
 <td>B-01</td>
 <td>02/12/1982</td>
 <td>19</td>
 <td>3000.20</td>
 </tr>
 <tr parent="B">
 <td>6</td>
 <td>B-02</td>
 <td>03/12/1982</td>
 <td>20</td>
 <td>3000.30</td>
 </tr>
 <tr group="C">
 <td>7</td>
 <td><a href="#" onclick="showSub(this)">Group-C</a></td>
 <td>10/14/1980</td>
 <td>8</td>
 <td>1000.30</td>
 </tr>
 <tr parent="C">
 <td>8</td>
 <td>C-01</td>
 <td>03/12/1981</td>
 <td>17</td>
 <td>3100.30</td>
 </tr>
 </tbody>
 </table>
</body>
</html>

相信看了本文案例你已经掌握了方法,更多精彩请关注Gxl网其它相关文章!

推荐阅读:

jQuery仿支付宝首页焦点图效果

JS点击小图片关联显示大图片

热心网友 时间:2022-05-15 05:24

1、先建一个excel文档。

2、可以先把需要当分组题目的,标记上颜色,这样比较好区分。分组的时候,不要把这一类拉进去。

3、点击“数据”菜单栏,进入就能看到分组的按钮了。


4、把下面需要分组的列拉倒一起,就会出现如下显示,+点击放开,-点击收缩。

5、如下,如果需要的话,可以列好几个分组。分组就完成了。

热心网友 时间:2022-05-15 06:42

E列给个辅助列,公式如下:E2单元格输入,然后下拉。

=INT((ROW()-2)/10)+1

有了这个辅助列,就同时选中A-E5列,按辅助列排序,再按持股排名排序。工作完成。

如图:

20分不算高分悬赏啊。

追问额。。因为当时我只剩最后20分了。。这相当于我来说是全部的财富啊TT。。谢谢你~我已经弄好了

追答:)解决就好!

热心网友 时间:2022-05-15 08:16

其实解决这个问题很简单
在e2单元格输入公式int((row(a1)-1)/10)+(d2-1)/10,然后下拉公式,自动筛选,最后排序d列,公式没有验证试试看吧,睡了。

热心网友 时间:2022-05-15 10:08

在一个年级成绩总表里,用二种方法可以实现让表格先按班级排序,再按总分排序:

方法一:

先按总分排序,再按班级排序即可。


方法二:

使用多关键字的排序。


声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
mofile里面的视频能下载吗?怎么下? 谁有现在能用的MOFILE网站视频下载方法? MOFILE等视频网站的视频文件怎么下载啊,谢谢大家 mofile如何下载共享文件 怎么使用MOFILE下载视频? ...猪脚在主神空间第一个任务是生化,然后去梦魇空间做卧底,自己有一个... 赣商纵横长三角 想买个金的戒指送给妈妈,价格在2000以内,过年前买好还是年后买好? ...买什么牌子的好,价钱在1500左右,款式简单就好 怀孕晚期能不能吃鹅肉 如何用表格自动数据分组 wps分组表格怎么做 怎样用EXCEL给数据分组? excel表格数据分组,excel表格怎么分组 请问怎么把表格中的数据平均分组? 两个苹果手机用同一个ID,照片没一点隐私,直接同步到另一部上了,求怎么解除~ 两个苹果手机共用一个id,如果我关闭了我的照片流,那么另一部手机里 分期乐上面的手表是真是假 请问在分期乐上,分期买的东西靠谱吗? 有没有用过分期乐的,在上面买手机可靠吗?? 在分期乐上分期买东西靠谱么 分期乐上的东西是真的吗? 新房装修完后适宜放的绿色植物有哪些? 新房装修完后适宜放的绿色植物有哪些 新房放什么植物好? 新房放什么植物好 新房装修适合养哪些绿植? 新房养什么绿植好养呢 新房放什么植物最吉利 新房适合放哪些绿植? 框架结构的构件体系主要有哪几个子系统构成? 请问如何将EXCEL表格里的内容快速分组 建筑按承重结构有哪些 WPS中的excel表格将字段分组在哪 建筑结构体系有那些 建筑按承重结构分类可分为哪几种? - 信息提示 手机照相怎么调节? p40照相是黑色怎么调回来? 如图所示是落锤打桩示意图.设锤和桩的质量分别为m 1 ,m 2 ,锤的下落高度为h,锤与桩作用时间极短且不 三星手机拍照出来后照片是反的,原本不是这样的,怎样才可以调回去? 三一225h挖掘机配多大破碎锤 魅族手机照相是倒的,怎么把它调整回来? 日立挖掘机ZX250H-3能配液压锤吗?销售人说配上车用不住!是吗??? 手机照相是反的怎么调? 三一245h能带多大的锤 三星手机拍照片倒过来了怎么调回来 h3000金锤s能刷小米miui系统么? 三一225H配多大破碎锤 2019年3月5日买了yeechuiH18一锤手机,第一天用就黑屏卡的不要,不要的又找不到售后及商