【MFC/C++ 操作Excel】C++下TextToColumns函数的参数
来源:互联网 发布:淘宝联盟看不到高佣金 编辑:程序博客网 时间:2024/06/05 16:47
我们在使用excel的分列将数字转为文本时,用宏记录的vb代码如下:
Range("A5:A64").Select 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
如果我们想将其转为VC代码,过程如下:
第一句:
Range("A5:A64").Select
这一句表示选中A5:A64,翻译为C++,就是
m_ecRange.Select();
其中m_ecRange是Range的对象。
第二句:
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++函数原型是
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, 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单元格,我们可以使用:
CString beginS = “A5”;//将beginS设置为这一列左上角的单元格Range m_tempRange = m_ecSheet.GetRange(COleVariant(beginS), COleVariant(beginS));//得到该单元格的rangem_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来代表数组,初始化这样一个数组如下:
COleSafeArray saRet;DWORD numElements = {2};//数组中有2个元素saRet.Create(VT_I4, 1, &numElements);//第一个参数表示存入int,第二个参数表示是一维数组,第三个参数表示数组中有2个元素long index = 0;//数组下标int val = 1;//值saRet.PutElement(&index, &val);//将0下标的值设置为1
index++;val = 2;saRet.PutElement(&index, &val);//将1下标的值设置为2
整个函数如下:
BOOL CExcelOperate::SetRowToTextFormat(CString &beginS, CString &endS){if(GetRangeAndValue(beginS, endS)){m_ecRange.Select();Range m_tempRange = m_ecSheet.GetRange(COleVariant(beginS), COleVariant(beginS));if(!m_tempRange.m_lpDispatch) return FALSE;COleVariant vTrue((short)TRUE), vFalse((short)FALSE);//int tempArray[2] = {1, 2};COleSafeArray saRet;DWORD numElements = {2};saRet.Create(VT_I4, 1, &numElements);long index = 0;int val = 1;saRet.PutElement(&index, &val);index++;val = 2;saRet.PutElement(&index, &val);//m_tempRange.GetItem(COleVariant((short)5),COleVariant("A"));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);m_tempRange.ReleaseDispatch();return TRUE;}return FALSE;}
BOOL CExcelOperate::GetRangeAndValue(CString begin, CString end){if(!m_ecSheet.m_lpDispatch){AfxMessageBox("Sheet获取失败!", MB_OK|MB_ICONWARNING);return FALSE;}m_ecRange = m_ecSheet.GetRange(COleVariant(begin), COleVariant(end));if(!m_ecRange.m_lpDispatch){AfxMessageBox("Range获取失败!", MB_OK|MB_ICONWARNING);return FALSE;}ret = m_ecRange.GetValue2();//得到表格中的值return TRUE;}
- 【MFC/C++ 操作Excel】C++下TextToColumns函数的参数
- c#.net 下的excel操作(一)
- c#.net 下的excel操作(二)
- [C#]对Excel的操作
- C语言下的函数可变参数的使用
- C/C++下不定参数的函数的实现
- linux下的C语言带参数的main函数
- linux下c编程main函数的参数问题
- C 语言下的 可变参数列表函数实现
- linux下c编程main函数的参数问题
- linux下c编程main函数的参数问题
- c/c++/mfc/Linux c 关于文件的操作
- [C]main 函数的参数
- c函数的参数传递
- 可变参数的C函数
- c 不定参数的函数
- C函数的参数传递
- C函数的可变参数
- 游戏场景管理
- android boot.img 拆包,修改adb 具有root权限,以i9250为例
- MySQL中涉及的几个字符集
- SSH Java三大框架整合(Struts 2+Hibernate+Spring+mysql)
- Curl使用问题
- 【MFC/C++ 操作Excel】C++下TextToColumns函数的参数
- Cocos2dx 下对sqlite3 的简单封装
- 视频处理的一些经验
- flex中的DataGrid组件
- 【MFC/C++ 操作Excel】将数字格式单元格转为文本格式
- 毕业设计(十四)--- 后台用户管理(4)之- 动态删除用户
- 关于Plist文件的读写
- Handler 简单使用
- loadrunner试用