优化宏以根据 Headers 对列顺序进行排序
Optimised Macro to sort Column Order based on Headers
关于如何通过宏对非常大的 multi-column 数据进行排序的任何想法。因此,例如,按 A-Z 或 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
,然后select这个文件从Select... 在 宏 菜单中。最后,select 运行 SortColumns.jsee 在 Macros 菜单中。
关于如何通过宏对非常大的 multi-column 数据进行排序的任何想法。因此,例如,按 A-Z 或 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
,然后select这个文件从Select... 在 宏 菜单中。最后,select 运行 SortColumns.jsee 在 Macros 菜单中。