Добавьте файлы проекта.
This commit is contained in:
48
QWERTYkez.ExcelProcessor/Editors/CellAddressHelper.cs
Normal file
48
QWERTYkez.ExcelProcessor/Editors/CellAddressHelper.cs
Normal file
@@ -0,0 +1,48 @@
|
||||
namespace QWERTYkez.ExcelProcessor.Editors;
|
||||
|
||||
internal static class CellAddressHelper
|
||||
{
|
||||
private const string letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
|
||||
private static readonly uint[] _powers = [1, 26, 676];
|
||||
|
||||
public static uint ColumnLetterToIndex(string col)
|
||||
{
|
||||
uint index = 0;
|
||||
foreach (char ch in col)
|
||||
{
|
||||
char c = char.ToUpperInvariant(ch);
|
||||
if (c < 'A' || c > 'Z') return 0;
|
||||
index = index * 26 + (uint)(c - 'A' + 1);
|
||||
}
|
||||
return index;
|
||||
}
|
||||
|
||||
public static string ColumnIndexToLetter(uint col)
|
||||
{
|
||||
if (col == 0) return "";
|
||||
uint n = col;
|
||||
char[] buf = new char[3];
|
||||
int idx = 0;
|
||||
while (n > 0)
|
||||
{
|
||||
n--;
|
||||
buf[idx++] = (char)('A' + (n % 26));
|
||||
n /= 26;
|
||||
}
|
||||
return new string(buf, 0, idx);
|
||||
}
|
||||
|
||||
public static bool TryParseCellReference(string reference, out uint row, out uint col)
|
||||
{
|
||||
row = 0; col = 0;
|
||||
if (string.IsNullOrEmpty(reference)) return false;
|
||||
int i = 0;
|
||||
while (i < reference.Length && char.IsLetter(reference[i])) i++;
|
||||
if (i == 0) return false;
|
||||
string colPart = reference.Substring(0, i);
|
||||
string rowPart = reference.Substring(i);
|
||||
if (!uint.TryParse(rowPart, out row)) return false;
|
||||
col = CellAddressHelper.ColumnLetterToIndex(colPart);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user