将数据库中的内容导入到excel

发表于:2003-08-05 11:53:59
请问用BCB怎么实现SQL2000的数据导出到Excel里面呢?还有类似将Excel里的数据导入到数据库中呢?
 
 
  • 对我有用[0]
  • 丢个板砖[0]
  • 引用
  • 举报
  • 管理
  • TOP
回复次数: 25
  • duduwolf
  • (嘟嘟狼)
  • 等 级:
#1楼 得分:20回复于:2003-08-05 12:10:55
给你一个我自己用的将数据库中的内容导入到listview和listview中的内容导入到excel的两个函数 
listview-> excel 
void   ImportExcel(TListView   *sListView) 

    Variant   ex,newxls,sh; 
    try 
    { 
        ex=CreateOleObject( "Excel.Application ");//启动Excel 
        ex.OlePropertySet( "Visible ",(Variant)true);   //使Excel启动后可见 
        newxls=(ex.OlePropertyGet( "Workbooks ")).OleFunction( "Add ");//新建一个工作薄 
        sh=newxls.OlePropertyGet( "ActiveSheet "); 
    } 
    catch(...) 
    { 
        MessageBox(Application-> Handle, "启动Excel出错,可能由于Excel没有正确安装! ", "错误 ",MB_ICONERROR); 
        return;         
    } 
    //sh.OlePropertyGet( "Cells ",1,6/*任意的常数*/).OlePropertySet( "Value ", "aaa "); 
    ex.OlePropertySet( "Caption ", "兰州电信终端设备销售公司报表 "); 
    if(sListView-> Items-> Count==0)return; 
    else 
    { 
        sh.OlePropertyGet( "Cells ").OlePropertyGet( "Font ").OlePropertySet( "Size ",11); 
        for(int   i=0;i <sListView-> Columns-> Count;i++) 
        { 
            sh.OlePropertyGet( "Cells ",1,i+1).OlePropertySet( "Value ",(TVariant)sListView-> Columns-> Items[i]-> Caption); 
            sh.OlePropertyGet( "Cells ",1,i+1).OlePropertyGet( "Font ").OlePropertySet( "Bold ",true);
        } 
        for(int   i=0;i <sListView-> Items-> Count;i++) 
        { 
            for(int   j=0;j <sListView-> Columns-> Count;j++) 
            { 
                if(j==0) 
                    sh.OlePropertyGet( "Cells ",i+2,j+1).OlePropertySet( "Value ",(TVariant)sListView-> Items-> Item[i]-> Caption); 
                else 
                    sh.OlePropertyGet( "Cells ",i+2,j+1).OlePropertySet( "Value ",(TVariant)sListView-> Items-> Item[i]-> SubItems-> Strings[j-1]); 
                Application-> ProcessMessages(); 
            } 
        } 
    } 

adoquery-> listview: 
void   TFrmSellQuery::FreshListView(TADOQuery   *AQy_S,   TListView   *LView_D) 

    LView_D-> Columns-> BeginUpdate(); 
    LView_D-> Items-> BeginUpdate(); 
    LView_D-> Columns-> Clear(); 
    LView_D-> Items-> Clear(); 
    TListItem   *lt; 
    TListColumn   *ln; 
    TCanvas   *cv   =   LView_D-> Canvas; 
    cv-> Font-> Size   =   11; 
    ln   =   LView_D-> Columns-> Add(); 
    ln-> Caption   =   "编号 "; 
    ln-> Width   =   60; 
    int   iWidth[1000]; 
    for(int   i=0;i <AQy_S-> Fields-> Count;i++) 
    { 
        ln   =   LView_D-> Columns-> Add(); 
        ln-> Caption   =   AQy_S-> Fields-> Fields[i]-> FieldName; 
        iWidth[i+1]   =   cv-> TextWidth(ln-> Caption)   +   30; 
        ln-> Width   =   iWidth[i+1]; 
        LView_D-> Columns-> Items[i+1]-> Width   =   iWidth[i+1]; 
    } 
    while(!AQy_S-> Eof) 
    { 
        lt   =   LView_D-> Items-> Add(); 
        lt-> Caption   =   IntToStr(AQy_S-> RecNo); 
        lt-> ImageIndex   =   -1; 
        for(int   i=0;i <AQy_S-> Fields-> Count;i++) 
        { 
            if(iWidth[i+1] <cv-> TextWidth(AQy_S-> Fields-> Fields[i]-> AsString)   +   30) 
            { 
                iWidth[i+1]   =   cv-> TextWidth(AQy_S-> Fields-> Fields[i]-> AsString)   +   30; 
                LView_D-> Columns-> Items[i+1]-> Width   =   iWidth[i+1]; 
            } 
            lt-> SubItems-> Add(AQy_S-> Fields-> Fields[i]-> AsString); 
        } 
        AQy_S-> Next(); 
    } 
    LView_D-> Columns-> EndUpdate(); 
    LView_D-> Items-> EndUpdate(); 

 
  • 对我有用[0]
  • 丢个板砖[0]
  • 引用
  • 举报
  • 管理
  • TOP
