10万行数据1秒内排序,智表 ZCELL 让你轻松驾驭数据秩序
<div><p>在数据驱动决策的时代,面对海量杂乱的数据,快速梳理出清晰的逻辑秩序是提升工作效率的关键。无论是筛选销售榜单中的 Top 产品、整理员工信息表中的职级与入职时间,还是按自定义规则排列特殊业务数据,排序功能都是数据处理环节的 “刚需工具”。传统表格工具的排序功能常受限于操作繁琐、多条件排序逻辑复杂、自定义规则难实现等问题,而智表 ZCELL 凭借其灵活、高效的排序能力,彻底解决这些痛点,让数据排序从 “耗时操作” 变为 “一键搞定”。</p>
<h2 data-id="heading-0">一、插件初始化与数据源初始化</h2>
<p>在演示之前,需要先做好插件和数据源初始化工作,具体步骤如下:</p>
<p>以下是具体代码示例:</p>
<ol>
<li>初始化 zcell插件</li>
</ol>
<div class="cnblogs_Highlighter">
<pre class="brush:csharp;gutter:true;"> //初始化ZCELL
var options = {
container: document.getElementById("zcell-container"),
};
zcell_io = new ZCell.WorkBook(options);
</pre>
</div>
<p> </p>
<p>2. 初始化工作表,设置表头冻结,行数为10万行</p>
<div class="code-block-extension-header">
<div class="code-block-extension-headerLeft">
<div class="code-block-extension-foldBtn">
<div class="cnblogs_code">
<pre> <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">初始化SHEET</span>
let sheetoption =<span style="color: rgba(0, 0, 0, 1)"> {
name: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">sheet01</span><span style="color: rgba(128, 0, 0, 1)">"</span>, <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">表格名</span>
rowCount: <span style="color: rgba(128, 0, 128, 1)">100000</span>, <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">行数</span>
colCount: <span style="color: rgba(128, 0, 128, 1)">10</span>, <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 列数</span>
showRowLab: <span style="color: rgba(128, 0, 128, 1)">0</span>, <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">行标签不显示</span>
showColLab: <span style="color: rgba(128, 0, 128, 1)">0</span>, <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">列标签不显示</span>
rowHSize: <span style="color: rgba(128, 0, 128, 1)">30</span>, <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">默认行高</span>
colWSize: <span style="color: rgba(128, 0, 128, 1)">100</span>, <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">默认列宽</span>
freezeTop: <span style="color: rgba(128, 0, 128, 1)">0</span>, <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">顶部冻结</span>
showFreezeLine: <span style="color: rgba(128, 0, 128, 1)">0</span>, <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">冻结线不显示</span>
<span style="color: rgba(0, 0, 0, 1)"> };
sheet </span>= zcell_io.AppendSheet(sheetoption);</pre>
</div>
<p> </p>
</div>
</div>
</div>
<p>3. 设置表头和样式,也可以不设置</p>
<div class="code-block-extension-header">
<div class="code-block-extension-headerLeft">
<div class="code-block-extension-foldBtn">
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">#region ------设置表头 文本和样式-----</span>
sheet.SetCellValue(<span style="color: rgba(128, 0, 128, 1)">0</span>, <span style="color: rgba(128, 0, 128, 1)">0</span>, <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">序号</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">);
sheet.SetCellValue(</span><span style="color: rgba(128, 0, 128, 1)">0</span>, <span style="color: rgba(128, 0, 128, 1)">1</span>, <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">人物</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">);
sheet.SetCellValue(</span><span style="color: rgba(128, 0, 128, 1)">0</span>, <span style="color: rgba(128, 0, 128, 1)">2</span>, <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">等级</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">);
sheet.SetCellValue(</span><span style="color: rgba(128, 0, 128, 1)">0</span>, <span style="color: rgba(128, 0, 128, 1)">3</span>, <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">特征1</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">);
sheet.SetCellValue(</span><span style="color: rgba(128, 0, 128, 1)">0</span>, <span style="color: rgba(128, 0, 128, 1)">4</span>, <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">特征2</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">);
sheet.SetCellValue(</span><span style="color: rgba(128, 0, 128, 1)">0</span>, <span style="color: rgba(128, 0, 128, 1)">5</span>, <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">特征3</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">);
sheet.SetCellValue(</span><span style="color: rgba(128, 0, 128, 1)">0</span>, <span style="color: rgba(128, 0, 128, 1)">6</span>, <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">特征4</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">);
sheet.SetCellValue(</span><span style="color: rgba(128, 0, 128, 1)">0</span>, <span style="color: rgba(128, 0, 128, 1)">7</span>, <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">特征5</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">表头样式</span>
let headstyle1 =<span style="color: rgba(0, 0, 0, 1)"> {
hAlign: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">center</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
fontBold: </span><span style="color: rgba(128, 0, 128, 1)">1</span><span style="color: rgba(0, 0, 0, 1)">,
backColor: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">#886600</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
fontColor: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">#FFFFFF</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
};
sheet.SetCellStyle(</span><span style="color: rgba(128, 0, 128, 1)">0</span>, <span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">, headstyle1);
sheet.SetCellStyle(</span><span style="color: rgba(128, 0, 128, 1)">0</span>, <span style="color: rgba(128, 0, 128, 1)">1</span><span style="color: rgba(0, 0, 0, 1)">, headstyle1);
sheet.SetCellStyle(</span><span style="color: rgba(128, 0, 128, 1)">0</span>, <span style="color: rgba(128, 0, 128, 1)">2</span><span style="color: rgba(0, 0, 0, 1)">, headstyle1);
sheet.SetCellStyle(</span><span style="color: rgba(128, 0, 128, 1)">0</span>, <span style="color: rgba(128, 0, 128, 1)">3</span><span style="color: rgba(0, 0, 0, 1)">, headstyle1);
sheet.SetCellStyle(</span><span style="color: rgba(128, 0, 128, 1)">0</span>, <span style="color: rgba(128, 0, 128, 1)">4</span><span style="color: rgba(0, 0, 0, 1)">, headstyle1);
sheet.SetCellStyle(</span><span style="color: rgba(128, 0, 128, 1)">0</span>, <span style="color: rgba(128, 0, 128, 1)">5</span><span style="color: rgba(0, 0, 0, 1)">, headstyle1);
sheet.SetCellStyle(</span><span style="color: rgba(128, 0, 128, 1)">0</span>, <span style="color: rgba(128, 0, 128, 1)">6</span><span style="color: rgba(0, 0, 0, 1)">, headstyle1);
sheet.SetCellStyle(</span><span style="color: rgba(128, 0, 128, 1)">0</span>, <span style="color: rgba(128, 0, 128, 1)">7</span><span style="color: rgba(0, 0, 0, 1)">, headstyle1);
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">设置列宽</span>
sheet.SetColWidth(<span style="color: rgba(128, 0, 128, 1)">3</span>, <span style="color: rgba(128, 0, 128, 1)">3</span>, <span style="color: rgba(128, 0, 128, 1)">200</span>); <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">设置列宽
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">#endregion ------设置表头 文本和样式-----</span></pre>
</div>
<p> </p>
</div>
</div>
</div>
<p>4. 准备数据集和数据源,并绑定到工作表</p>
<div class="code-block-extension-header">
<div class="code-block-extension-headerLeft">
<div class="code-block-extension-foldBtn">
<div class="cnblogs_code">
<pre> <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">准备数据集</span>
<span style="color: rgba(0, 0, 255, 1)">var</span> datas =<span style="color: rgba(0, 0, 0, 1)"> [];
</span><span style="color: rgba(0, 0, 255, 1)">for</span> (let i = <span style="color: rgba(128, 0, 128, 1)">0</span>; i < <span style="color: rgba(128, 0, 128, 1)">100000</span>; i++<span style="color: rgba(0, 0, 0, 1)">) {
let randv </span>= getRandomInt(<span style="color: rgba(128, 0, 128, 1)">1</span>, <span style="color: rgba(128, 0, 128, 1)">4</span><span style="color: rgba(0, 0, 0, 1)">);
let sv;
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (randv == <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">1</span><span style="color: rgba(128, 0, 0, 1)">"</span>) sv = <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">甲等</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">else</span> <span style="color: rgba(0, 0, 255, 1)">if</span> (randv == <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">2</span><span style="color: rgba(128, 0, 0, 1)">"</span>) sv = <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">乙等</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">else</span> <span style="color: rgba(0, 0, 255, 1)">if</span> (randv == <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">3</span><span style="color: rgba(128, 0, 0, 1)">"</span>) sv = <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">丙等</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">else</span> <span style="color: rgba(0, 0, 255, 1)">if</span> (randv == <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">4</span><span style="color: rgba(128, 0, 0, 1)">"</span>) sv = <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">丁等</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">;
let item </span>=<span style="color: rgba(0, 0, 0, 1)"> {
rowno: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">行号</span><span style="color: rgba(128, 0, 0, 1)">"</span> +<span style="color: rgba(0, 0, 0, 1)"> i,
person: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">徒弟</span><span style="color: rgba(128, 0, 0, 1)">"</span> + getRandomInt(<span style="color: rgba(128, 0, 128, 1)">1</span>, <span style="color: rgba(128, 0, 128, 1)">4</span><span style="color: rgba(0, 0, 0, 1)">),
status: sv,
lableval: i </span>* <span style="color: rgba(128, 0, 128, 1)">2</span> + <span style="color: rgba(128, 0, 128, 1)">1</span><span style="color: rgba(0, 0, 0, 1)">,
lableval2: i </span>* <span style="color: rgba(128, 0, 128, 1)">2</span> + <span style="color: rgba(128, 0, 128, 1)">2</span><span style="color: rgba(0, 0, 0, 1)">,
lableval3: i </span>* <span style="color: rgba(128, 0, 128, 1)">2</span> + <span style="color: rgba(128, 0, 128, 1)">3</span><span style="color: rgba(0, 0, 0, 1)">,
lableval4: i </span>* <span style="color: rgba(128, 0, 128, 1)">2</span> + <span style="color: rgba(128, 0, 128, 1)">4</span><span style="color: rgba(0, 0, 0, 1)">,
lableval5: i </span>* <span style="color: rgba(128, 0, 128, 1)">2</span> + <span style="color: rgba(128, 0, 128, 1)">5</span><span style="color: rgba(0, 0, 0, 1)">,
};
datas.push(item);
}
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">#region--------准备数据源--------</span>
<span style="color: rgba(0, 0, 0, 1)">
let option2 </span>=<span style="color: rgba(0, 0, 0, 1)"> {
name: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">data1</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
type: </span><span style="color: rgba(128, 0, 128, 1)">1</span>, <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">0- datacard,1是 datatable</span>
<span style="color: rgba(0, 0, 0, 1)"> data: datas,
startrow: </span><span style="color: rgba(128, 0, 128, 1)">1</span>, <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">datatable 式需要设置</span>
startcol: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">A</span><span style="color: rgba(128, 0, 0, 1)">"</span>, <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">datatable 式需要设置</span>
autoBindColumn: <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">,
};
let ds </span>=<span style="color: rgba(0, 0, 0, 1)"> sheet.CreatDataSource(option2);
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">绑定数据源</span>
sheet.BindDataSource(ds);</pre>
</div>
<p> </p>
</div>
</div>
</div>
<pre><code class="hljs language-ini code-block-extension-codeShowNum" lang="ini"></code></pre>
<p>数据加载后效果如下:</p>
<p><img src="https://p6-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/54c0f2a5a17c46a1b1fbdd864340d182~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5biG5byg6Iqz5pi-:q75.awebp?rk3s=f64ab15b&x-expires=1769952415&x-signature=G2yReE3uAGphfHnVz7GTWKRB6rQ%3D" alt="" class="medium-zoom-image" loading="lazy"></p>
<h2 data-id="heading-1">二、单字段基础排序:极简操作,秒变有序数据</h2>
<p>智表 ZCELL 的基础排序功能遵循 “简单易用” 的设计原则,开发者无需复杂配置,通过几行代码即可实现单字段的升序或降序排列,满足日常数据整理的基础需求。无论是文本、数字还是日期类型的数据,智表 ZCELL 都能精准识别并快速排序,让杂乱数据瞬间变得条理清晰。</p>
<ol>
<li>排序参数设置,设置排序的列号和顺序,支持升序和降序</li>
</ol>
<div class="code-block-extension-header">
<div class="code-block-extension-headerLeft">
<div class="code-block-extension-foldBtn">
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">排序参数设置</span>
let option =<span style="color: rgba(0, 0, 0, 1)"> {
sortinfo: [
{
sortindex: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">B</span><span style="color: rgba(128, 0, 0, 1)">"</span>, <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">排序列号,必须大写,对B列进行排序</span>
sortorder: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">asc</span><span style="color: rgba(128, 0, 0, 1)">"</span>, <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">支持 asc 和 desc ,按照升序排序</span>
<span style="color: rgba(0, 0, 0, 1)"> },
],
};</span></pre>
</div>
</div>
</div>
</div>
<pre><code class="hljs language-csharp code-block-extension-codeShowNum" lang="csharp"></code></pre>
<p>2. 开始排序,调用排序方法,知名排序起始行列和结束行列的范围。</p>
<div class="code-block-extension-header">
<div class="code-block-extension-headerLeft">
<div class="code-block-extension-foldBtn">
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">开始时间</span>
<span style="color: rgba(0, 0, 255, 1)">var</span> myTime1 =<span style="color: rgba(0, 0, 0, 1)"> window.performance.now();
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">执行排序方法,排序范围为 0行,0列开始到 99999行 和 7列</span>
sheet.SortArea(<span style="color: rgba(128, 0, 128, 1)">0</span>, <span style="color: rgba(128, 0, 128, 1)">0</span>, <span style="color: rgba(128, 0, 128, 1)">99999</span>, <span style="color: rgba(128, 0, 128, 1)">7</span><span style="color: rgba(0, 0, 0, 1)">, option);
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">结束时间</span>
<span style="color: rgba(0, 0, 255, 1)">var</span> myTime2 =<span style="color: rgba(0, 0, 0, 1)"> window.performance.now();
let timecost </span>= (myTime2 - myTime1) / <span style="color: rgba(128, 0, 128, 1)">1000</span><span style="color: rgba(0, 0, 0, 1)">;
$(</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">#timecost1</span><span style="color: rgba(128, 0, 0, 1)">"</span>).html(timecost + <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">秒</span><span style="color: rgba(128, 0, 0, 1)">"</span>);<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">输出耗时</span></pre>
</div>
<p> </p>
</div>
</div>
</div>
<p>点击按钮后,数据立即按照 B列 从低到高排列,排序范围内的数据都会跟随排列,不在排序范围内数据则会保持不动。耗时显示0.85秒,整个过程无延迟,操作直观高效。</p>
<h2 data-id="heading-2">三、多列排序:复杂条件下的精准数据梳理</h2>
<p>在实际业务场景中,单一字段排序往往无法满足需求。例如,HR 整理员工表时,需要先按 “部门” 分组,再按 “入职时间” 降序排列(同一部门内,新员工在前);电商平台分析订单时,需先按 “订单状态”(已付款>待付款>已取消)排序,再按 “下单时间” 降序排列。此时,智表 ZCELL 的<strong>多列排序</strong>功能就能发挥关键作用,支持按多个字段的优先级依次排序,让数据逻辑更贴合业务场景。还是以上面已经初始化的数据源为例进行演示。</p>
<ol>
<li>多列排序时排序参数设置。</li>
</ol>
<p>通过数组配置排序规则,数组中字段的顺序即为排序优先级(先按第一个字段排序,若第一个字段值相同,则按第二个字段排序,以此类推)。我们先以B列作为主排序字段,相同时再用D列作为排序字段。</p>
<div class="code-block-extension-header">
<div class="code-block-extension-headerLeft">
<div class="code-block-extension-foldBtn">
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">排序参数设置</span>
let option =<span style="color: rgba(0, 0, 0, 1)"> {
sortinfo: [
{
sortindex: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">B</span><span style="color: rgba(128, 0, 0, 1)">"</span>, <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">排序列号,必须大写先以B列升序排序</span>
sortorder: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">asc</span><span style="color: rgba(128, 0, 0, 1)">"</span>, <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">支持 asc 和 desc</span>
<span style="color: rgba(0, 0, 0, 1)"> },
{
sortindex: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">D</span><span style="color: rgba(128, 0, 0, 1)">"</span>,<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">再以D列降序排序</span>
sortorder: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">desc</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
},
],
};</span></pre>
</div>
</div>
</div>
</div>
<pre><code class="hljs language-csharp code-block-extension-codeShowNum" lang="csharp"></code></pre>
<p>2. 执行排序,执行排序方法与单列排序时相同,非常简单。</p>
<div class="code-block-extension-header">
<div class="code-block-extension-headerLeft">
<div class="code-block-extension-foldBtn">
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">开始时间</span>
<span style="color: rgba(0, 0, 255, 1)">var</span> myTime1 =<span style="color: rgba(0, 0, 0, 1)"> window.performance.now();
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">执行排序方法</span>
sheet.SortArea(<span style="color: rgba(128, 0, 128, 1)">0</span>, <span style="color: rgba(128, 0, 128, 1)">0</span>, <span style="color: rgba(128, 0, 128, 1)">99999</span>, <span style="color: rgba(128, 0, 128, 1)">7</span><span style="color: rgba(0, 0, 0, 1)">, option);
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">结束时间</span>
<span style="color: rgba(0, 0, 255, 1)">var</span> myTime2 =<span style="color: rgba(0, 0, 0, 1)"> window.performance.now();
let timecost </span>= (myTime2 - myTime1) / <span style="color: rgba(128, 0, 128, 1)">1000</span><span style="color: rgba(0, 0, 0, 1)">;
$(</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">#timecost1</span><span style="color: rgba(128, 0, 0, 1)">"</span>).html(timecost + <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">秒</span><span style="color: rgba(128, 0, 0, 1)">"</span>);</pre>
</div>
</div>
</div>
</div>
<pre><code class="hljs language-ini code-block-extension-codeShowNum" lang="ini"></code></pre>
<p>点击按钮排序后,数据先按照人物名称进行排序,同一人物时,再按照特征1列值进行排序,整体耗时显示0.88秒,整个过程无延迟。</p>
<h2 data-id="heading-3">三、自定义排序:突破规则限制,适配特殊业务场景</h2>
<p>除了基础排序和多列排序,实际工作中还会遇到 “非标准排序规则” 的需求。例如:</p>
<ul>
<li>电商平台的 “商品状态” 需按 “在售>预售>下架” 排序(而非字母或数字顺序);</li>
<li>物流系统的 “配送优先级” 需按 “紧急>普通>延迟” 排序;</li>
<li>教育机构的 “班级类型” 需按 “实验班>重点班>普通班” 排序。</li>
</ul>
<p>这些场景下,传统排序功能无法满足需求,而智表 ZCELL 的<strong>自定义排序</strong>功能,允许开发者通过自定义比较函数,实现任意规则的排序,彻底突破标准排序的限制。</p>
<p>继续以上面的初始化数据为列,步骤如下:</p>
<ol>
<li>自定义比较函数,如下所示,我们定义固定数组,按照数组内元素数据位置进行比较。</li>
</ol>
<div class="code-block-extension-header">
<div class="code-block-extension-headerLeft">
<div class="code-block-extension-foldBtn">
<div class="cnblogs_code">
<pre> <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">自定义排序函数</span>
<span style="color: rgba(0, 0, 0, 1)"> function mysortfun(a, b) {
let datas </span>= [<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">甲等</span><span style="color: rgba(128, 0, 0, 1)">"</span>, <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">乙等</span><span style="color: rgba(128, 0, 0, 1)">"</span>, <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">丙等</span><span style="color: rgba(128, 0, 0, 1)">"</span>, <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">丁等</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">];
let indexa </span>=<span style="color: rgba(0, 0, 0, 1)"> datas.indexOf(a);
let indexb </span>=<span style="color: rgba(0, 0, 0, 1)"> datas.indexOf(b);
</span><span style="color: rgba(0, 0, 255, 1)">return</span> indexa -<span style="color: rgba(0, 0, 0, 1)"> indexb;
}</span></pre>
</div>
<p> </p>
</div>
</div>
</div>
<p>2. 定义排序参数,对于C列(等级列),我们采用自定义比较函数进行比较,引用我们定义好的函数</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">排序参数设置</span>
let option =<span style="color: rgba(0, 0, 0, 1)"> {
sortinfo: [
{
sortindex: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">B</span><span style="color: rgba(128, 0, 0, 1)">"</span>, <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">排序列号,必须大写</span>
sortorder: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">asc</span><span style="color: rgba(128, 0, 0, 1)">"</span>, <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">支持 asc 和 desc</span>
<span style="color: rgba(0, 0, 0, 1)"> },
{
sortindex: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">C</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
sortorder: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">asc</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
sortfun: mysortfun, </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">这里引用自定义比较函数,</span>
<span style="color: rgba(0, 0, 0, 1)"> },
],
};</span></pre>
</div>
<p> </p>
<p>3. 执行排序,调用方法与前面一致</p>
<div class="code-block-extension-header">
<div class="code-block-extension-headerLeft">
<div class="code-block-extension-foldBtn">
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">开始时间</span>
<span style="color: rgba(0, 0, 255, 1)">var</span> myTime1 =<span style="color: rgba(0, 0, 0, 1)"> window.performance.now();
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">执行排序方法</span>
sheet.SortArea(<span style="color: rgba(128, 0, 128, 1)">0</span>, <span style="color: rgba(128, 0, 128, 1)">0</span>, <span style="color: rgba(128, 0, 128, 1)">99999</span>, <span style="color: rgba(128, 0, 128, 1)">7</span><span style="color: rgba(0, 0, 0, 1)">, option);
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">结束时间</span>
<span style="color: rgba(0, 0, 255, 1)">var</span> myTime2 =<span style="color: rgba(0, 0, 0, 1)"> window.performance.now();
let timecost </span>= (myTime2 - myTime1) / <span style="color: rgba(128, 0, 128, 1)">1000</span><span style="color: rgba(0, 0, 0, 1)">;
$(</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">#timecost1</span><span style="color: rgba(128, 0, 0, 1)">"</span>).html(timecost + <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">秒</span><span style="color: rgba(128, 0, 0, 1)">"</span>);</pre>
</div>
<p> </p>
</div>
</div>
</div>
<p>点击按钮后,数据先按照人物名称进行排序,同一人物时,再按照等级列进行排序,整体耗时显示0.92秒,整个过程无延迟。</p>
<p>通过自定义比较函数,任何复杂的排序逻辑都能轻松实现,让排序功能完全适配业务场景。</p>
<h2 data-id="heading-4">四、智表 ZCELL 排序功能的核心优势</h2>
<p>相比传统表格工具或其他前端表格组件,智表 ZCELL 的排序功能具有三大核心优势:</p>
<ol>
<li><strong>高效性能</strong>:采用优化的排序算法,即使面对 10 万级海量数据,排序响应时间仍控制在 1秒 以内,无卡顿延迟;</li>
<li><strong>操作灵活</strong>:支持单列排序、多列排序、自定义排序三种模式,可通过 API 快速切换,也可结合 UI 组件(如排序按钮、下拉菜单)实现用户自主排序;</li>
</ol>
<p>无论是企业级的数据管理系统(如 CRM、ERP)、电商平台的商品分析模块,还是教育机构的成绩管理工具,智表 ZCELL 的排序功能都能帮助开发者快速实现数据梳理,让用户轻松驾驭数据秩序,高效挖掘数据价值。</p>
<p>现在,智表 ZCELL 已开放免费试用,立即接入智表zcell官网进行测试,体验排序功能带来的便捷与高效!如需定制化排序方案,还可联系技术团队获取专属支持,让数据处理效率再升级。</p>
</div><br><br>
来源:https://www.cnblogs.com/devilzh/p/19532209
頁:
[1]