¥¥¥¥¥如何用C++读写excel和oracle数据库?¥¥¥¥¥

doisadfsadf 2003-10-15 07:05:43
如何用C++读写excel和oracle数据库?

请给个例子?谢谢!!!
...全文
178 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
hawk_yz 2003-10-20
  • 打赏
  • 举报
回复
楼上直接分析文件格式太麻烦,不如用ADO或ODBC读。

VCKBASE上有相关的例子.

但如果用ADO直接读EXCEL发生在读到256个字符的时候,读不下去。

CODEGURU上有例子,不知道那位有解决的办法。

我在操作EXCEL的时候,只好导入ACCESS中,然后用ADO读写。
Andy84920 2003-10-17
  • 打赏
  • 举报
回复
我知道有PRO * C.
sevencat 2003-10-17
  • 打赏
  • 举报
回复
oracle有自带的一套函数库,
你可以直接调用的。
而EXCEL就没有了,你好像只有通过ADO或者用自动化来读写了。
daizh 2003-10-17
  • 打赏
  • 举报
回复
直接读取Excel文件数据

作者/weigf

前言
由于种种需要直接进行读取Excel文件数据,然而在网上Search多次也没有找到好的方法,
一般就通过ODBC或OLE方式进行读取,但这两种方法都具有局限性...(我相信大家都很清楚)。
怎么办呢?没办法了,只好选择最艰难的路了--分析Excel文件格式。
介绍
MS Excel是众所周知的电子表格处理软件。Excel文件格式是特定的BIFF(Binary Interchange File Format),BIFF里存储了很多记录,第条记录包括记录头和记录体。记录头是4byte,前两位指定记录类型的代码(opcode),后两位指定记录长度;记录体是存储该记录的实际数据。
比如:

BOF record
| Record Header | Record Body |
Byte | 0 1 2 3 | 0 1 2 3 |
-----------------------------------------
Contents | 09 | 00 | 04 | 00 | 02 | 00 | 10 | 00 |
-----------------------------------------
| opcode | length | version | file |
| | | number | type |
记录头:
opcode: 09h is BOF;
length: 04h record body is 4 bytes long;
记录体:
version number:02h is version number (2 for the initial version of Excel)
file type:10h is a worksheet file;
具体可参考MS Excel File Format。

描述
以下是对本文程序简单描述。

第一步:打开文件
CFile f;
CFileException e;

// 打开文件
if (!f.Open("D:\\Book1.xls", CFile::modeRead, &e))
{
TCHAR szError[1024];
e.GetErrorMessage(szError, 1024);
AfxMessageBox(szError);
return;
}
第二步:读取版本号
// 读取版本
while (dwPos < dwLen)
{
nRead = f.Read((void*)&RecNo, 2);
if (RecNo == XL_BOF)
{
WORD Ver, Type;
f.Read((void*)&RecLen, 2);
f.Read((void*)&Ver, 2);
f.Read((void*)&Type, 2);
f.Seek(RecLen, CFile::current);

int ver = 0;
switch (Ver)
{
case BIFF7:
ver = 7;
break;
case BIFF8:
ver = 8;
AfxMessageBox("Biff8");
break;
}

int type = 0;
switch (Type)
{
case WORKBOOK:
type = 5;
AfxMessageBox("Workbook");
break;
case WORKSHEET:
type = 16;
AfxMessageBox("Worksheet");
break;
case CHART:
type = 32;
AfxMessageBox("Chart");
break;
}

break;
}
dwPos = f.GetPosition();
}
第三步:读其它数据
f.SeekToBegin();
dwPos = f.GetPosition();
// 读表格数据
while (dwPos < dwLen)
{
nRead = f.Read((void*)&RecNo, 2);
switch (RecNo)
{
case XL_BOF:
{
f.Read((void*)&RecLen, 2);
AfxMessageBox("Bof");
}
break;
case XL_BOUNDSHEET:
{
DWORD temp;
BYTE visi;
BYTE type;
TCHAR name;

f.Read((void*)&RecLen, 2);
f.Read((void*)&temp, 4);
f.Read((void*)&visi, 1);
f.Read((void*)&type, 1);
f.Read((void*)&StrLen, 2);
f.Read((void*)&name, StrLen);

char buf[128];
memset(buf, 0x0, 128);
strncpy(buf, &name, StrLen);

AfxMessageBox(buf);
}
break;
case XL_DIMENSION:
f.Read((void*)&RecLen, 2);
f.Seek(RecLen, CFile::current);
AfxMessageBox("Dimension");
break;
case 0xE2: // INTERFACED
f.Read((void*)&RecLen, 2);
AfxMessageBox("e2");
break;
case XL_SST:
f.Read((void*)&RecLen, 2);
f.Seek(RecLen, CFile::current);
AfxMessageBox("SST");
break;
case XL_NUMBER:
f.Read((void*)&RecLen, 2);
AfxMessageBox("Number");
break;
case XL_STRING:
f.Read((void*)&RecLen, 2);
AfxMessageBox("String");
break;
case XL_RK:
f.Read((void*)&RecLen, 2);
AfxMessageBox("RK");
break;
case XL_LABEL:
{
f.Read((void*)&RecLen, 2);
AfxMessageBox("Label");
}
break;
case 0xD6:
f.Read((void*)&RecLen, 2);
AfxMessageBox("RString");
break;
case XL_EOF:
dwPos = dwLen;
AfxMessageBox("Eof");
break;
default:
nRead = f.Read((void*)&RecLen, 2);
if (nRead == 0)
dwPos = dwLen;
break;
}
}
第四步:关闭文件
f.Close();
结束
本方讲述的是独立于MS Office系统,分析Excel文件格式并读取其数据。上述程序只读取最基本的信息。若需应用还需更完整的分析(我也在进行中...),当然读取Excel文件方法有多种,在这里只讲述了我使用的方法,
希望与各们朋友多交流!
linggyy 2003-10-17
  • 打赏
  • 举报
回复
up
WindTech 2003-10-17
  • 打赏
  • 举报
回复
关注一下

ps:今天晚上有 黑豹 的演出
typecheese12345 2003-10-17
  • 打赏
  • 举报
回复
c++builder的ADO一按一拉一连,OK
cvsuser 2003-10-16
  • 打赏
  • 举报
回复
好像不能直接读。
用VBA可以直接读。
henghengpig 2003-10-16
  • 打赏
  • 举报
回复
因为手头没有单纯的C++读写excel和oracle数据库资料,我使用的是toubo c2.0下的c & foxbase,估计你看不上。
doisadfsadf 2003-10-16
  • 打赏
  • 举报
回复
能否给一段代码呢?
我想用纯的C++,不想使用图形界面.
谢谢!!
bosedom 2003-10-15
  • 打赏
  • 举报
回复
如果用.net开发的话,用ADO连的话很方便的。ADO是.net framework中的一部分。提供了大量的数据库的接口。
douwei13 2003-10-15
  • 打赏
  • 举报
回复
ODBC不是只能读excel不能写excel吗?
Wolf0403 2003-10-15
  • 打赏
  • 举报
回复
偶知道可以用 ODBC, OLE DB 可能也可以。但是偶不懂。

64,646

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