精华推荐: 300分征求一个文件格式的设计思路
  • lihongxing2002
  • (潇洒)
  • 等 级:
#2楼 得分:0回复于:2003-08-05 15:07:05
类似的,把Excel里面的数据存到数据库的没有啊。而且你的例子里面好像没有指定Excel文件的名称,还有提交保存啊
 
  • 对我有用[0]
  • 丢个板砖[0]
  • 引用
  • 举报
  • 管理
  • TOP
精华推荐: [推荐]最新的boost中文文档
  • lihongxing2002
  • (潇洒)
  • 等 级:
#3楼 得分:0回复于:2003-08-06 11:52:40
还有保存到的路径也没有啊
 
  • 对我有用[0]
  • 丢个板砖[0]
  • 引用
  • 举报
  • 管理
  • TOP
精华推荐: BCB在COM中如何处理javascript脚本传递的数组
  • duduwolf
  • (嘟嘟狼)
  • 等 级:
#4楼 得分:0回复于:2003-08-06 12:08:38
我这个函数直接就打开了一个excel,然后将数据显示在excel里面,如果你想要程序自动保存成xls格式的话你可以不要这句ex.OlePropertySet( "Visible ",(Variant)true);   //使Excel启动后可见 
我在给你几篇文章,你保存好,以后一定能用得到:) 
(一) 
要在应用程序中控制Excel2000的运行,首先必须在编制自动化客户程序时使其头文件要包含Comobj.hpp和Utilcls.h。 
即:#include <Comobj.hpp> 
#include <Utilcls.h> 
C++   Builder开发者把Excel自动化对象的功能包装在下面的四个Ole   Object   Class函数中,应用人员可以很方便地进行调用。 
设置对象属性:Variant     OlePropertySet(属性名,参数……); 
                获得对象属性:void     OlePropertyGet(属性名,参数……); 
                调用对象方法:1)   Variant     OleFunction(函数名,参数……); 
                                        2)   void     OleProcedure(过程名,参数……); 
  C++   Builder中使用OLE控制Excel2000,必须掌握Excel2000的自动化对象及Microsoft   Word   Visual   Basic帮助文件中的关于Excel的对象、方法和属性。对象是一个Excel元素,属性是对象的一个特性或操作的一个方面,方法是对象可以进行的动作。 
1、Excel中常用的对象是:Application,Workbooks,Worksheets等。 
(1)   创建应用对象:如: 
Variant   ex; 
ex=Variant::CreateObject   ( "Excel.Application "); 
          或者   ex=CreateOleObject   ( "Excel.Application "); 
