• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >vc/mfc > 急!满分求助:如何用VC来访问Excel的单元格内容,并成功转成CString类型

急!满分求助:如何用VC来访问Excel的单元格内容,并成功转成CString类型

作者:佚名 字体:[增加 减小] 来源:互联网 时间:2017-06-04

佚名通过本文主要向大家介绍了急!满分求助:如何用VC来访问Excel的单元格内容,并成功转成CString类型等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: 急!满分求助:如何用VC来访问Excel的单元格内容,并成功转成CString类型
描述:

如题! 谢谢! 答对,定给满分!


解决方案1:

以上是我转贴的,没有保留出处,所以希望作者不要介意。
我自己以前给一家服装公司写过类似的代码,代码太长,贴出一部分来谨供参考。
         ......
_Application  ExcelApp; 
Workbooks  wbsMyBooks; 
_Workbook  wbMyBook; 
Worksheets  wssMysheets; 
_Worksheet  wsMysheet; 
Range  rgMyRge;
CString  sheetName;
if (ExcelApp.m_lpDispatch == NULL) // If you have not created Excel, create a new instance.
{
if (!ExcelApp.CreateDispatch("Excel.Application",NULL)) 
{ 
AfxMessageBox("创建Excel服务失败!"); 
exit(1); 
}
wbsMyBooks.AttachDispatch(ExcelApp.get_Workbooks(),true); 
}
//查找文件夹内所有文档 
CString strfile(_T(""));
if(strpath.Right(1)=='\\') //去掉末尾的'\'
strpath.TrimRight('\\');
if(vecFileName.empty())
FindFile((LPCTSTR)strpath);
BOOL bFound=FALSE;
CString strord=_T("原始订单");
CString strtot=_T("订单总数");
CString strtotal=_T("合计");
vector<CString> vtemp;
vector<vector<CString> > pvv; //大数组,保存结果
//内容格式:1款号   2原始订单(合计)  3订单总数(合计)
for(vector<CString>::iterator iter=vecFileName.begin();iter!=vecFileName.end();++iter)
{
COleVariant  ov(*iter);
wbMyBook.AttachDispatch(wbsMyBooks.Add(VARIANT(ov)));
//得到Worksheets 
wssMysheets.AttachDispatch(wbMyBook.get_Worksheets(),true); 
for(short i=1;i<=wssMysheets.get_Count();i++)
{
//得到sheet[i] 
wsMysheet.AttachDispatch(wssMysheets.get_Item(COleVariant((short)i)),true); 
//得到WorkSheet名称,即为款号
sheetName=wsMysheet.get_Name();
//判断所选条件,进行过滤
if( (strcb1==_T("裤子") && sheetName[0]!='0') ||
(strcb1==_T("衣服") && sheetName[0]=='0') )
continue;
if( (strcb2==_T("梭织") && sheetName[0]!='1') ||
(strcb2==_T("毛织") && sheetName[0]!='2') ||
(strcb2==_T("针织") && sheetName[0]!='3') )
continue;
if( (strcb3==_T("男款") && sheetName[2]<'6') ||
(strcb3==_T("女款") && sheetName[2]>='6') )
continue;
//通过的就是符合条件的了
VARIANT     ret;
VARIANT val;
long lNumRows;
long lNumCols;
long index[2];
long lcol=0; //合计列
long lrow=0;     //订单总数行
//去掉自动筛选
wsMysheet.put_AutoFilterMode(false);
//得到前7行区域
rgMyRge.AttachDispatch(wsMysheet.get_Range(COleVariant("A1"), COleVariant("IV7")));
ret = rgMyRge.get_Value();
if(ret.vt==VT_EMPTY)
continue;
COleSafeArray sa(ret);
//Determine the array's dimensions.
sa.GetUBound(1, &lNumRows);
sa.GetUBound(2, &lNumCols);
for(long i=1;i<lNumRows;i++)
{
for(long j=1;j<lNumCols;j++)
{
index[0]=i;
index[1]=j;
sa.GetElement(index,&val);
if(val.vt==VT_BSTR)
{
if(val.bstrVal==strtot)//订单总数行
lrow=i;
if(val.bstrVal==strtotal)//合计列
lcol=j;
}
}
}
if(lcol>0) //找到合计列
{
vtemp.clear();
if(lrow==0) //没找到订单总数行
lrow=5;
//判断是否同一款号!
if(!pvv.empty())
{
vector<vector<CString> >::iterator vvit;
for(vvit=pvv.begin();vvit!=pvv.end();++vvit)
{
if((*vvit).at(0) == sheetName)
break;
}
if(vvit!=pvv.end()) //已有相同款号
{
double dtemp1=0;
double dtemp2=0;
CString strtemp;
//保存原始订单
index[0]=lrow-1;
index[1]=lcol;
sa.GetElement(index,&val);
if(val.vt!=VT_EMPTY)
{
dtemp1=VariantToDouble(val);
dtemp2=atof((LPCTSTR)(*vvit).at(1));
dtemp1+=dtemp2;
strtemp.Format("%f",dtemp1);
//修改原数据(pvv[][1])
(*vvit).at(1)=strtemp;
}
//保存订单总数
index[0]=lrow;
index[1]=lcol;
sa.GetElement(index,&val);
if(val.vt!=VT_EMPTY)
{
dtemp1=VariantToDouble(val);
dtemp2=atof((LPCTSTR)(*vvit).at(2));
dtemp1+=dtemp2;
strtemp.Format("%f",dtemp1);
//修改原数据(pvv[][2])
(*vvit).at(2)=strtemp;
}
continue;
}//end of if(vvit!=pvv.end()) //已有相同款号
}//end of if(pvv.empty()==false)
//前面无相同款号
vtemp.push_back(sheetName); //保存款号
index[0]=lrow-1;
index[1]=lcol;
sa.GetElement(index,&val);
vtemp.push_back(VariantToCString(val)); //保存原始订单
index[0]=lrow;
index[1]=lcol;
sa.GetElement(index,&val);
vtemp.push_back(VariantToCString(val)); //保存订单总数
pvv.push_back(vtemp);
}//end of if(lcol>0) //找到合计列
}//END OF for(short i=1;i<=wssMysheets.get_Count();i++)
}//END OF for(vector<CString>::iterator iter=vecFileName.begin();iter!=vecFileName.end();++iter)
//先排序
long size=(long)pvv.size();
if(pvv.empty())
AfxMessageBox(_T("无此类型服装!"));
else
{
long* pd=new long[size];
long* psort=new long[size];
long max;
for(long tl=0;tl<size;tl++)
{
pd[tl]=_ttol((LPCTSTR)pvv[tl][2]);
}
for(long i=0;i<size;i++)
{
max=0;
for(long j=1;j<size;j++)
if(pd[j]>pd[max])
max=j;
psort[i]=max;//只保存位置号,未保存其值
pd[max]=-99999;
}
long nitem;
long dt;
for(long dv=0;dv<size;dv++)
{
//第一列
dt=psort[dv];
CString strspace=_T("                    ");
strspace +=pvv[dt][0];
nitem = mlist.InsertItem(0xffff,strspace);
//第二列
pvv[dt][1].TrimRight('0');
pvv[dt][1].TrimRight('.');
mlist.SetItem(nitem,1,1,pvv[dt][1],NULL,0,0,0,0);
//第三列
pvv[dt][2].TrimRight('0');
pvv[dt][2].TrimRight('.');
mlist.SetItem(nitem,2,1,pvv[dt][2],NULL,0,0,0,0);
}
delete pd;
delete psort;
}
//关闭Excel
wbMyBook.Close(COleVariant((short)FALSE),VOptional,VOptional);
//wbsMyBooks.Close();
ExcelApp.Quit();<

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 急!满分求助:如何用VC来访问Excel的单元格内容,并成功转成CString类型

