【MFC/C++ 操作Excel】将数字格式单元格转为文本格式

您所在的位置:网站首页 excel格式转换为文本 【MFC/C++ 操作Excel】将数字格式单元格转为文本格式

【MFC/C++ 操作Excel】将数字格式单元格转为文本格式

2023-07-22 14:58| 来源: 网络整理| 查看: 265

       首先,请您先阅读 MFC操作office通用分析方法一篇,或者你需要了解本文的分析方法是按如下进行的:

1.       将我们的处理过程用宏记录下来

2.       将这一过程从VB翻译为VC

正文

当我们在用MFC操作excel时,为了操作的方便性,常常需要将数据转为文本格式来保存,这一过程怎样用C++来实现呢?

第一步:我们可以使用以下方法将文本转为文本格式:选中要转为文本格式的单元格,右键-》设置单元格格式-》文本-》确定。

 

第二步:上面这一过程用宏记录下来是这样的,下面选择的是从A5到J64之间的单元格:

Range("A5:J64").Select Selection.NumberFormatLocal = "@"

 

第三步:将上述VB转为VC实现:

//将beginS到endS之间的单元格转为文本格式存储

 

BOOL SetTextFormat(CString beginS, CString endS) { //注意,这里的m_ecSheet是_Worksheet的对象,你之前要先得到worksheet Range m_ecRange = m_ecSheet.GetRange(COleVariant(beginS), COleVariant(endS)); if(m_ecRange.m_lpDispatch) { //选择beginS, endS m_ecRange.Select(); //设置为文本格式 m_ecRange.SetNumberFormatLocal(COleVariant("@")); return TRUE; } return FALSE; }

调用方法:SetTextFormat(“A5”, “J64”)

       

       但是用上面的方法设置之后,原来是数字格式的单元格仍然不是文本格式,如果直接用VC操作会出错,这里有一种区分数字是否真正转为文本格式的方法:

下图左是按照上述方法设置后的结果,此时,数字仍然不是真正的文本,下图右则是真正的文本,它的特点是每个数字格左上角都有一个绿色的小三角。

那么如果将数字设置为真正的文本呢?我们按如下步骤进行。

第一步:手动设置方法

选中一列,按数据-》分列

直接按下一步

直接按下一步

这里要选择文本,红笔标出,然后按完成,此时,数字就变成真正的文本了。

第二步:上述过程用宏记录下来是这样的:

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来实现

 

_Worksheet m_ecSheet;//首先你要自己初始化哦!!!! Range m_ecRange; 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; } 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; }


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3