(2)   创建工作簿对象: 
Variant   wb; 
wb=ex.OlePropertyGet( "ActiveWorkBook "); 
(3)   创建工作表对象: 
Variant   sheet; 
sheet=wb.OlePropertyGet( "ActiveSheet "); 
(4)   创建区域对象: 
Variant   range; 
range=sheet.OlePropertyGet( "Range ", "A1:A10 ");   
2、常用的属性操作: 
(1)新建EXCEL文件: 
(a):新建系统模板的工作簿 
ex.OlePropertyGet( "workbooks ").OleFunction( "Add ")             //默认工作簿 
ex.OlePropertyGet( "workbooks ").OleFunction( "Add ",1)       //单工作表 
ex.OlePropertyGet( "workbooks ").OleFunction( "Add ",2)       //图表     
ex.OlePropertyGet( "workbooks ").OleFunction( "Add ",3)       //宏表   
ex.OlePropertyGet( "workbooks ").OleFunction( "Add ",4)       //国际通用宏表 
ex.OlePropertyGet( "workbooks ").OleFunction( "Add ",5)       //与默认的相同 
ex.OlePropertyGet( "workbooks ").OleFunction( "Add ",6)       //工作簿且只有一个表 
(b):新建自己创建的模板的工作簿 
ex.OlePropertyGet( "workbooks ").OleFunction( "Add ", "C:\\WINDOWS\\Profiles\\test2\\Application   Data\\Microsoft\\Templates\\result.xlt ");     //   后面写上模板的完全路径,注意“\\” 
(2)打开工作簿:   
ex.OlePropertyGet( "workbooks ").OleFunction( "open ", "路径名.xls ")     
(3)保存工作簿: 
wb.OleFunction( "Save ");   //表格保存 
              wb..OleFunction( "SaveAs ", "文件名 ");   //表格保存为,文件路径注意用“\\” 
(4)退出EXCEL: 
ex.OleFunction   ( "Quit "); 
(5)设置字体: 
    (a):设置单元格字体 
sheet.OlePropertyGet( "Cells ",1,1).OlePropertyGet( "Font ").OlePropertySet( "Name ", "隶书 "); 
            sheet.OlePropertyGet( "Cells ",2,3).OlePropertyGet( "Font ").OlePropertySet( "size ",28); 
    (b):设置所选区域字体 
range.OlePropertyGet( "Cells ").OlePropertyGet( "Font ").OlePropertySet( "size ",28);             range.OlePropertyGet( "Cells ").OlePropertyGet( "Font ").OlePropertySet( "Color ", 
RGB(0,0,255)); 
          其中参数的设置: 
                Font---Name   :     “隶书”                               //字体名称 
                      ----Size   :         12                                     //字体大小 
                      ----Color   :     RGB(*,*,*)                       //颜色 
                      -----Underline   :   true/false                       //下划线 
                      -----Italic:       true/false                           //斜体 
(6)单元格的合并: 
(a)   range1=sheet.OlePropertyGet( "Range ",   "A1:A2 ");       //A1和A2单元格合并 
(b)   AnsiString   Str= "A "+IntToStr(j)+ ": "+ "C "+IntToStr(j); 
                range1=sheet.OlePropertyGet( "Range ",Str);       //可以用变量控制单元格合并 
range1.OleFunction( "Merge "   ,   false); 
(7)赋值语句: 
(a):指定单元格赋值 
sheet.OlePropertyGet( "Cells ",3,6).OlePropertySet( "Value ",str);   
            sheet.OlePropertyGet( "Cells ",j,1).OlePropertySet( "Value ", "共查到记录: "+IntToStr(j-6)); 
(b):所选区域单元格赋值 
range.OlePropertyGet( "Cells ").OlePropertySet( "Value ",10);           
(c):所选区域行赋值 
range.OlePropertyGet( "Rows ",1).OlePropertySet( "Value ",1234);     
(d):工作表列赋值 
sheet.OlePropertyGet( "Columns ",1).OlePropertySet( "Value ",1234);   
(8)取值语句: 
AnsiString   abc=sheet.OlePropertyGet( "Cells ",120,1).OlePropertyGet( "Value "); 
(9)区域选择: 
range.OlePropertyGet( "Cells ").OleFunction( "Select "); 
(10)窗口属性: 
(a)显示属性 
ex.OlePropertySet( "Windowstate ",3);                   //最大化显示 
参数     1---------xlNormal                                     //正常显示 
2---------xlMinimized                                 //最小化显示 
3---------xlMaximized                                 //最大化显示 
(b)状态栏属性 
ex.OlePropertySet   ( "StatusBar ", "您好,请您稍等。正在查询! "); 
ex.OlePropertySet   ( "StatusBar ",   false);           //还原成默认值 
(c)标题属性: 
                                ex.OlePropertySet( "Caption ", "查询系统 "); 
 
  • 对我有用[0]
  • 丢个板砖[0]
  • 引用
  • 举报
  • 管理
  • TOP
精华推荐: C++Builder及VC的DLL相互调用(刚刚测试通过,高兴&&散分)
  • duduwolf
  • (嘟嘟狼)
  • 等 级:
