C# 如何将 Excel 单元格地址转换为以下表示法:“LetterNumber”到“Number,Number”,反之亦然?

问题描述 投票:0回答:3

如何将 Excel 单元格地址转换为以下表示法:“LetterNumber”到“Number, Number”,反之亦然?

c# excel data-conversion
3个回答
3
投票

好吧,即使问题不清楚,这里有一个答案:

如何将 Excel 单元格地址转换为以下表示法:“LetterNumber”到“Number, Number”,反之亦然?

private const string ALPHABET = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";

public static string ToExcelCoordinates(string coordinates)
{
    string first = coordinates.Substring(0, coordinates.IndexOf(','));
    int i = int.Parse(first);
    string second = coordinates.Substring(first.Length + 1);

    string str = string.Empty;
    while (i > 0)
    {
        str = ALPHABET[(i - 1) % 26] + str;
        i /= 26;
    }

    return str + second;
}

public static string ToNumericCoordinates(string coordinates)
{
    string first = string.Empty;
    string second = string.Empty;

    CharEnumerator ce = coordinates.GetEnumerator();
    while (ce.MoveNext())
        if (char.IsLetter(ce.Current))
            first += ce.Current;
        else
            second += ce.Current;

    int i = 0;
    ce = first.GetEnumerator();
    while (ce.MoveNext())
        i = (26 * i) + ALPHABET.IndexOf(ce.Current) + 1;

    string str = i.ToString();
    return str + "," + second;
}

结果是:

“1,1”->“A1”
“A1”->“1,1”
“42,231”->“AP231”
“AP231” -> “42,231”


2
投票

我正在尝试设置 Worksheet.Cells[] 的值,但它不排除“B3”类型的值

Worksheet.Range
确实:

Worksheet.Range("A4").Value = "Foo";

如果可以的话,我还建议您不要一次设置一个单元格。每次在缓慢的互操作调用中调用

Cells
Range
,因此如果将值放入数组中并一次性设置整个范围的值,您将获得更好的性能:

int[,] values;
// fill values with integers
Worksheet.Range("A1","D4") = values;

0
投票

Maxime 的 ToExcelCooperatives 算法不正确。 Excel 第 52 列执行“BZ”,但它必须是“AZ”。 该问题涉及所有 26 倍数的列号。

© www.soinside.com 2019 - 2024. All rights reserved.