怎样直接从*.xls文件中直接读取数据,不要用ODBC和OLE等(急!!!解决就给分)分不够还可以再加!!!!

tengfei2002 2004-09-17 04:05:01
如题!!!最好能给一个完整的例子
zhoufeng0612@Hotmail.com

tengfei2002@sina.com
...全文
199 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
追求自由 2004-09-20
  • 打赏
  • 举报
回复
mark
tengfei2002 2004-09-20
  • 打赏
  • 举报
回复
liuxianzhi(碧渊)和wentrue(上,向上)
可以去“数据库”版中,回复这个问题,我把那个贴子也结了
tengfei2002 2004-09-20
  • 打赏
  • 举报
回复
谢谢 liuxianzhi(碧渊)和wentrue(上,向上)
wentrue 2004-09-20
  • 打赏
  • 举报
回复
已经发过去了 接分~~~~
13880079673 2004-09-20
  • 打赏
  • 举报
回复
如果只是简单的表格,你又知道格式的话就用读文本文件的方法,'\n'是换行,'\t'是换列
wentrue 2004-09-20
  • 打赏
  • 举报
回复
给你一个在VCBASE上找到的直接读取EXCEL文件的源代码。以前我也用过的:
http://www.vckbase.com/code/downcode.asp?id=2079
red-fly 2004-09-20
  • 打赏
  • 举报
回复
给我看一看,

ligo7@tom.com
liuxianzhi 2004-09-20
  • 打赏
  • 举报
回复
我有个例子程序,已经发到楼主的信箱了,需要的朋友可以在这里留言或者给我发信息。
wonhao 2004-09-20
  • 打赏
  • 举报
回复
up
薛定谔之死猫 2004-09-17
  • 打赏
  • 举报
回复
mark
tengfei2002 2004-09-17
  • 打赏
  • 举报
回复
CFile f;
CFileException e;

// 打开文件
if (!f.Open("F:\\Book1.xls", CFile::modeRead, &e))
{
TCHAR szError[1024];
e.GetErrorMessage(szError, 1024);
AfxMessageBox(szError);
return;
}
// 第二步:读取版本号
// 读取版本
DWORD dwPos = f.GetPosition();

DWORD dwLen= f.GetLength();
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();



这段代码据说可以读xls的结构,谁能让他编译通过呀?
snaill 2004-09-17
  • 打赏
  • 举报
回复
那估计很难了,XLS的文件格式不是开放的
shaojun1314 2004-09-17
  • 打赏
  • 举报
回复
呵呵,我也不知道,期待大虾的解答!
tengfei2002 2004-09-17
  • 打赏
  • 举报
回复
我有一个很重要的XLS文件,打不开了,我想能恢复多少是多少

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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