using System; namespace WindowsFormsApp1 { public class SpreadsheetCoord { public static string ConvertToColumnCode(int columnNo, int rowNo) { if ((columnNo <= 0) || (rowNo <= 0)) return null; string rs = string.Empty; int x = 790; while (x > 0) { int n = (x % 26); rs = Convert.ToChar(65 + n - 1) + rs; x -= n; x = (x / 26); } return string.Concat(rs, rowNo.ToString()); } public static Tuple ConvertToCoord(string value) { bool checkAlpha = true; string alpha = string.Empty; string digit = string.Empty; for (int i = 0; i < value.Length; i++) { if (checkAlpha) { if (isAlpha(value[i])) { alpha += value[i]; } else if (isDigit(value[i])) { digit += value[i]; checkAlpha = false; } else { return null; } } else { if (isAlpha(value[i])) { return null; } else if (isDigit(value[i])) { digit += value[i]; } else { return null; } } } // no alpha or digits if ((alpha.Length <= 0) || (digit.Length <= 0)) { return null; } int rowNo; if (!int.TryParse(digit, out rowNo)) { return null; } if (rowNo <= 0) { return null; } int columnNo = convertColumn(alpha); return new Tuple(columnNo, rowNo); } public static bool IsValid(string value) { bool checkAlpha = true; string alpha = string.Empty; string digit = string.Empty; for (int i = 0; i < value.Length; i++) { if (checkAlpha) { if (isAlpha(value[i])) { alpha += value[i]; } else if (isDigit(value[i])) { digit += value[i]; checkAlpha = false; } else { return false; } } else { if (isAlpha(value[i])) { return false; } else if (isDigit(value[i])) { digit += value[i]; } else { return false; } } } // no alpha or digits if ((alpha.Length <= 0) || (digit.Length <= 0)) { return false; } int n; if (!int.TryParse(digit, out n)) { return false; } if (n <= 0) { return false; } return true; } protected static int convertColumn(string value) { int rv = 0; int len = value.Length - 1; for (int i = len; i >= 0; i--) { int n = (len - i); int x = convertColumn(value[i]); rv += (int)(x * Math.Pow(26, n)); } return rv; } protected static int convertColumn(char value) { if (isAlpha(value)) { int code = Convert.ToInt16(char.ToUpper(value)); return (code - 65) + 1; } else { return 0; } } protected static bool isAlpha(char value) { int code = Convert.ToInt16(char.ToUpper(value)); return ((code >= 65) && (code <= 90)); } protected static bool isDigit(char value) { int code = Convert.ToInt16(char.ToUpper(value)); return ((code >= 48) && (code <= 57)); } } }