performance - 优化宏以根据标题对列顺序进行排序
问题描述
关于如何通过宏对非常大的多列数据进行排序的任何想法。例如,按 AZ 或 0-9 等对所有列(或者可能只是选定的相邻列?)进行排序。类似于当前单列排序选项。
解决方案
假设您想通过查看每列的第一行来对所有列进行排序,我编写了一个宏:
function SortOneColumn()
{
count = document.GetColumns();
arr = new Array(count);
for( i = 0; i < count; ++i ) {
s = document.GetCell( 1, i + 1, eeCellIncludeNone );
arr[i] = { name: s, col: i };
}
arr.sort( function( a, b ) {
var nameA = a.name.toLowerCase();
var nameB = b.name.toLowerCase();
if( nameA < nameB ) {
return -1;
}
if( nameA > nameB ) {
return 1;
}
return 0;
});
bSorted = false;
for( i = 0; i < count; ++i ) {
if( arr[i].col != i ) {
document.MoveColumn( arr[i].col + 1, arr[i].col + 1, i + 1 );
bSorted = true;
break;
}
}
return bSorted;
}
while( SortOneColumn() );
有可能进一步优化宏,所以如果这还不够快,请告诉我。
要运行它,请将此代码另存为,例如,SortColumns.jsee
然后从宏菜单中的选择...中选择此文件。最后,在Macros菜单中选择Run SortColumns.jsee 。
推荐阅读
- shadow - 如何使用 ArCore Unity 获得阴影?
- javascript - 如何设置自定义步长输入值?
- arrays - 如何解析数组 Swift 中的 JSON 数组?
- c# - 是否可以通过 Visual Studio 扩展从插入符号位置获取类型信息?
- mysql - 根据两个表上的值获取不同的数据集
- java - UnsatisfiedLinkError:无法在 IA 32 位平台上加载 AMD 64 位 .dll
- apache-spark - 对分组后的分区数量感到困惑
- clojure - 在clojure中将哈希映射应用于匿名函数的快速方法
- excel - 具有动态过滤器文本框和多列结果的列表框,用于使用过滤器找到的匹配项
- javascript - 将散列数据作为键再次传递给散列会返回不正确的结果