#5楼 得分:10回复于:2003-08-06 12:12:08
这个不够用你给我发消息留下mail,我给你发过来,太多了
 
  • 对我有用[0]
  • 丢个板砖[0]
  • 引用
  • 举报
  • 管理
  • TOP
精华推荐: 【讨论有分】求bcb代码加密的方法和思想
  • Tiejun_Chenfang用户头像
  • Tiejun_Chenfang
  • 等 级:
#6楼 得分:0回复于:2003-08-06 13:42:14
duduwolf(嘟嘟狼)   的果然厉害! 

不过要是把excel当成数据库,sheet当成表,用ado的话简单些。
 
  • 对我有用[0]
  • 丢个板砖[0]
  • 引用
  • 举报
  • 管理
  • TOP
  • foxbaby用户头像
  • foxbaby
  • (懒骨头)
  • 等 级:
#7楼 得分:0回复于:2003-08-06 14:00:49
俺的信箱是[email protected],duduwolf(嘟嘟狼)能给俺发一份吗?非常感谢!
 
  • 对我有用[0]
  • 丢个板砖[0]
  • 引用
  • 举报
  • 管理
  • TOP
  • lihongxing2002
  • (潇洒)
  • 等 级:
#8楼 得分:0回复于:2003-08-06 16:48:03
怎么没有人回答我如何判断Excel文件里有多少行,多少列?我的问题还没解决完呢?
 
  • 对我有用[0]
  • 丢个板砖[0]
  • 引用
  • 举报
  • 管理
  • TOP
  • lihongxing2002
  • (潇洒)
  • 等 级:
#9楼 得分:0回复于:2003-08-06 16:49:05
谢谢了。我的邮箱:[email protected]
 
  • 对我有用[0]
  • 丢个板砖[0]
  • 引用
  • 举报
  • 管理
  • TOP
  • gloom用户头像
  • gloom
  • (苍狗白云)
  • 等 级:
  • 2

#10楼 得分:0回复于:2003-08-06 17:31:50
我也需要,请发一份到[email protected] 
谢谢
 
  • 对我有用[0]
  • 丢个板砖[0]
  • 引用
  • 举报
  • 管理
  • TOP
  • RamjetZhang
  • (万花从中一点红,玉树临风王小桃)
  • 等 级:
#11楼 得分:5回复于:2003-08-06 21:37:12
我们的做法是:坚决不使用office的ole自动化 
使用ado连接,表名字:   $shee1,$yoursheet,两边要加方括号: 
[$shhet1],   [$yoursheet]. 
但是要write比较困难,读还是可以的。
 
  • 对我有用[0]
  • 丢个板砖[0]
  • 引用
  • 举报
  • 管理
  • TOP
  • zurong用户头像
  • zurong
  • (★★★★★)
  • 等 级:
#12楼 得分:0回复于:2003-08-06 22:35:31
呵呵,坚决使用ADO,支持!!!
 
  • 对我有用[0]
  • 丢个板砖[0]
  • 引用
  • 举报
  • 管理
  • TOP
  • lihongxing2002
  • (潇洒)
  • 等 级:
#13楼 得分:0回复于:2003-08-07 13:11:28
to:   RamjetZhang(我曾经不是一头猪)   
用ADO该怎么做呢?有具体的例子吗?包括怎么连接Excel,等等。发一个过来
 
  • 对我有用[0]
  • 丢个板砖[0]
  • 引用
  • 举报
  • 管理
  • TOP
  • cxlfreefly用户头像
  • cxlfreefly
  • (怒涛)
  • 等 级:
#14楼 得分:0回复于:2003-08-08 10:02:17
老兄是否也可以给我一份呢。先表示感谢 
[email protected]
 
  • 对我有用[0]
  • 丢个板砖[0]
  • 引用
  • 举报
  • 管理
  • TOP
  • lo0P用户头像
  • lo0P
  • (轮回)
  • 等 级:
#15楼 得分:0回复于:2003-08-08 15:29:56
 
  • 对我有用[0]
  • 丢个板砖[0]
  • 引用
  • 举报
  • 管理
  • TOP
  • RamjetZhang
  • (万花从中一点红,玉树临风王小桃)
  • 等 级:
