VC读取EXCEL的问题

时间:2022-03-28 09:49:23
现在打算这样操作,我有一个EXCEL表,里面有M个记录,然后我要在另一个EXCEL表里查出这M个记录(这个EXCEL表里的记录数目大于M个),并进行累加,显示总和。
如:EXCEL表A里,有两条记录:“A”,“B”,要在另一个EXCEL表B里(“A,21”,“F,55”,“B,22”,“C,23”,“D,24”的记录里查出,然后在B里查出“A,21”和“B,22”后,累加21+22=43,显示出43,
请问如何解决
   

14 个解决方案

#1


竟然没有人回复我的。

#2


没研究过帮顶下吧

#3


建立两张表A,B(注必须是二维表)
简单的方法使用ODBC连接,
建立DSN,开始->控制面板->管理工具->数据源(odbc)->系统dsn->添加->选择Microsoft excel driver
->设置"数据源名",选择"工作薄",点"选项",取消"只读"


//连接示例(使用API,如果使用MFC,请自己转换一下)

        HENV henv=NULL;
        HDBC hdbc=NULL;
SQLRETURN ret;
SQLAllocHandle(SQL_HANDLE_ENV,NULL,&henv);
if(henv==NULL)
return FALSE;
SQLSetEnvAttr(henv,SQL_ATTR_ODBC_VERSION,(SQLPOINTER)SQL_OV_ODBC3,SQL_IS_INTEGER);
SQLAllocHandle(SQL_HANDLE_DBC,henv,&hdbc);
ret=SQLConnect(hdbc,(SQLCHAR*)"数据源名",lstrlen("数据源名"),(SQLCHAR*)"",lstrlen(""),
(SQLCHAR*)"",lstrlen(""));

HSTMT hstmt;
SQLAllocHandle(SQL_HANDLE_STMT,hdbc,&hstmt);
SQLPrepare(hstmt,(SQLCHAR*)"SELECT语名",SQL_NTS);
ret=SQLExecute(hstmt);
if(ret!=SQL_SUCCESS && ret!=SQL_SUCCESS_WITH_INFO)
{
//失败
}
SQLBindCol(...);
SQLFetch(hstmt);
SQLFreeHandle();


大概步骤就是这样,具体函数请参考MSDN


#4


1、读出两个sheet中的 关键字(匹配字段)及 行位置,记录在两个结构数组里
2、如有必要,可以对两个数组进行一下排序
3、匹配处理,读写处理结果

#5


如果只查询,ODBC会快很多

#6


直接写sql,在vc里执行
SheetA:
-----------------------
     字段1     字段2
1.    A         ×××
2.    B         ×××
.
.
.
,
SheetB:
-----------------------
     字段1     字段2
1.    A         21
2.    B         22
3.    C         N
.
.
.
Sql : “select sum(b.字段2) from SheetA a,SheetB b where a.字段1 = b.字段2”

-----------------------
用vc打开excel文件,将excel文件当作数据库打开,写法可以参照Access的操作,只是连接字符串改变一下就可以了。

#7


操作Excel文件读取数据,参考:
http://www.vckbase.com/document/viewdoc/?id=421

#8


都是好人,,,谢谢这么多意见.

#9


不过楼上的,能同时打开两个EXCEL表的吗?

#10


是两个EXCEL文件,楼上的只是两个SHEET表.

#11


可以打开的,我最近也在做个项目,正好是ADO连接EXCEL,多个表操作。 打开多个EXCEL也可以

#12


能吗?我意思就是两个EXCEL文件之间的操作,有举例吗?

#13


创建两个dsn,建立两个odbc连接.

#14


确实只能建立两个DSN呢,,,可能我出题目时表达不清楚,不过都多谢各位专业的意见,在此,小生感激不尽。现将分数付上。

#1


竟然没有人回复我的。

#2


没研究过帮顶下吧

#3


建立两张表A,B(注必须是二维表)
简单的方法使用ODBC连接,
建立DSN,开始->控制面板->管理工具->数据源(odbc)->系统dsn->添加->选择Microsoft excel driver
->设置"数据源名",选择"工作薄",点"选项",取消"只读"


//连接示例(使用API,如果使用MFC,请自己转换一下)

        HENV henv=NULL;
        HDBC hdbc=NULL;
SQLRETURN ret;
SQLAllocHandle(SQL_HANDLE_ENV,NULL,&henv);
if(henv==NULL)
return FALSE;
SQLSetEnvAttr(henv,SQL_ATTR_ODBC_VERSION,(SQLPOINTER)SQL_OV_ODBC3,SQL_IS_INTEGER);
SQLAllocHandle(SQL_HANDLE_DBC,henv,&hdbc);
ret=SQLConnect(hdbc,(SQLCHAR*)"数据源名",lstrlen("数据源名"),(SQLCHAR*)"",lstrlen(""),
(SQLCHAR*)"",lstrlen(""));

HSTMT hstmt;
SQLAllocHandle(SQL_HANDLE_STMT,hdbc,&hstmt);
SQLPrepare(hstmt,(SQLCHAR*)"SELECT语名",SQL_NTS);
ret=SQLExecute(hstmt);
if(ret!=SQL_SUCCESS && ret!=SQL_SUCCESS_WITH_INFO)
{
//失败
}
SQLBindCol(...);
SQLFetch(hstmt);
SQLFreeHandle();


大概步骤就是这样,具体函数请参考MSDN


#4


1、读出两个sheet中的 关键字(匹配字段)及 行位置,记录在两个结构数组里
2、如有必要,可以对两个数组进行一下排序
3、匹配处理,读写处理结果

#5


如果只查询,ODBC会快很多

#6


直接写sql,在vc里执行
SheetA:
-----------------------
     字段1     字段2
1.    A         ×××
2.    B         ×××
.
.
.
,
SheetB:
-----------------------
     字段1     字段2
1.    A         21
2.    B         22
3.    C         N
.
.
.
Sql : “select sum(b.字段2) from SheetA a,SheetB b where a.字段1 = b.字段2”

-----------------------
用vc打开excel文件,将excel文件当作数据库打开,写法可以参照Access的操作,只是连接字符串改变一下就可以了。

#7


操作Excel文件读取数据,参考:
http://www.vckbase.com/document/viewdoc/?id=421

#8


都是好人,,,谢谢这么多意见.

#9


不过楼上的,能同时打开两个EXCEL表的吗?

#10


是两个EXCEL文件,楼上的只是两个SHEET表.

#11


可以打开的,我最近也在做个项目,正好是ADO连接EXCEL,多个表操作。 打开多个EXCEL也可以

#12


能吗?我意思就是两个EXCEL文件之间的操作,有举例吗?

#13


创建两个dsn,建立两个odbc连接.

#14


确实只能建立两个DSN呢,,,可能我出题目时表达不清楚,不过都多谢各位专业的意见,在此,小生感激不尽。现将分数付上。