【问题标题】:Optimised Macro to sort Column Order based on Headers优化宏以根据标题对列顺序进行排序
【发布时间】:2021-08-11 18:50:05
【问题描述】:

关于如何通过宏对非常大的多列数据进行排序的任何想法。例如,按 A-Z 或 0-9 等对所有列(或者可能只是选定的相邻列?)进行排序。类似于当前的单列排序选项。

【问题讨论】:

  • 我相信我理解你的问题,但是你能通过写一个例子来澄清你的问题吗?
  • 您想通过查看每列的第一行来对列进行排序吗?

标签: performance emeditor


【解决方案1】:

假设你想通过查看每一列的第一行来对所有列进行排序,我写了一个宏:

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 菜单的 Select... 中选择此文件。最后,在 Macros 菜单中选择 Run SortColumns.jsee

【讨论】:

  • 感谢 Yutaka - 这完全符合要求(而且看起来足够快)。也许在未来的版本中,当用户右键单击标尺上方的左上角区域时,优化版本可能是一个原生菜单选项(因此所有列都被选中)(类似于按标题对所有列进行排序)?再次感谢。
猜你喜欢
  • 1970-01-01
  • 2014-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-06
  • 2011-05-22
  • 1970-01-01
  • 2019-07-26
相关资源
最近更新 更多