#16楼 得分:0回复于:2003-08-08 20:00:21
用ODBC里面的excel驱动。
 
  • 对我有用[0]
  • 丢个板砖[0]
  • 引用
  • 举报
  • 管理
  • TOP
  • nightdays
  • (宏观)
  • 等 级:
#17楼 得分:0回复于:2003-08-08 20:14:04
老兄,我也想要一份,多谢了. 
[email protected]
 
  • 对我有用[0]
  • 丢个板砖[0]
  • 引用
  • 举报
  • 管理
  • TOP
  • lihongxing2002
  • (潇洒)
  • 等 级:
#18楼 得分:0回复于:2003-08-09 20:03:36
to:   RamjetZhang(我曾经不是一头猪)   
我还是不太明白到底该怎么做,给个例子行吗?先谢谢了
 
  • 对我有用[0]
  • 丢个板砖[0]
  • 引用
  • 举报
  • 管理
  • TOP
  • RamjetZhang
  • (万花从中一点红,玉树临风王小桃)
  • 等 级:
#19楼 得分:5回复于:2003-08-09 23:44:48
在ODBC数据源里面连好,(odbcad32.exe),然后用ADO或者BDE,随便做。 
不比文本数据库好到哪里去。记住表名前面有个$的(莫名其妙的设计),所以引用的时候是[$sheet1],用table可能连不上,用query没问题。
 
  • 对我有用[0]
  • 丢个板砖[0]
  • 引用
  • 举报
  • 管理
  • TOP
  • tiegerium用户头像
  • tiegerium
  • (/*唐秀观*/)
  • 等 级:
#20楼 得分:0回复于:2003-08-10 08:50:59
建议用ole自动化,ADO连接Excel必须预先建好Excel文件,而且把数据写入Excel较难。
 
  • 对我有用[0]
  • 丢个板砖[0]
  • 引用
  • 举报
  • 管理
  • TOP
  • whp320
  • (征服者)
  • 等 级:
#21楼 得分:0回复于:2003-08-10 11:08:00
我觉得这个问题很有用处。保留。
 
  • 对我有用[0]
  • 丢个板砖[0]
  • 引用
  • 举报
  • 管理
  • TOP
  • RamjetZhang
  • (万花从中一点红,玉树临风王小桃)
  • 等 级:
#22楼 得分:10回复于:2003-08-10 23:27:18
楼主: 
找到一个VC的, 
http://www.csdn.net/develop/article/14/14926.shtm 
直接通过ODBC读、写Excel表格文件 
译者:徐景周 

              想要通过ODBC直接读、写Excel表格文件,首先,应确保ODBC中已安装有Excel表格文件的驱动 "MICROSOFT   EXCEL   DRIVER   (*.XLS) "。然后,可根据下面步骤进行: 
1.                   在StdAfx.h文件中加入: 
include   <afxdb.h>   
include   <odbcinst.h> 