相关文章

  • 2017-06-04 我的ActiveX控件
  • 2017-06-04 VS2005下创建一个ATL,并且使其fire一个事件。。。。
  • 2017-06-05 在ATL工程的idl文件,里面声明为object的组件就一定是coclass么,而不是rpc或者是别的?
  • 2017-06-04 花了大量时间学mfc,到了公司却用vb,真可惜了。现准备学com,不知是学atl还是学vb的com好
  • 2017-06-04 我正在看Com的编程,有事请教。
  • 2017-06-05 求教关于宏定义结构的基本问题
  • 2017-06-04 快来抢分啊,很简单的问题用ATL作activeX
  • 2017-06-04 为何如此?(问,一次问不完)
  • 2017-06-04 DirectoryObjectPicker的问题
  • 2017-06-05 为什么代码不往下走了?

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 如何获得当前窗口的工作区,并且向该窗口发送文字?
    • 请问,如何获取一个程序的进程,并关闭它
    • 如何直接读取光轨?
    • 怎么用VC获取%userprofile%
    • mfc如何让textbox只读不写
    • 如何做到象QQ之类的程序,最小化时只显示在托盘里?
    • 关于OCX控件的问题
    • 如何将DLL直接编译到应用程序中------在线等待,即刻给分
    • 急!请教一个DLL中使用对话框的问题
    • 关于GUID的定义

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有