CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
花落谁家,你作主! 盛大widget设计大赛英雄榜
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C++ Builder >  基础类

存取Excel表格

楼主zzroom(徐子陵)2001-02-11 20:25:00 在 C++ Builder / 基础类 提问

我以下的程序拆迁执行时为何会出错?  
   
  #include   <vcl.h>  
  #pragma   hdrstop  
   
  #include   "excel.h"  
  #include   "vcl\utilcls.h"   //   util   classes实用类说明  
   
  #define   PG   OlePropertyGet  
  #define   PS   OlePropertySet  
  #define   FN   OleFunction  
  #define   PR   OleProcedure  
  //---------------------------------------------------------------------------  
  #pragma   package(smart_init)  
  #pragma   resource   "*.dfm"  
  TForm1   *Form1;  
  //-----------------------------------------------------------------------  
  __fastcall   TForm1::TForm1(TComponent*   Owner)  
                  :   TForm(Owner)  
  {  
  }  
  //----------------------------------------------------------------------  
   
  void   __fastcall   TForm1::Button1Click(TObject   *Sender)  
  {  
          Variant   Ex,Wb,Sh1;  
          Ex=Variant::CreateObject("Excel.Application");  
          Ex.PG("WorkBooks").PR("Open","c:\temp\book1.xls");  
          Wb=Ex.PG("ActiveWorkBook");  
          Sh1=Wb.PG("ActiveSheet");  
          for   (int   i=1;i<=10;i++)  
                  for   (int   j=1;j<=10;j++)  
                          Sh1.PG("Cells",i,j).PS("Value",i*100+j);  
          Wb.PR("Save","c:\temp\book1.xls");  
          Wb.PR("Close","c:\temp\book1.xls");  
          return;  
  }  
  //----------------------------------------------------------------------  
  问题点数:30、回复次数:27Top

1 楼zzroom(徐子陵)回复于 2001-02-12 13:50:00 得分 0

我用的是C++BUILDER5。Top

2 楼Hank(星星农场)回复于 2001-02-12 15:09:00 得分 0

没有心情和你仔细分析了,反正问题很多,再说,你连文件存在测试都没有,Excel97有没有安装也不知道?算了,看一下我的代码:  
  void   __fastcall   TInvoiceform::BitBtn3Click(TObject   *Sender)  
  {  
  OpenDialog1->Filter="*.XLS|*.XLS";  
  OpenDialog1->DefaultExt="*.XLS";  
  if   (OpenDialog1->Execute())  
    {  
      Variant   MSSheet,MSExcel=CreateOleObject("Excel.Application");  
      MSExcel.OlePropertyGet("WorkBooks").OleProcedure("Open",OpenDialog1->FileName);  
      MSSheet=MSExcel.OlePropertyGet("ActiveWorkBook").OlePropertyGet("ActiveSheet");  
      Table2->Close();  
      Table2->EmptyTable();  
      Table2->Open();  
      MSExcel.OlePropertySet("Visible",False);  
      int   Linesing=1;  
      while   (Trim(MSSheet.OlePropertyGet("Cells",Linesing,1).OlePropertyGet("Value"))!="")  
        {  
          try  
            {  
              StrToFloat(Trim(MSSheet.OlePropertyGet("Cells",Linesing,4).OlePropertyGet("Value")));  
              if   (!Table2->FindKey(ARRAYOFCONST((Trim(MSSheet.OlePropertyGet("Cells",Linesing,1).OlePropertyGet("Value"))))))  
                {  
                  Table2->Edit();  
                  Table2->Append();  
                  Table2->FieldByName("SHORTCODE")->AsString=Trim(MSSheet.OlePropertyGet("Cells",Linesing,1).OlePropertyGet("Value"));  
                  Table2->FieldByName("SELECODE")->AsString=Trim(MSSheet.OlePropertyGet("Cells",Linesing,3).OlePropertyGet("Value"));  
                  Table2->FieldByName("SELEPRICE")->AsFloat=MSSheet.OlePropertyGet("Cells",Linesing,4).OlePropertyGet("Value");  
                  Table2->Post();  
                }  
              else  
                {  
                  Linesing++;  
                  continue;  
                }  
            }  
          catch(...)  
            {  
              Linesing++;  
              continue;  
            }  
          Linesing++;  
        }  
      MSExcel.OlePropertyGet("ActiveWorkBook").OleProcedure("Close");  
      Application->MessageBox("读取完成!","Invoice   Process   System",MB_OK+MB_ICONINFORMATION);  
    }  
  }Top

3 楼BCB(天下三分明月夜,二分无赖是扬州)回复于 2001-02-12 16:42:00 得分 30

要用\\,不要我也常搞错  
  ;  
          Wb.PR("Save","c:\\temp\\book1.xls");  
          Wb.PR("Close","c:\\temp\\book1.xls");  
          ");  
          Ex.PG("WorkBooks").PR("Open","c:\\temp\\book1.xls");  
  Top