2.                   通过ODBC直接创建Excel文件(暂定文件名:Demo.xls) 
//创建并写入Excel文件 
void   CRWExcel::WriteToExcel() 

    CDatabase   database; 
    CString   sDriver   =   "MICROSOFT   EXCEL   DRIVER   (*.XLS) ";   //   Excel安装驱动 
    CString   sExcelFile   =   "c:\\demo.xls ";                             //   要建立的Excel文件 
    CString   sSql;         
    TRY 
    {
 
  • 对我有用[0]
  • 丢个板砖[0]
  • 引用
  • 举报
  • 管理
  • TOP
  • Rurama
  • (佩华)
  • 等 级:
#23楼 得分:0回复于:2003-08-11 21:17:26

#ifndef   OperateExcel2kH 
#define   OperateExcel2kH 
#include   <Classes.hpp> 
#include   <Controls.hpp> 
#include   <StdCtrls.hpp> 

#include   "vcl\utilcls.h " 

class   OperateExcel 

protected: 
      Variant   ExcelApp,Workbook,WorkSheet,Cell; 
public: 
        Variant   &   excelApp(){}; 
        Variant   &   workbook(){return     Workbook;} 
        Variant   &   workSheet(){return   WorkSheet;} 
        Variant   &   cell(){return   Cell;} 
        OperateExcel(){   } 
        ~OperateExcel(){} 
        AnsiString   str_DataArray1D[100]; 
        AnsiString   str_DataArray2D[100][100]; 
        
public: 
        virtual   void   OpenExcel(); 
        virtual   void   OpenExcelFile(AnsiString   str_ExcelFileName,bool   Visibled=true,bool   IfReadOnly=false); 
                                        /*打开一个excel文件(文件路径及名称,是否可视,是否只读)*/ 
        virtual   void   SetCellValue(int   iRowNO,   int   iColumnNO,   Variant   Value);//给单元格赋值 
        virtual   void   SetCellValue(int   iRowNO,   int   iColumnNO,   char*   Value);   //给单元格赋值 
        virtual   void   WorkBookSave();                                                                               //存盘当前路径 
        virtual   void   WorkBookSaveAs(AnsiString   str_FileName);                             //文件另存 
        virtual   void   WorkBookClose();                                                                               //关闭文件 
        virtual   void   ResetArray1D(); 
        virtual   void   ResetArray2D(); 
        virtual   void   SetRowValue(int   iRowNO,   int   iColumnNO,   int   iElementsNum);     //给某行赋值   (起始单元格下标,元素个数) 
        virtual   void   SetColumnValue(int   iRowNO,   int   iColumnNO,   int   iElementsNum);//给某列赋值   (起始单元格下标,元素个数) 
        virtual   AnsiString   GetValueFromCell(int   iRowNO,   int   iColumnNO);//从某一单元格取值 
        virtual   bool   CellMerged(int   iRowNO,int   iColumnNO); 
        virtual   int   GetUsedRowCount(); 
        virtual   int   GetUsedColCount(); 
        virtual   void   QuitExcel(); 
}; 

class   OperateExcel_v2:public   OperateExcel 

public: 
        void   ReadValueByRow(int   iTop,   int   iLeft,   int   iBottom,   int   iRight); 
        void   virtual   SendDataToDataSet(TDataSet   *   pDataSet,int   iColumnsNumber,int   iRowsNumber); 

        

}; 


#endif
 
  • 对我有用[0]
  • 丢个板砖[0]
  • 引用
  • 举报
  • 管理
  • TOP
  • Rurama
  • (佩华)
  • 等 级:
#24楼 得分:0回复于:2003-08-11 21:18:08
#include   <vcl.h> 
#pragma   hdrstop 
#include   "OperateExcel2k.h " 

void   OperateExcel::OpenExcel() 

        ExcelApp   =Variant::CreateObject( "Excel.Application "); 
        ExcelApp.OlePropertySet   ( "visible ",true); 
        Workbook=ExcelApp.OlePropertyGet( "ActiveWorkBook "); 

//--------------------------------------------------------------------------- 
void   OperateExcel::OpenExcelFile(AnsiString   str_ExcelFileName,bool   Visibled,bool   IfReadOnly) 

        //创建excel对象 

        ExcelApp   =Variant::CreateObject( "Excel.Application "); 

        ExcelApp.OlePropertyGet( "WorkBooks ").OleProcedure( "Open ",str_ExcelFileName,NULL,IfReadOnly); 
        ExcelApp.OlePropertySet   ( "visible ",Visibled); 
        Workbook=ExcelApp.OlePropertyGet( "ActiveWorkBook "); 
        WorkSheet=Workbook.OlePropertyGet( "ActiveSheet "); 

//--------------------------------------------------------------------------- 

void   OperateExcel::SetCellValue(int   iRowNO,   int   iColumnNO,   Variant   Value) 

        WorkSheet.OlePropertyGet( "Cells ",iRowNO,iColumnNO).OlePropertySet( "Value ",Value); 

//--------------------------------------------------------------------------- 
void   OperateExcel::SetCellValue(int   iRowNO,   int   iColumnNO,   char*   Value) 

        WorkSheet.OlePropertyGet( "Cells ",iRowNO,iColumnNO).OlePropertySet( "Value ",Value); 

//--------------------------------------------------------------------------- 
void   OperateExcel::WorkBookSave() 

        Workbook.OleProcedure( "Save "); 

//--------------------------------------------------------------------------- 
void   OperateExcel::WorkBookClose() 

        Workbook.OleProcedure( "Close "); 

//--------------------------------------------------------------------------- 
void   OperateExcel::WorkBookSaveAs(AnsiString   str_FileName) 

        Workbook.OleProcedure( "Close ",str_FileName); 

