EXCEL列序号的加法
来源:互联网 发布:日本体育课运动服 淘宝 编辑:程序博客网 时间:2024/06/06 03:15
朋友有一个简单的需求,就是对EXCEL上的表头进行加法,以定位到具体位置,
具体如下:
A+1=B,Z+A=AA,AZZ+1=BAA
由与是A~Z,考虑使用26进制,唯一不能使用的是0 因为excel上列的范围是 A~XFD
闲来无事,就写了一下,顺便没有考虑最大为XFD的范围,代码实现如下
// 进制转换 A~Z字符转换为10进制
long Convert(CString &str)
{
long lLength = str.GetLength();
long lData(0),lTotal(0);
for(long i=0;i<lLength;++i)
{
lData = str[i] - _T('A')+1; //最小值不能为0,因此设置为1
lTotal = lTotal *26+lData;
}
return lTotal;
}
//10进制转换为 A~Z字符
void Convert(CString& strDest,long lNum)
{
strDest.Empty();
long lM(0);
if(lNum==0)
strDest = _T('A');
else if(lNum<0)
return ;
TCHAR chData;
while(lNum!=0)
{
lM = lNum%26;
lNum = lNum/26;
if(lM==0) //由于'Z'就是第26,这里采取直接赋值,并且不能进位。
{
chData = _T('Z');
lNum -= 1;
}
else
chData = _T('A') + lM-1; //之前最小值设置为1了,这里要减去1
strDest.Insert(0,chData);
}
}
void GetAddString(CString& strDest,CString &strSrc,long lNum)
{
long lTotal = Convert(str);
lTotal += lNum;
Convert(strDest,lTotal);
}
测试用例里面可以直接使用 GetAddString
int main()
{
CString str1(_T("AZZ"));
CString str2(_T("AA"));
CString strDest;
GetAddString(strDest,str1,1); //AZZ+1 结果为BAA
GetAddString(strDest,str1,Convert(str2)); //AZZ+AA 结果为BBA
return 0;
}
- EXCEL列序号的加法
- excel根据列序号计算出对应的列字母
- Excel 列索引 转 列英文序号
- Excel列序号生成字母表示
- excel将列序号改为数字
- TDD编程实践---生成EXCEL列序号集合
- Dbgrid 中表字段所在的列序号
- jsf的dataTable实现序号列
- Flex实现DataGrid的序号列
- DataGrid的序号列(自增长)
- jsf的dataTable实现序号列
- 实现DataGrid序号列的添加
- Flex实现DataGrid的序号列
- repeater添加序号列的方法
- JQuery DataTable 序号列的显示
- Excel sheet的列名到列序号的转换
- 由逆序列的序号反推出逆序列
- MySQL用变量的方法添加伪序号列,MySql自增序列,序号列
- hdu 3626 For(模拟)
- 都是头文件的循环包含惹的祸
- win7 64位 PLSql Developer 的使用
- 使用SQL Server发布数据库快照遇到错误:对路径”xxxxx“访问被拒绝的解决方法
- Android 根据一个传入的String选择spinner里面的默认值
- EXCEL列序号的加法
- Spring framework3.1整合hibernate4.1报错:
- java之六篇:放松一下聊聊构造方法(构造函数)
- memcache的针对不同类型数据应用缓存策略
- WeakReference的理解与使用
- 扫描Win7、Win8系列的终端音频设备信息以及外接设备如耳机连接情况
- hibernate 删除方式
- 软件测试基础知识点总结(一)
- lintcode- 寻找旋转排序数组中的最小值-159