4 楼BCB(天下三分明月夜,二分无赖是扬州)回复于 2001-02-12 16:46:00 得分 0

C语言就是有点怪,一个不注意的小问题  
  会使你忙几天都找不出头绪;Top

5 楼BCB(天下三分明月夜,二分无赖是扬州)回复于 2001-02-12 17:03:00 得分 0

明白了?将"   \   "改成“\\"试试Top

6 楼zzroom(徐子陵)回复于 2001-02-12 23:27:00 得分 0

致BCB:我已将"   \   "改成“\\",可还是报错,为何?Top

7 楼BCB(天下三分明月夜,二分无赖是扬州)回复于 2001-02-13 08:20:00 得分 0

还错?!头"excel.h"干什么用的,  
  你的机器上有没有装office97?  
  你贴的那段程序其实就是我发表在计算机世界电子版上的文章,  
  我是试好后再发表的,原程序给你再贴一下:  
   
  #include   "Unit1.h"                 //   C++Builder程序片段  
  #include   "vcl\utilcls.h"     //   util   classes实用类说明  
  //     …省写此处原一段代码  
  //     请在此处插入上面提及的四个宏定义语句  
  void   __fastcall   TForm1::Button1Click(TObject   *Sender)  
  {         Variant   Ex,Wb,Sh1;  
            Ex=Variant::CreateObject("Excel.Application");  
            Ex.PG("WorkBooks").PR("Open","c:\\book1.xls");  
            Wb=Ex.PG("ActiveWorkBook");   Sh1=Wb.PG("ActiveSheet");  
            Edit1->Text=Sh1.PG("Cells",1,1).PG("Value");  
            for   (int   i=1;i<=10;i++)  
                  for   (int   j=1;j<=10;j++)  
                        Sh1.PG("Cells",i,j).PS("Value",i*100+j);  
            Wb.PR("Save");   Wb.PR("Close");  
  }  
          使用这种方法的程序运行时,必须保证系统中同时有MS   OFFICE  
   
   
   
   
   
   
  Top

8 楼BCB(天下三分明月夜,二分无赖是扬州)回复于 2001-02-13 08:22:00 得分 0

你试的那段代码运行时出现什么错误?Top

9 楼zzroom(徐子陵)回复于 2001-02-13 13:09:00 得分 0

我装的是office2000,程序报执行OleProcedure函数出错。  
  Top

10 楼BCB(天下三分明月夜,二分无赖是扬州)回复于 2001-02-13 13:45:00 得分 0

可能问题就在这里,我的程序是在office97中  
  试的Top

11 楼BCB(天下三分明月夜,二分无赖是扬州)回复于 2001-02-13 14:01:00 得分 0

我问大家一个问题,下列语句  
    Workbooks.Open   FileName:="C:\rb010212.xls",   Editable:=False  
  怎样改成C++BUILDER的语句?  
  Top

12 楼hejlcs(南国豆)回复于 2001-02-13 14:37:00 得分 0

(1)去掉#include   "excel.h"  
  (2)"\"改为"\\"  
  (3)将  
          Wb.PR("Save","c:\temp\book1.xls");  
          Wb.PR("Close","c:\temp\book1.xls");  
      改为  
          Wb.PR("Save");  
          Wb.PR("Close");  
  (4)c++builder5.0+MSOffice2000下测试OK!Top

13 楼javaw(感觉总会有这么一天)回复于 2001-02-13 15:28:00 得分 0

BCB,看来你是高手,我想问问学习C++Builder有写什么好书?想人家VC的《dissecting   MFC》《inside   Visaul   C++》等,我做了一段时间的CB了,发觉入门较易(我的入门可能与你说的不同:-)),但是要作好还是不很容易,有没有什么好书推荐几本?wangyujia@263.netTop

14 楼zzroom(徐子陵)回复于 2001-02-13 21:00:00 得分 0

多谢BCB,按你说的我已将问题解决。  
  再问多一个问题:  
  通过什么知道MsAccess2000有哪些方法和函数,例如新建一个工作表、新建一个工作薄用什么命令?Top

15 楼BCB(天下三分明月夜,二分无赖是扬州)回复于 2001-02-14 09:38:00 得分 0

其实谈不上是什么高手,好多东西也在学,跟大家探讨着;  
  C++BUILDER   的书不多,全是入门的东西,未见什么好书,  
  全是抄自C++BUILDER的HELP,各种书都看看,日积月累;  
  MSACESS2000没试过,很抱歉  
   
  Top

16 楼BCB(天下三分明月夜,二分无赖是扬州)回复于 2001-02-14 10:00:00 得分 0

BCB5上有一组OFFICE97与OFFICE2000控件,  
  未试过,不知好用不好用?Top

17 楼zzroom(徐子陵)回复于 2001-02-14 13:01:00 得分 0