//--------------------------------------------------------------------------- 
void   OperateExcel::ResetArray1D() 

      memset(str_DataArray1D,   0,   16   ); 

//--------------------------------------------------------------------------- 
void   OperateExcel::ResetArray2D() 

      memset(str_DataArray2D,   0,   16   ); 

//--------------------------------------------------------------------------- 
void   OperateExcel::SetRowValue(int   iRowNO,   int   iColumnNO,   int   iElementsNum) 

        int   i=0; 
        while(i <iElementsNum) 
        { 
                SetCellValue(iRowNO,i,str_DataArray1D[i]); 
                i++; 
        } 

//--------------------------------------------------------------------------- 
void   OperateExcel::SetColumnValue(int   iRowNO,   int   iColumnNO,   int   iElementsNum) 

        int   i=0; 
        while(i <iElementsNum) 
        { 
                SetCellValue(i,iColumnNO,str_DataArray1D[i]); 
                i++; 
        } 

//--------------------------------------------------------------------------- 
AnsiString   OperateExcel::GetValueFromCell(int   iRowNO,   int   iColumnNO) 

        AnsiString   str_Value; 
        str_Value=WorkSheet.OlePropertyGet( "cells ",iRowNO,iColumnNO).OlePropertyGet( "Value "); 
        return   str_Value; 

//--------------------------------------------------------------------------- 
bool   OperateExcel::CellMerged(int   iRowNO,int   iColumnNO) 

        return   WorkSheet.OlePropertyGet( "Cells ",iRowNO,iColumnNO).OlePropertyGet( "MergeCells "); 

//--------------------------------------------------------------------------- 
void   OperateExcel_v2::ReadValueByRow(int   iTop,   int   iLeft,   int   iBottom,   int   iRight) 

        int   i=0; 
        int   iCount=0; 
        AnsiString   temp; 
        for(int   iRowNO=iTop;iRowNO <=iBottom;iRowNO++,i++) 
        { 
                int   iColumnNO=iLeft; 
                int   j=0; 
                while(iColumnNO <=iRight) 
                { 
                        temp=GetValueFromCell(iRowNO,iColumnNO)   ; 
                        str_DataArray2D[i][j]=temp; 
                        if(CellMerged(iRowNO,iColumnNO)==false) 
                          {j++;iColumnNO++;} 
                        else   if(CellMerged(iRowNO,iColumnNO)==true) 
                        { 
                                iCount=WorkSheet.OlePropertyGet( "Cells ",iRowNO,iColumnNO).OlePropertyGet( "MergeArea ").OlePropertyGet( "Count "); 
                                for(int   num=0;num <iCount;num++,j++,iColumnNO++) 
                                str_DataArray2D[i][j]=temp+ ": "+AnsiString(num); 
                        } 
                } 
        } 

//--------------------------------------------------------------------------- 
void   OperateExcel_v2::SendDataToDataSet(TDataSet*   pDataSet,int   iColumnsNumber,int   iRowsNumber)

        for(int   iRowNo=0;iRowNo <iRowsNumber;iRowNo++) 
        { 
                pDataSet-> Insert(); 
                for(int   iColumnNo=1;iColumnNo <=iColumnsNumber;iColumnNo++) 
                { 
                        pDataSet-> Fields-> FieldByNumber(iColumnNo)-> Value=str_DataArray2D[iRowNo][iColumnNo-1]; 

                } 
        } 
        pDataSet-> Post(); 

//--------------------------------------------------------------------------- 
int     OperateExcel::GetUsedRowCount() 

      return   WorkSheet.OlePropertyGet( "UsedRange ").OlePropertyGet( "Rows ").OlePropertyGet( "Count "); 


//--------------------------------------------------------------------------- 
int   OperateExcel::GetUsedColCount() 

      return   WorkSheet.OlePropertyGet( "UsedRange ").OlePropertyGet( "Columns ").OlePropertyGet( "Count "); 

//--------------------------------------------------------------------------- 
void   OperateExcel::QuitExcel() 

        if(!ExcelApp.IsEmpty()) 
        ExcelApp.OleProcedure( "Quit ")     ; 

//---------------------------------------------------------------------------
 
  • 对我有用[0]
  • 丢个板砖[0]
  • 引用
  • 举报
  • 管理
  • TOP
  • Rurama
  • (佩华)
  • 等 级:
