字母和数字的转换——Excel列名

摘要:
在用代码操作Excel的过程中,您需要将列名称转换为数字,然后计算并确认列。根据此规则,每次除以26,您都可以获得每个位的值,然后进行转换。但有一个小问题。如果该位是字符“Z”,则将携带该位。转换后,可以处理进位值。

    在用代码操作Excel的过程中(如OpenXml),会用到把列名转化为数字,然后再进行计算确认列处理。

   把列名转化为数字很容易实现定位。下面分享的这两个方法的主要作用是:

    (1)把字母转为数字, 如1转为A,AA转为27 ,然后进行处理;

    (2)把数字转为字母,A->1,27->AA……(这个比较常用)。

1、字母转数字

    思想: 从字符串的最后一位到第一位,乘以26的幂,依次相加

  算法: 26^0 * (最后一位 ) + 26 ^ 1 * (前一位 ) + …… + 26 ^ n * (第一位)。

 1         private int MoreCharToInt(string value)
2 {
3 int rtn = 0;
4 int powIndex = 0;
5
6 for (int i = value.Length - 1; i >= 0; i--)
7 {
8 int tmpInt = value[i];
9 tmpInt -= 64;
10
11 rtn += (int)Math.Pow(26, powIndex) * tmpInt;
12 powIndex++;
13 }
14
15 return rtn;
16 }

2、数字转为字母

    思想: 字母对应的数字的算法为:26^0 * A + 26 ^ 1 * A ……,

      按照这个规律 每次除以26,就可以得到每一位的值,然后进行转换。

      但是有个小问题,就是如果这一位是字符 ‘Z’ 的话,就会进位,转换完后,处理进位的值即可(这里是关键哦)。

 1         private string IntToMoreChar(int value)
2 {
3 string rtn = string.Empty;
4 List<int> iList = new List<int>();
5
6 //To single Int
7 while (value / 26 != 0 || value % 26 != 0)
8 {
9 iList.Add(value % 26);
10 value /= 26;
11 }
12
13 //Change 0 To 26
14 for (int j = 0; j < iList.Count - 1; j++)
15 {
16 if (iList[j] == 0)
17 {
18 iList[j + 1] -= 1;
19 iList[j] = 26;
20 }
21 }
22
23 //Remove 0 at last
24 if (iList[iList.Count - 1] == 0)
25 {
26 iList.Remove(iList[iList.Count - 1]);
27 }
28
29 //To String
30 for (int j = iList.Count - 1; j >= 0; j--)
31 {
32 char c = (char)(iList[j] + 64);
33 rtn += c.ToString();
34 }
35
36 return rtn;
37 }

   

  小弟不才, 花了一段时间才想出来的,希望对大家能有所帮助吧!

  以后对于 功能、方法的算法,我会尽量分享出来,供大家讨论,以获取更好的思路。

免责声明:文章转载自《字母和数字的转换——Excel列名》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇LabVIEW介绍ubuntu 查看文件编码并进行批量编码修改下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

irport报表,把数字金额转换成大写人民币金额

1、编写oracle函数 CREATE OR REPLACE Function MoneyToChinese(Money In Number) Return Varchar2 Is strYuan Varchar2(150); strYuanFen Varchar2(152); numLenYuan Number;...

利用栈实现四则运算表达式求值----先将中缀表达式转换成后缀表达式,然后再求后缀表达式的值

利用栈实现四则运算表达式求值,附Python代码中缀表达式和后缀表达式 平时用到的标准的四则运算表达式就叫做中缀表达式,例如“9 +(3 - 1) * 3 + 10 / 2)”,特点是运算符在数字中间; 后缀表达式就是一种把运算符放在数字后面的形式,“9 3 1 - 3 * + 10 2 / +”即为上例中缀表达式对应的后缀表达式形式,后缀表达式还有一个特...

关于Intege.valueOf()的使用

原文链接:https://blog.csdn.net/weixin_37650458/article/details/85212730 1.Integer. valueOf()方法的作用     Integer. valueOf()可以将基本类型int转换为包装类型Integer,或者将String转换成Integer,String如果为Null或“”都会...

关于VB日期与数字的转换(一)

VB中可将日期作为实数的一部分来存储。小数点左边的数值表示日期:小数点右边的数值表示时间。负的数值表示在1899 年 12 月 30 日 之前。所以每一天可以用一个整数来表示(以1899-12-30 为0,该日之后为正数,之前为负数) ,对于MSVB 的合法日期,即#100-1-1# 到#9999-12-31#,就有-657434~2958465来表示。...

【转】二维码生成原理

原文链接:QR码生成原理-QR Code(ISO 18004)编码方式 一、什么是QR码 QR码属于矩阵式二维码中的一个种类,由DENSO(日本电装)公司开发,由JIS和ISO将其标准化。QR码的样子其实在很多场合已经能够被看到了,我这还是贴个图展示一下: 这个图如果被正确解码,应该看到我的名字和邮箱。 二、QR码的特点 说到QR码的特点: 一是高速读取...

Unity中传入任意数,转换成分,秒,并进行倒计时换算..(两种方式)

第一种方式是利用Unity中的协程,代码如下: using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class DemoTest : MonoBehaviour { public Te...