再次多谢BCB!  
  我上一个问题是这样意思:  
  打开一个已经存在的工作薄用"open",而新建一个工作表、新建一个工作薄又用什么命令?  
  什么地方有MsAccess2000全部方法和函数的资料?   Top

18 楼BCB(天下三分明月夜,二分无赖是扬州)回复于 2001-02-14 14:37:00 得分 0

首先用EXCEL的宏录制功能录制一下,看宏语句是什么?  
      新建一Workbook的宏语句是:  
        Workbooks.Add          
      新建一WorkSheet的宏语句是:  
        Worksheets.Add  
      再到EXECL的BASIC里查一下ADD方法!  
   
  改成BCB:  
          Ex=Variant::CreateObject("Excel.Application");  
          Varint   Wb1=Ex.PG("WorkBooks").FN("Add");  
          Varint   Sh2=Wb1.PG("WorkSheets").FN("Add");  
  试一试,若不行就将其中的   FN改PR再试试  
   
   
           
  Top

19 楼BCB(天下三分明月夜,二分无赖是扬州)回复于 2001-02-15 11:06:00 得分 0

最近我也在编读Excel表格,对不完善地方,有一点改动,供参考:  
   
   
  void   __fastcall   TForm1::Button1Click(TObject   *Sender)  
  {         Variant   Ex,Wb,Sh1;  
            Ex=Variant::CreateObject("Excel.Application");  
            if   (VarIsEmpty(Ex))  
                  {  
                        ShowMessage("系统没有   Ms   Excel   !");  
                        return;  
                  }  
            Ex.PS("Visible",false);               //   Excel   是否可见  
            Ex.PS("DisplayAlerts",false);   //   是否要出现警告  
            Ex.PG("WorkBooks").PR("Open","c:\\book1.xls");  
            Wb=Ex.PG("ActiveWorkBook");       //   工作薄对象  
            Sh1=Wb.PG("ActiveSheet");           //   工作表对象  
            Edit1->Text=Sh1.PG("Cells",1,1).PG("Value");  
            for   (int   i=1;i<=10;i++)  
                  for   (int   j=1;j<=10;j++)  
                        Sh1.PG("Cells",i,j).PS("Value",i*100+j);  
            Wb.PR("Save");   Wb.PR("Close");//   关闭工作薄                        
            Ex.PR("Quit");                                 //   退出Ms   Excel  
  }  
  Top

20 楼zzroom(徐子陵)回复于 2001-02-15 13:31:00 得分 0

再问BCB:  
        为何用FN?我曾经用过PR(“add"),不行。现在去试试FN。  
        再次多谢!Top

21 楼BCB(天下三分明月夜,二分无赖是扬州)回复于 2001-02-15 14:04:00 得分 0

我也糊里糊涂,没有资料可查,  
  有返回值的可能就要FN,Top

22 楼zzroom(徐子陵)回复于 2001-02-15 23:21:00 得分 0

请大家各抒己见!Top

23 楼zzroom(徐子陵)回复于 2001-02-16 10:31:00 得分 0

打开一个已经存在的工作薄用"open",而新建一个工作表、新建一个工作薄又用什么命令?  
  什么地方有MsAccess2000全部方法和函数的资料?   Top

24 楼BCB(天下三分明月夜,二分无赖是扬州)回复于 2001-02-16 10:37:00 得分 0

首先用EXCEL的宏录制功能录制一下,看宏语句是什么?  
      Top

25 楼zzroom(徐子陵)回复于 2001-02-16 23:21:00 得分 0

致BCB:  
        再次多谢你!  
        yhec是你的邮箱吗?我可否直接发信给你?可告诉我你的OICQ吗?  
        Email:   zzroom@21cn.comTop

26 楼zzroom(徐子陵)回复于 2001-02-17 12:45:00 得分 0

致BCB:  
      再次多谢你!  
      yhec是你的邮箱吗?我可否直接发信给你?可告诉我你的OICQ吗?  
      Email:   zzroom@21cn.com   Top

27 楼BCB(天下三分明月夜,二分无赖是扬州)回复于 2001-02-17 15:54:00 得分 0

yes  
  17461273  
  Top

相关问题

  • 表格存取为Excel文件求助
  • ●400分的问题 ●表格存取为Excel文件求助
  • 急!!!excel表格
  • excel表格
  • ado如何存取excel?
  • 用ADO存取Excel文件
  • 打开Excel表格
  • 在Applet中实现用表格对数据进行存取
  • 前端excel存取和显示
  • 前端excel存取和显示

关键词

  • excel
  • olepropertyget
  • mssheet
  • msexcel
  • linesing
  • pg
  • opendialog
  • tform
  • wb
  • xls

得分解答快速导航

  • 帖主:zzroom
  • BCB

相关链接

  • CSDN Blog
  • 技术文档
  • 代码下载
  • 第二书店
  • 读书频道

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo