首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

c++ builder读取excel文件中的内容,如何做

2012-09-29 
c++ builder读取excel文件中的内容,怎么做?大家给我个思路:我看有一个office2k,是不是使用这里面的控件,读

c++ builder读取excel文件中的内容,怎么做?
大家给我个思路:我看有一个office2k,是不是使用这里面的控件,读取呀?

[解决办法]
用C++Builder操作Excel, 最简单的方法就是用OLE代码了。参考:
http://www.ccrun.com/article.asp?i=529&d=0iezy5

Office组件不好用,太庞大,不建议用。
[解决办法]

C/C++ code
#ifndef EXCEL_OP_H#define EXCEL_OP_H#include <vcl.h>class ExcelOp{  Variant s_vExcelApp,s_vSheet;  bool s_bOpen;  int s_nRowCount,s_nColCount;protected:  Variant GetCell(int row,int col)  {    if(s_bOpen)    {      return s_vSheet.OlePropertyGet("Cells",row,col).OlePropertyGet("Value");    }    return Null;  }  void SetCell(int row,int col,Variant &var)  {    if(!s_bOpen)    {      return ;    }    String temp=var;    s_vSheet.OlePropertyGet("Cells",row,col).OlePropertySet("Value",temp.c_str());  }  int GetRowCount()  {     if(!s_bOpen)     return 0;     int i=1;     String strValue=Cells[i][1];     if(!strValue.IsEmpty())     {       do       {         strValue=Cells[++i][1];       }while(!strValue.IsEmpty());       --i;     }     s_nRowCount=i;     return s_nRowCount;  }  int GetColCount()  {     if(!s_bOpen)     return 0;     int i=1;     String strValue=Cells[1][i];     if(!strValue.IsEmpty())     {       do       {         strValue=Cells[1][++i];       }while(!strValue.IsEmpty());       --i;     }     s_nColCount=i;     return s_nColCount;  }  void SetColumnWidth(int col,int width)  {    if(s_bOpen)    s_vExcelApp.OlePropertyGet("Columns",col).OlePropertySet("ColumnWidth",width);  }  int GetColumnWidth(int col)  {    if(s_bOpen)    return  s_vExcelApp.OlePropertyGet("Columns",col).OlePropertyGet("ColumnWidth");    return 0;  }public:  const enum Op  {     Create_Op,     Load_Op  };    ExcelOp():s_vExcelApp(Null()),            s_vSheet(Null()),            s_bOpen(false),            s_nRowCount(0),            s_nColCount(0)  {}  ~ExcelOp()  {      try      {        if(!s_vExcelApp.IsNull())        s_vExcelApp.OleFunction("Quit");        s_vSheet=Unassigned;        s_vExcelApp=Unassigned;      }      catch(...)      {}  }  void Close()  {    if(s_bOpen)    {      s_vExcelApp.OlePropertyGet("ActiveWorkbook").OleFunction("Close");      s_bOpen=false;    }  }  void Save()  {    if(s_bOpen)    {      s_vExcelApp.OlePropertyGet("ActiveWorkbook").OleFunction("Save");    }  }  void Save(const char* lpszFileName)  {    if(s_bOpen)    {      s_vExcelApp.OlePropertyGet("ActiveWorkbook").OleFunction("SaveAs",lpszFileName);    }  }  bool Open(const char* szFileName,const Op op)  {     if(op!=Create_Op)     {       if(!FileExists(szFileName))       return false;     }     Close();     do     {       try       {         s_vExcelApp=Variant::CreateObject("Excel.Application");       }       catch(...)       {         Application->MessageBoxA("CreateObject出错,请确认本机是否安装了MS-EXCEL。","错误",MB_ICONINFORMATION);         break;       }       try       {         s_vExcelApp.OlePropertySet("Visible", false);         if(op==Load_Op)         {           s_vExcelApp.OlePropertyGet("Workbooks").OleProcedure("Open",szFileName); // 工作表           s_vSheet=s_vExcelApp.OlePropertyGet("ActiveWorkbook").OlePropertyGet("ActiveSheet");         }         else if(op==Create_Op)         {           s_vExcelApp.OlePropertyGet("Workbooks").OleFunction("Add", 1); // 工作表           s_vSheet=s_vExcelApp.OlePropertyGet("ActiveWorkbook").OlePropertyGet("Sheets", 1);         }       }       catch(...)       {         break;       }       s_bOpen=true;     }while(0);     return s_bOpen;  }  void Select()  {    if(!s_bOpen)    return;        s_vSheet.OleProcedure("Select");    s_vSheet.OlePropertyGet("Cells").OleProcedure("Select");  }  void SetSelectTextFormat()  {    if(s_bOpen)    s_vExcelApp.OlePropertyGet("Selection").OlePropertySet("NumberFormatLocal", "@");  }  void SetCellFont(int row,int col,int nFontSize,const char *szFontName,const char* szFontStyle)  {     if(s_bOpen)     {       s_vSheet.OlePropertyGet("Cells",row,col).OlePropertyGet("Font").OlePropertySet("Size",nFontSize);       s_vSheet.OlePropertyGet("Cells",row,col).OlePropertyGet("Font").OlePropertySet("Name",szFontName);       s_vSheet.OlePropertyGet("Cells",row,col).OlePropertyGet("Font").OlePropertySet("FontStyle",szFontStyle);     }  }  __property Variant Cells[int row][int col]={read=GetCell,write=SetCell};  __property int RowCount={read=GetRowCount};  __property int ColCount={read=GetColCount};  __property int ColumnWidth[int col]={read=GetColumnWidth,write=SetColumnWidth};};#endif 

热点排行