我要一段把读取EXCEL文档的代码!

解决方案 »

  1.   

    我要一段把读取EXCEL文档的代码!读到一个容器里!比如memo!或stringgrid
      

  2.   

    1.ole
       try
        xlapp := createoleobject('excel.application');
      except
        showmessage('无法打开Xls文件,请确认已经安装EXCEL!');
        exit;
      end;
      filename := EdtPath.Text;
      xlapp.WorkBooks.Open('E:\TEST.XLS');
      Sheet :=xlapp.workbooks[1].worksheets[1];  
      for i:=1 to sheet.usedRange.Cells.rows.count do   
          memo1.lines.add(sheet.cells[i,2].value)
     
      xlapp:=unassigned;   
    2.直接用ADO.
    with qrySel do
      begin
        ConnectionString :='Provider=Microsoft.Jet.OLEDB.4.0;Data Source= '+ 'e:\test.xls' + ';Extended Properties=Excel 8.0;';
        Close;
        SQL.Clear;
        sql.Add('SELECT * FROM [Sheet1$]');
        try
          Open;
        except
        end;
      end;
      

  3.   

    方法一:用ado
    connectstring:  
        Provider=Microsoft.Jet.OLEDB.4.0;Password="";User  ID=Admin;Data  Source=F:\Leewei\Books\Delphi5\Book3\ADODemos\Excel\forcast.xls;Mode=Share  Deny  None;Extended  Properties=Excel  8.0;Jet  OLEDB:System  database="";Jet  OLEDB:Registry  Path="";Jet  OLEDB:Database  Password="";Jet  OLEDB:Engine  Type=35;Jet  OLEDB:Database  Locking  Mode=0;Jet  OLEDB:Global  Partial  Bulk  Ops=2;Jet  OLEDB:Global  Bulk  Transactions=1;Jet  OLEDB:New  Database  Password="";Jet  OLEDB:Create  System  Database=False;Jet  OLEDB:Encrypt  Database=False;Jet  OLEDB:Don't  Copy  Locale  on  Compact=False;Jet  OLEDB:Compact  Without  Replica  Repair=False;Jet  OLEDB:SFP=False  
    用adotable,直接设置adotable.tabledirect:=true,就可以了。  
    或者在excel中选择所需数据设置一个名称作为一个表名。方法二:用ole
    ///////////////
    procedure  TPPms010.LoadExcelFile(FileName:string);  
    var  
        i,j:  integer;  
        rows,cols:integer;  
        ExcelApp,  WorkBook,  WorkSheet  :  Variant;  
        strLst:Tstringlist;  
    begin  
        inherited;  
        cols:=41;  
        strLst:=  TstringList.Create  ;  
        try  
            ExcelApp  :=  CreateOleObject('Excel.Application');  
        except  
            on  E:EolesysError  do  
            begin  
                DispErr(E.Message);  
                abort;  
            end  
            else  
            begin  
                DispErr('PPMS010-04    Could  not  Create  Excel  Application!');  
                abort;  
            end;  
        end;  
        try  
            try  
                ExcelApp.WorkBooks.Open(edtDir.text,,True);  
                WorkBook:=ExcelApp.ActiveWorkbook;  
                WorkSheet:=WorkBook.ActiveSheet;  
            except  
                DispInf('PPMS010-05  Can''t  open  file!',  MB_OK  +  MB_ICONINFORMATION);  
                abort;  
            end;  
            dmppms010.QryAm_Allocation_head.Append  ;  
            SetHeadValues;  
            rows:=GetSheetRows(WorkSheet);  
            PrgrsBar.Max:=rows;  
            PrgrsBar.step:=1;  
            PrgrsBar.Show;  
            for  i:=1  to  rows  do  
            begin  
                strLst.Clear  ;  
                for  j:=1  to  cols  do  
                    strLst.Add(string(WorkSheet.Cells[i,j]));  
                dmppms010.QryAm_Allocation_Line.Append;  
                SetLineValues(strLst,FileType);  
                PrgrsBar.StepIt  ;  
            end;  
        finally  
            strLst.free;  
            WorkBook.Close;  
            ExcelApp.Quit;  
            ExcelApp:=  unassigned;  
            PrgrsBar.Hide  ;  
        end;  
    end;
      

  4.   

    这个createoleobject是在哪个单元的呢?编绎的时候老是说这个命令未定义。
      

  5.   

    我觉得ADO比较好用 并且对ADO程序员来讲 操作起来更是得心应手
      

  6.   

    非也,还是OLE方法好!我就是想要这样的效果!
    好了,结账!
    多谢 qxj(游民(忘记一切,重新开始)) 和 Delphinus(西瓜大王)
      

  7.   

    TO:alexanda2000(电脑学习者) 这个createoleobject是要引用ComObj单元