#25楼 得分:0回复于:2003-08-11 21:18:29
//Write   Excel 
        try 
        { 
                DataTotal-> ADOQueryExBcs-> Close(); 
                DataTotal-> ADOQueryExBcs-> SQL-> Clear(); 
                DataTotal-> ADOQueryExBcs-> SQL-> Add( "Select   *   from   ExName "); 
                DataTotal-> ADOQueryExBcs-> Open(); 
                DataTotal-> ADOQueryExBcs-> First(); 
                while   (   !DataTotal-> ADOQueryExBcs-> Eof   ) 
                { 
                        AnsiString   strDataName,strSQL,strExName; 
                        strExName   =   Trim(DataTotal-> ADOQueryExBcs-> FieldByName( "c_ex_name ")-> AsString); 
                        strDataName   =   Trim(DataTotal-> ADOQueryExBcs-> FieldByName( "c_data_name ")-> AsString); 

                        strSQL   =   "Select   *   from   "+strDataName+ "   order   by   totid "; 
                        DataTotal-> ADOQueryExData-> Close(); 
                        DataTotal-> ADOQueryExData-> SQL-> Clear(); 
                        DataTotal-> ADOQueryExData-> SQL-> Add(strSQL); 
                        DataTotal-> ADOQueryExData-> Open(); 
                        DataTotal-> ADOQueryExData-> First(); 
                        AnsiString   str; 

                        DataTotal-> ADOQueryExData-> First(); 
                        int   iLineR   =   DataTotal-> ADOQueryExData-> RecordCount;   //行 
                        int   iLineL   =   DataTotal-> ADOQueryExData-> FieldCount;   //列 
                        iLineL--; 

                        int   iLineRGo,iLineLGo,iLineRExName; 
                        iLineRGo   =   2; 
                        iLineLGo   =   1; 
                        AnsiString   strDataAdd   ; 

                        str   =   ExtractFileDir(Application-> ExeName); 
                        str   += "\\Excelres\\ "+strExName; 
                        AnsiString   strDataHtitle   =   Trim(DataTotal-> ADOQueryExData-> Fields-> FieldByName( "Htitle ")-> AsString); 
                        AnsiString   strExcelHtitle   ; 
                        myExcel-> OpenExcelFile(str,false,false); 
                        DataTotal-> ADOQueryExData-> First(); 
                        for   (   int   i=0;i <iLineR;i++   ) 
                        { 
                                for   (   int   j=3;j <=iLineL+1;j++   ) 
                                { 
                                        if   (   Trim(DataTotal-> ADOQueryExData-> Fields-> FieldByNumber(j)-> AsString)!= " "   ) 
                                        { 
                                                strDataAdd   =   DataTotal-> ADOQueryExData-> Fields-> FieldByNumber(j)-> AsString; 

                                                myExcel-> SetCellValue(i+2,j-2,strDataAdd.c_str()); 
                                                myExcel-> WorkBookSave(); 
                                        } 
                                        else 
                                        { 
                                                if   (   j   ==   3   ) 
                                                { 
                                                        strDataAdd   =   "   "; 
                                                } 
                                                else 
                                                { 
                                                        strDataAdd   =   0; 
                                                } 
                                                myExcel-> SetCellValue(i+2,j-2,strDataAdd.c_str()); 
                                                myExcel-> WorkBookSave(); 
                                        } 
                                } 
                                DataTotal-> ADOQueryExData-> Next(); 
                        } 
                        myExcel-> QuitExcel(); 
                        DataTotal-> ADOQueryExBcs-> Next(); 
                        f_progress-> progress-> Progress++; 
                } 
                AnsiString   str1   =   ExtractFileDir(Application-> ExeName); 
                str1   += "\\Excelres\\ "; 
                str1   =   "数据汇总完毕,结果存于 "+str1+ "中 "; 
                Application-> MessageBox(str1.c_str(), "信息提示 ",MB_ICONINFORMATION+MB_OK   ); 
        } 
        catch(...) 
        { 
                DataTotal-> ADOQueryExBcs-> Close(); 
                DataTotal-> ADOQueryExData-> Close(); 
                myExcel-> QuitExcel(); 
        }

你可能感兴趣的:(数据库,工作,ListView,Excel,Microsoft,application)