热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【MFC/C++操作Excel】C++下TextToColumns函数的参数

版权声明:本文为博主原创文章,未经博主允许不得转载。https:blog.csdn.netxxxxxx91116articledetails8

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xxxxxx91116/article/details/8531996




我们在使用excel的分列将数字转为文本时,用宏记录的vb代码如下:

  1. Range("A5:A64").Select
  2. Selection.TextToColumns Destination:=Range("A5"), DataType:=xlDelimited, _
  3. TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
  4. Semicolon:=False, Comma:=False, Space:=False, Other:=False, FieldInfo _
  5. :=Array(1, 2), TrailingMinusNumbers:=True


如果我们想将其转为VC代码,过程如下:

第一句:

Range("A5:A64").Select

这一句表示选中A5:A64,翻译为C++,就是

m_ecRange.Select();

其中m_ecRange是Range的对象。

 

第二句:

  1. Selection.TextToColumns Destination:=Range("A5"), DataType:=xlDelimited, _ TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _ Semicolon:=False, Comma:=False, Space:=False, Other:=False, FieldInfo _ :=Array(1, 2), TrailingMinusNumbers:=True

 

其对应的是Range类的TextToColumns函数,其C++函数原型是

  1. VARIANT TextToColumns(const VARIANT& Destination, long DataType, long TextQualifier, const VARIANT& ConsecutiveDelimiter, const VARIANT& Tab, const VARIANT& Semicolon, const VARIANT& Comma, const VARIANT& Space, const VARIANT& Other,
  2. const VARIANT& OtherChar, const VARIANT& FieldInfo, const VARIANT& DecimalSeparator, const VARIANT& ThousandsSeparator, const VARIANT& TrailingMinusNumbers);


各个参数的意思可以参见:

http://bbs.csdn.net/topics/390285992

这里的参数只有第1个const VARIANT& Destination和第11个const VARIANT& FieldInfo比较难确定,其他参数都可以通过在宏中用MsgBox得到,下面说明这两个参数:

第1个参数(const VARIANT& Destination):

MSDN解释:指定 Microsoft Excel 放置结果的位置的 Range 对象。如果该区域大于一个单元格,请使用左上角的单元格。

所以这里我们设置为A5单元格,我们可以使用:

  1. CString beginS = “A5”;//将beginS设置为这一列左上角的单元格
  2. Range m_tempRange = m_ecSheet.GetRange(COleVariant(beginS), COleVariant(beginS));//得到该单元格的range
  3. m_tempRange.GetItem(COleVariant((short)1),COleVariant((short)1));//返回的值就是要传入的值,也就是左上角单元格,这里一定是1,1,因为range只有一个单元格


 

第11个参数(const VARIANT& FieldInfo)

MSDN解释:包含单列数据拆分信息的数组。对本参数的解释取决于 DataType 的值。如果此数据由分隔符分隔,则本参数为由两元素数组组成的数组,其中每个两元素数组指定一个特定列的转换选项。第一个元素为列标(从 1 开始),第二个元素是 xlColumnDataType 常量之一,用以指定该列的拆分方式。
我们可以看到VB代码是Array(1, 2),是一个一维数组,数组有2个元素,数组的第一个元素是1,第二个元素是2;在MFC中,我们要使用
COleSafeArray来代表数组,初始化这样一个数组如下:

  1. COleSafeArray saRet;
  2. DWORD numElements = {2};//数组中有2个元素
  3. saRet.Create(VT_I4, 1, &numElements);//第一个参数表示存入int,第二个参数表示是一维数组,第三个参数表示数组中有2个元素
  4. long index = 0;//数组下标
  5. int val = 1;//值
  6. saRet.PutElement(&index, &val);//将0下标的值设置为1

  1. index++;
  2. val = 2;
  3. saRet.PutElement(&index, &val);//将1下标的值设置为2

 


整个函数如下:

  1. BOOL CExcelOperate::SetRowToTextFormat(CString &beginS, CString &endS)
  2. {
  3. if(GetRangeAndValue(beginS, endS))
  4. {
  5. m_ecRange.Select();
  6. Range m_tempRange = m_ecSheet.GetRange(COleVariant(beginS), COleVariant(beginS));
  7. if(!m_tempRange.m_lpDispatch) return FALSE;
  8. COleVariant vTrue((short)TRUE),
  9. vFalse((short)FALSE);
  10. //int tempArray[2] = {1, 2};
  11. COleSafeArray saRet;
  12. DWORD numElements = {2};
  13. saRet.Create(VT_I4, 1, &numElements);
  14. long index = 0;
  15. int val = 1;
  16. saRet.PutElement(&index, &val);
  17. index++;
  18. val = 2;
  19. saRet.PutElement(&index, &val);
  20. //m_tempRange.GetItem(COleVariant((short)5),COleVariant("A"));
  21. m_ecRange.TextToColumns(m_tempRange.GetItem(COleVariant((short)1),COleVariant((short)1)), 1, 1, vFalse, vTrue, vFalse, vFalse, vFalse, vFalse, vFalse, saRet, vFalse, vFalse, vTrue);
  22. m_tempRange.ReleaseDispatch();
  23. return TRUE;
  24. }
  25. return FALSE;
  26. }


 

  1. BOOL CExcelOperate::GetRangeAndValue(CString begin, CString end)
  2. {
  3. if(!m_ecSheet.m_lpDispatch)
  4. {
  5. AfxMessageBox("Sheet获取失败!", MB_OK|MB_ICONWARNING);
  6. return FALSE;
  7. }
  8. m_ecRange = m_ecSheet.GetRange(COleVariant(begin), COleVariant(end));
  9. if(!m_ecRange.m_lpDispatch)
  10. {
  11. AfxMessageBox("Range获取失败!", MB_OK|MB_ICONWARNING);
  12. return FALSE;
  13. }
  14. ret = m_ecRange.GetValue2();//得到表格中的值
  15. return TRUE;
  16. }



推荐阅读
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 如何自行分析定位SAP BSP错误
    The“BSPtag”Imentionedintheblogtitlemeansforexamplethetagchtmlb:configCelleratorbelowwhichi ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • GetWindowLong函数
    今天在看一个代码里头写了GetWindowLong(hwnd,0),我当时就有点费解,靠,上网搜索函数原型说明,死活找不到第 ... [详细]
  • Nginx使用(server参数配置)
    本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
  • 本文介绍了设计师伊振华受邀参与沈阳市智慧城市运行管理中心项目的整体设计,并以数字赋能和创新驱动高质量发展的理念,建设了集成、智慧、高效的一体化城市综合管理平台,促进了城市的数字化转型。该中心被称为当代城市的智能心脏,为沈阳市的智慧城市建设做出了重要贡献。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • 本文介绍了一种划分和计数油田地块的方法。根据给定的条件,通过遍历和DFS算法,将符合条件的地块标记为不符合条件的地块,并进行计数。同时,还介绍了如何判断点是否在给定范围内的方法。 ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
author-avatar
奉召开博_745
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有