如何用delphi操作一张excel的表?
要求:把指定的excel表导出为文本文件,并且能操作表,删除不需要的内容后导出为一个文本文件。
请问如何实现?
另外,如果是一个access文件希望使用类似access的向导导入一个文本文件到数据库文件,那么又如何实现???

解决方案 »

  1.   

    我以前只用VB写过一个excel和access互相转化和计算的程序,不用通过中介文本文件。如果你要用文本文件的话,那对文本格式要求比较高,要不然会出错
      

  2.   

    你看看MSDN中vbaxl10这个文件,好像是这个。
      

  3.   

    [转载]在DELPHI中使用ADO直接访问Excel数据文件
    1.设置ADOConnection的ConnectionString
        构造ConnectionString时,OLE DB的提供者要选择Microsoft Jet 4.0 OLE DB Provider作为ADO的驱动程序。这本来是用于连接Access数据库的驱动程序,但也可打开Excel文件。
        连接的数据库名称当然就是你要打开的Excel文件,注意扩展名是*.xls,而不是*.mdb。
        最关键的一点是,还要设置扩展属性Extended Properties为“Excel 8.0”,否则,测试连接时会报告无法识别数据格式的错误。Extended Properties的属性值在“所有”参数页中输入。
        最后,设置完成后的ConnectionString中的各项参数为:
        Provider=Microsoft.Jet.OLEDB.4.0
        Data Source=MyExcelFile.xls
        Extended Properties=Excel 8.0
        Persist Security Info=False2.设置ADODataSet或ADOTable
        将ADODataSet或ADOTable连接到刚才的ADOConnection。如果不用ADOConnection,也可以参照上面的方法直接设置ADODataSet或ADOTable的ConnectionString属性。
        对于ADODataSet,需要将CommandType属性设置为cmdTableDirect,而对于ADOTable,则将TableDirect属性设置为True。因为,访问Excel文件是直接的数据文件访问,不是通过SQL语句来操作游标访问的。如果不设置直接访问,则系统会报告SQL语句格式错误等信息。
        然后,当你下拉ADODataSet中的CommandText属性或ADOTable的TableName属性时,就可以选择到要打开的工作表了。注意,表名后面多了加一个$符号。
              3.打开ADODataSet或ADOTable
      

  4.   

    要有针对性的导入,例:
    var
      aF: TextFile;
      Buffer: String;
      FieldValue: String;
      I: Integer;
    begin
      AssignFile(aF,'*.txt');
      Reset(aF);
      while not Eof do
      begin
        Readln(aF, Buffer);
        AQuery1.Append;
        for I :=0 to AQuery1.FieldCount -1 do
        begin
          FieldValue :=Copy(Buffer,1, Pos(#9, Buffer));
          Delete(Buffer,1, Pos(#9, Buffer));
          AQuery1.Fields[I].Value :=FieldValue; 
        end;  
        AQuery1.Edit;
        AQuery1.Post;
      end;
      CloseFile(F);  
    end;
      

  5.   

    使用如下方法可以操作一个名为FileName的Excel文件的表名为SheetName的Excel数据
      ADOConnection := TADOConnection.Create(nil);
      ADOConnection.LoginPrompt := False;        ADOConnection.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0; Data Source=' + FileName + ';Extended Properties=Excel 8.0';
      ADOQuery := TADOQuery.Create(nil);
      ADOQuery.Connection := ADOConnection;
      ADOQuery.SQL.Text := 'Select * from [' + SheetName + '$]';
      ADOQuery.Open;
      

  6.   

    不好意思,上面弄掉了一些:
      ADOConnection.LoginPrompt := False;        
      ADOConnection.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;
      Data Source=' + FileName+';Extended Properties=Excel 8.0';
      ADOQuery := TADOQuery.Create(nil);
      ADOQuery.Connection := ADOConnection;
      ADOQuery.SQL.Text := 'Select * from [' + SheetName + '$]';
      ADOQuery.Open;
      

  7.   

    TNNDCSDN,一次只能写两行,我说怎么回事
      

  8.   

    TO: cg1120(代码最优化-§为这世界,添些美丽色彩§)
    如果txt文本有10万条,我觉得导入会很慢的。
    有没有类似access数据导入向导一样的功能?
    大家可以试试,用它的数据向导导入文本,哪怕是十几万条的记录都是刷的一下就进去了,不知道用的什么方式转换的。