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

来源:互联网 发布:九曲网络 编辑:程序博客网 时间:2024/05/16 17:40

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

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

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

正文

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

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

 

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

Range("A5:J64").SelectSelection.NumberFormatLocal = "@"


 

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

//beginSendS之间的单元格转为文本格式存储

 

BOOL SetTextFormat(CString beginS, CString endS){       //注意,这里的m_ecSheet是_Worksheet的对象,你之前要先得到worksheetRange 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;}

原创粉丝点击