如何excel读取文件名称一个数字,并打开与其对应名称的xls文件

《读取xls文件示例》
读取xls文件示例 :
//变量定义
//Excel应用程序接口
//工作薄集合
//工作表集合
//Excel中针对单元格的操作都应先获取其对应的Range对象
LPDISPATCH lpD
COleVariant vR
COleVariant
covTrue((short)TRUE),
covFalse((short)FALSE),
covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
if( !app.CreateDispatch(L"Excel.Application") ){
this-&MessageBox(L"无法创建Excel应用!");
app.SetVisible(TRUE);
app.SetUserControl(TRUE); //用户可控制
//打开XLS文件
books.AttachDispatch(app.GetWorkbooks());
lpDisp = books.Open(L"d:\\3.xls",
covOptional, covOptional, covOptional, covOptional, covOptional,
covOptional, covOptional, covOptional, covOptional, covOptional,
covOptional, covOptional );
//得到Workbook
book.AttachDispatch(lpDisp);
//得到Worksheets
sheets.AttachDispatch(book.GetWorksheets());
//得到当前活跃sheet
//如果有单元格正处于编辑状态中,此操作不能返回,会一直等待
lpDisp=book.GetActiveSheet();
sheet.AttachDispatch(lpDisp);
//读取已经使用区域的信息,包括已经使用的行数、列数、起始行、起始列
Range usedR
usedRange.AttachDispatch(sheet.GetUsedRange());
range.AttachDispatch(usedRange.GetRows());
long iRowNum=range.GetCount();
//已经使用的行数
range.AttachDispatch(usedRange.GetColumns());
long iColNum=range.GetCount();
//已经使用的列数
long iStartRow=usedRange.GetRow();
//已使用区域的起始行,从开始
long iStartCol=usedRange.GetColumn();
//已使用区域的起始列,从开始
//读取第一个单元格的值
range.AttachDispatch(sheet.GetCells());
range.AttachDispatch(range.GetItem (COleVariant((long)1),COleVariant((long)1)).pdispVal );
vResult =range.GetValue();
if(vResult.vt == VT_BSTR)
str=vResult.bstrV
else if (vResult.vt==VT_R8)
//8字节的数字
str.Format(L"%f",vResult.dblVal);
else if(vResult.vt==VT_DATE)
//时间格式
SYSTEMTIME
VariantTimeToSystemTime((long)&vResult.date, &st);
else if(vResult.vt==VT_EMPTY)
//单元格空的
//读取第一个单元格的对齐方式,数据类型:VT_I4
//读取水平对齐方式
range.AttachDispatch(sheet.GetCells());
iCell.AttachDispatch((range.GetItem (COleVariant(long(1)), COleVariant(long(1)))).pdispVal);
vResult.lVal=0;
vResult=iCell.GetHorizontalAlignment();
if(vResult.lVal!=0)
switch (vResult.lVal)
case -4108:
case -4131 : //*左
case -4152 : //*右
//垂直对齐方式
iCell.AttachDispatch((range.GetItem (COleVariant(long(1)), COleVariant(long(1)))).pdispVal);
vResult.lVal=0;
vResult=iCell.GetVerticalAlignment();
if(vResult.lVal!=0)
switch (vResult.lVal)
case -4160 :
case -4108 :
case -4107 :
//设置第一个单元格字体颜色:红色
range.AttachDispatch(sheet.GetCells());
range.AttachDispatch((range.GetItem (COleVariant(long(1)), COleVariant(long(1)))).pdispVal);
font.AttachDispatch(range.GetFont());
font.SetColor(COleVariant((long)0xFF0000));
//合并单元格的处理
//包括判断第一个单元格是否为合并单元格,以及将第一个单元格进行合并
Range unionR
range.AttachDispatch(sheet.GetCells());
unionRange.AttachDispatch(range.GetItem (COleVariant((long)1),COleVariant((long)1)).pdispVal );
vResult=unionRange.GetMergeCells();
if(vResult.boolVal==-1)
//是合并的单元格
//合并单元格的行数
range.AttachDispatch (unionRange.GetRows ());
long iUnionRowNum=range.GetCount ();
//合并单元格的列数
range.AttachDispatch (unionRange.GetColumns ());
long iUnionColumnNum=range.GetCount ();
//合并区域的起始行,列
long iUnionStartRow=unionRange.GetRow();
//起始行,从开始
long iUnionStartCol=unionRange.GetColumn();
//起始列,从开始
else if(vResult.boolVal==0)
//不是合并的单元格
//将第一个单元格合并成行,列
range.AttachDispatch(sheet.GetCells());
unionRange.AttachDispatch(range.GetItem (COleVariant((long)1),COleVariant((long)1)).pdispVal ); //第一个单元格
unionRange.AttachDispatch(unionRange.GetResize(COleVariant((long)3),COleVariant((long)2)));
//GetResize(3,2) 从第一个单元格开始合并行列的所有单元格
unionRange.Merge(COleVariant((long)0));
//合并单元格
//将文件保存为.xls
book.SaveAs(COleVariant(L"C:\\2.xls"),covOptional,covOptional,
covOptional,covOptional,covOptional,0,
covOptional,covOptional,covOptional,covOptional);
book.Close (covOptional,COleVariant(L"d:\\3.xls"),covOptional);
books.Close();
//释放对象(相当重要!)
range.ReleaseDispatch();
cols.ReleaseDispatch();
sheet.ReleaseDispatch();
sheets.ReleaseDispatch();
book.ReleaseDispatch();
books.ReleaseDispatch();
//App一定要释放,否则程序结束后还会有一个Excel进程驻留在内存中,而且程序重复运行的时候会出错
app.ReleaseDispatch();
app.Quit();
没有更多推荐了,
不良信息举报
举报内容:
《读取xls文件示例》
举报原因:
原文地址:
原因补充:
最多只允许输入30个字
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!C++如何读取xls文件_百度知道
C++如何读取xls文件
求C++编写的代码,该代码能够读取xls文件和文件里的内容回答正确会追加悬赏分
我有更好的答案
想要通过ODBC直接读、写Excel表格文件,首先,应确保ODBC中已安装有Excel表格文件的驱动&MICROSOFT EXCEL DRIVER (*.XLS)&。然后,可根据下面步骤进行:1.
在StdAfx.h文件中加入:#include &afxdb.h& #include &odbcinst.h&2.
通过ODBC直接创建Excel文件(暂定文件名:Demo.xls)//创建并写入Excel文件void CRWExcel::WriteToExcel(){
CString sDriver = &MICROSOFT EXCEL DRIVER (*.XLS)&; // Excel安装驱动
CString sExcelFile = &c:\\demo.xls&;
// 要建立的Excel文件
CString sS
// 创建进行存取的字符串
sSql.Format(&DRIVER={%s};DSN='';FIRSTROWHASNAMES=1;READONLY=FALSE;CREATE_DB=\&%s\&;DBQ=%s&,sDriver, sExcelFile, sExcelFile);
// 创建数据库 (既Excel表格文件)
if( database.OpenEx(sSql,CDatabase::noOdbcDialog) )
// 创建表结构(姓名、年龄)
sSql = &CREATE TABLE demo (Name TEXT,Age NUMBER)&;
database.ExecuteSQL(sSql);
// 插入数值
sSql = &INSERT INTO demo (Name,Age) VALUES ('徐景周',26)&;
database.ExecuteSQL(sSql);
sSql = &INSERT INTO demo (Name,Age) VALUES ('徐志慧',22)&;
database.ExecuteSQL(sSql);
sSql = &INSERT INTO demo (Name,Age) VALUES ('郭徽',27)&;
database.ExecuteSQL(sSql);
// 关闭数据库
database.Close();
CATCH_ALL(e)
TRACE1(&Excel驱动没有安装: %s&,sDriver);
END_CATCH_ALL;}3.
通过ODBC直接读取Excel文件(暂定文件名:Demo.xls)// 读取Excel文件void CRWExcel::ReadFromExcel() {
CString sS
CString sItem1, sItem2;
CString sD
CString sD
CString sFile = &Demo.xls&;
// 将被读取的Excel文件名
// 检索是否安装有Excel驱动 &Microsoft Excel Driver (*.xls)&
sDriver = GetExcelDriver();
if (sDriver.IsEmpty())
// 没有发现Excel驱动
AfxMessageBox(&没有安装Excel驱动!&);
// 创建进行存取的字符串
sDsn.Format(&ODBC;DRIVER={%s};DSN='';DBQ=%s&, sDriver, sFile);
// 打开数据库(既Excel文件)
database.Open(NULL, false, false, sDsn);
CRecordset recset(&database);
// 设置读取的查询语句.
sSql = &SELECT Name, Age &
&FROM demo &
&ORDER BY Name &;
// 执行查询语句
recset.Open(CRecordset::forwardOnly, sSql, CRecordset::readOnly);
// 获取查询结果
while (!recset.IsEOF())
//读取Excel内部数值
recset.GetFieldValue(&Name &, sItem1);
recset.GetFieldValue(&Age&, sItem2);
// 移到下一行
recset.MoveNext();
// 关闭数据库
database.Close();
CATCH(CDBException, e)
// 数据库操作产生异常时...
AfxMessageBox(&数据库错误: & + e-&m_strError);
END_CATCH;}// 获取ODBC中Excel驱动CString CRWExcel::GetExcelDriver(){
char szBuf[2001];
WORD cbBufMax = 2000;
WORD cbBufO
char *pszBuf = szB
CString sD
// 获取已安装驱动的名称(涵数在odbcinst.h里)
if (!SQLGetInstalledDrivers(szBuf, cbBufMax, &cbBufOut))
return &&;
// 检索已安装的驱动是否有Excel...
if (strstr(pszBuf, &Excel&) != 0)
sDriver = CString(pszBuf);
pszBuf = strchr(pszBuf, '\0') + 1;
while (pszBuf[1] != '\0');
return sD}
采纳率:19%
基本不可能编写因为xls文件是Microsoft公司Excel软件所生成,而Excel是商业性软件,xls也同样不是通用文件格式,Microsoft公司的软件隐秘性做得非常好,所以xls文件的读取是基本不可能的。不过你可以写一些开源软件的文件读取。
这个问题比较复杂.1.首先你要清楚Excel文件的基本结构.该文件有文件头,index部分,文件体构成.文件头确定版本之类的信息.index是对文件体的整体索引.2.要明白index和文件体之间的关系.这样每一个单元格都可以被index定位.3.当然这样你就可以读取简单的excel文件了,比如出了单元格的内容没有页面设置.4.对于复杂文件,比如设置过各种格式的文件,包括单元格格式,文档格式等等,这种文件更麻烦.一般是利用ADO组件去读取的。
为您推荐:
其他类似问题
xls文件的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。查看: 7198|回复: 6
如何使用VLOOKUP对应另一个EXCEL文件里相对应的数字
阅读权限10
在线时间 小时
如附件中,我想要做到在文件市调表格(固定表格)中Q5数据对应到Book1(这个文件每日更新)里的H4,如何正确用VLOOKUP公式关联? 我尝试的公式有误,在BOOK1这个文件如有更新位置有变动以后,就导致市调表格Q5位置的不正确了,请帮助!谢谢!
请看附件内容:
(23.94 KB, 下载次数: 32)
11:19 上传
点击文件名下载附件
阅读权限20
在线时间 小时
在Q列输入 VLOOKUP($C5,'[Book1.xls]3424批量商品清单'!$B:$J,7,0),book1中的位置是不能轻易变得,如果变了,相应的公式也要重新编辑
阅读权限30
在线时间 小时
& & & & & & & &
个人觉得两个工作簿之间用公式引用没什么作用,容易出错,而且只有两个工作簿同时打开的时候才能更新内容。只是打开带公式的那个表的时候还老是弹出提示。
阅读权限10
在线时间 小时
资盟 发表于
在Q列输入 VLOOKUP($C5,'3424批量商品清单'!$B:$J,7,0),book1中的位置是不能轻易变得,如果变了,相应的公 ...
好的,我参考看看
阅读权限10
在线时间 小时
jingooluo 发表于
个人觉得两个工作簿之间用公式引用没什么作用,容易出错,而且只有两个工作簿同时打开的时候才能更新内容。 ...
所以请教有无更好的办法,即使BOOK1行间数据变动,但是可以使市调表格内的公式关联数据的准确...
阅读权限30
在线时间 小时
aapple 发表于
所以请教有无更好的办法,即使BOOK1行间数据变动,但是可以使市调表格内的公式关联数据的准确...
工作簿之间的公式引用据我所知没有任何办法,最好是用宏编个小程序获取更新。
阅读权限10
在线时间 小时
==VLOOKUP(B4,'[市调表格.xls] 每日市调'!$C$5:$S$33,15,0)
最新热点 /1
ExcelHome每周都有线上直播公开课,
国内一流讲师真身分享,高手贴身答疑,
赶不上直播还能看录像,
关键居然是免费的!
厚木哥们都已经这么努力了,
你还好意思说学不好Office。
玩命加载中,请稍候
玩命加载中,请稍候
Powered by
本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任! & & 本站特聘法律顾问:徐怀玉律师 李志群律师Excel中怎么定义名称及定义名称的技巧_百度经验
&&&&&&&&&电脑软件Excel中怎么定义名称及定义名称的技巧听语音1234567
百度经验:jingyan.baidu.comExcel中有一个特别好的工具就是定义名称,顾名思义,就是为一个区域、常量值、或者数组定义一个名称,这样的话,我们在之后的编写公式时可以很方便的用所定义的名称进行编写。方便、快捷、简答。具体的用法,就让小编我慢慢道来。百度经验:jingyan.baidu.com1我们了解一下怎么打开定义名称对话框。方法一:打开office2007→公式→定义名称方法二:CTRL+F3→新建2在定义名称对话框中定义一个名称。我们定义一个名为NUM的名称,其所代表的是一个区域A1:A33然后我们对A1:A3区域进行求和。利用我刚才定义的名称→C3=SUM(NUM)=64通过上面的例子我们可以看出,我们定义的名称在公式里完全可以代替一个区域、常量值、或则数组。END百度经验:jingyan.baidu.com1这里我们使用技巧以例子为主给大家讲解。1、常量值引用我们想做一个公司公积金交费表,具体的方法是,按照每个人的交费基数*11%,这里的11%是一个常量值,所以我们就可以把它定为一个名称。2我们B3的单元格输入的公式为:&B3=A3*公积金比例32、单元格引用我们定义名称如果是对单元格的引用,这种引用存在着相对引用与混合引用的关系,具体的原理不在详述,我们只是通过一个例子来展示:下面是一个班级的学生成绩表,我们定义了两个名称“start”“end”如下图:4如果我们在英语与语文之间插入一列则出现下表情况。5如何解决这个问题,我们有如下两个方法:一是:开始就对B列进行锁定把start定义为$B2.&二是:我们把公式改成&F13=SUM(B2:end) 这样就不存在B2随着插入行而改变了。6关于数组区域的引用我们在最开始的例子已经给予了说明,不再讲述。END经验内容仅供参考,如果您需解决具体问题(尤其法律、医学等领域),建议您详细咨询相关领域专业人士。作者声明:本篇经验系本人依照真实经历原创,未经许可,谢绝转载。投票(7)已投票(7)有得(0)我有疑问(0)◆◆说说为什么给这篇经验投票吧!我为什么投票...你还可以输入500字◆◆只有签约作者及以上等级才可发有得&你还可以输入1000字◆◆如对这篇经验有疑问,可反馈给作者,经验作者会尽力为您解决!你还可以输入500字相关经验00050热门杂志第1期你不知道的iPad技巧3762次分享第1期win7电脑那些事6614次分享第2期新人玩转百度经验1398次分享第1期Win8.1实用小技巧2646次分享第1期小白装大神1910次分享◆请扫描分享到朋友圈excel 根据一个单元格的值,对应出现下拉列表所对应的选项。_百度知道
excel 根据一个单元格的值,对应出现下拉列表所对应的选项。
如图,假如D2等于1时,B2下拉列表中就可以选abcd;D2等于2时,B2下拉列表中就可以选甲乙丙丁。类似这种表格下拉选择列表怎么做?
我有更好的答案
你要求的是二级下拉菜单制作,方法如下:制作数据源表格:比如一级菜单为省份,二级菜单为城市,可以将表格制作为下图这样的定位有效自定义区域:选中D2:J5区域,按CTRL+G进行定位,定位常量,此步骤是为了不让下拉菜单中出现多余的空白选项。自定义名称:将各省份的城市定义为本省名称,点击工具栏上的“公式”选项卡,在自定义名称区域点击“按所选内容创建”,选择最左列,确定。创建一级下拉菜单:选中A2:A11(区域自定),依次点击“数据”选项卡-数据验证(2013版以前叫“数据有效性”),选择序列,在来源下的方框中点击下鼠标或点击方框后的小图标,用鼠标选择D2:D5,确定。此时,在A2:A11区域即可选择省份制作二级下拉菜单(城市):操作与第4步基本相同,选中B2:B11区域后打开数据验证,序列,来源不同了,用公式=indirect(a2) &注意这个A2需要相对引用。点击确定后,看下B列单元格,点击下拉箭头,只会出现你在A列对应单元格选择的省份城市。
第一步:命名一个名称myList,&&&=OFFSET($B$7:$B$10,0,$D$2-1)第二步:设置B2的数据有效性,序列,=myList注:定义名称的好处是你的列表可以放在其他表中。而不一定要放在当前表里。
本回答被提问者采纳
点击下拉按钮
楼上的,高手云集啊!
定义名称=OFFSET(Sheet1!$B$7,,MATCH(Sheet1!$D$2,Sheet1!$B$6:$D$6,0)-1,4)大概如图,详见附件。
选中B2&数据&有效性设置&允许&选择&序列&来源&输入公式&=OFFSET($B$7,,D2-1,4)确定
太多了内容,我在网上找的例子,我不想打字了,不过有任何问题可以找我。 先做张基础表全选A列,在名称框输入“大类”两字,将A列取名“大类”,再将C列取名水果,D列取名蔬菜……在A列输入水果、蔬菜……(注意,输入的类别一定要和后面列的名称相同,实质上输入的是后面各列的名称)在C列输入苹果、橘子……在D列输入青菜、黄瓜……进正式表A2,数据/有效性,在来源中输入=INDIRECT(&大类&)在B2,数据/有效性,在来源中输入=INDIRECT(A2)再将A2和B2单元格分别下拉即可
其他4条回答
为您推荐:
其他类似问题
您可能关注的内容
下拉列表的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。

我要回帖

更多关于 excel读取文件名称 的文章

 

随机推荐