1

開始インデックスと終了インデックスを入力として受け取る、Excel 列の名前で範囲を生成する高速関数の助けが必要です。

i.e. Generate(2, 4) -> B, C, D

最大 16,384 列の範囲を生成する必要があるため、速度は重要です。

4

1 に答える 1

0

Excel の列名を生成するための基本的なアルゴリズムは、ここでグラハムによって素晴らしく説明されています: https://stackoverflow.com/a/182924/1644733

これを C# Generate() 関数のフレームワークに入れると、次のことができます。

    static List<string> Generate(int start, int end) {
        List<string> listOfColumns = new List<string>();
        for (int i = start; i<=end; i++) {
            listOfColumns.Add(NumberToColumn(i));
        }
        return listOfColumns;
    }

    static string NumberToColumn(int col) {

        string retval = "";

        // cannot be greater than 16384
        if (col > 16384)
            return "invalid";

        int dividend = col;
        while (dividend > 0)
        {
            int leftover = (dividend - 1) % 26;
            char extraletter = (char) (65 + leftover);
            retval = extraletter + retval;
            dividend = (int)((dividend - leftover) / 26);
        } 
        return retval;
    }

速度に関して: この種の範囲を頻繁に生成する場合は、コードの最初で 1 ~ 16384 の範囲全体でこれを 1 回実行してから、必要に応じて、結果のリストの値を直接。

于 2012-10-22T18:20:08.573 に答える