• 7310阅读
  • 2回复

qt 将数据导入excel的问题?? [复制链接]

上一主题 下一主题
离线longwenbiao
 
只看楼主 倒序阅读 楼主  发表于: 2009-12-10
— 本帖被 XChinux 从 General Qt Programming 移动到本区(2011-01-02) —

 CFile f;
 CFileException e;
 // 打开文件
 if (!f.Open("D:\\Book1.xls", CFile::modeRead, &e))
 {
  TCHAR szError[1024];
  e.GetErrorMessage(szError, 1024);
  AfxMessageBox(szError);
  return;
 }
 DWORD dwLen = f.GetLength();
 DWORD dwPos = f.GetPosition();
 WORD RecNo, RecLen, StrLen;
 UINT nRead;
 
 // 读取版本
 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中读取数据,但是我想通过这种读取文件格式的方法将某些数据导入excel中,怎么办?
离线XChinux

只看该作者 1楼 发表于: 2009-12-10
看ActiveQt模块操作Excel方面的文章, google搜索一下就能查到。
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线longwenbiao
只看该作者 2楼 发表于: 2009-12-11
我现在是用eclipse+qt4.5.2,我们老大说只能用Biff8的格式来分析,其他的方法不行啊,可是我分析了下,好多的东西都不一样,不知道怎么办了。
快速回复
限100 字节
 
上一个 下一个