我用下面的方式生成个Excel文件,方法如下:     buffList:=TStringList.Create;     for i:=0 to TempQuery.FieldCount-1 do
         str:=str+ tempQuery.Fields[i].FieldName+#9;
     buffList.Add(str);         while not TempQuery.Eof do
         begin
             str:='';
             for i:=0 to TempQuery.FieldCount-1 do
                 str:=str+TempQuery.Fields[i].AsString+#9;
             buffList.Add(str);
             ProgressBar2.Position:=ProgressBar2.Position+1;
             TempQuery.Next;
         end;
         buffList.SaveToFile('c:\Examdata.xls');但是我用ADO去连这个文件时确报错误"外部表不是预期的格式"。连接串是这样的
ADOConncetion.conncetionstring:"Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False;Data Source=C:\Examdata.xls;Extended Properties=Excel 8.0"
用同样的连接串去连接Excel创建的.xls文件却没有问题,这是怎么回事?我用Excel也能打开我用程序创建的.xls文件。Extended Properties属性我改成Excel 4.0、Excel 5.0也试过了都不行。之所以选择上面的方法生成.xls文件是因为它的生成效率比较高,要比用servers组件生成的快。

解决方案 »

  1.   

    ADO能直接连xls文件吗? 以前没听过啊
    连了以后怎么用呢
      

  2.   

    你生成的文件格式不是xls格式
    是一个制表符分隔的txt文件
    Excel打开的时候是根据文件实际格式打开的,叫什么后缀名都可以
      

  3.   

    很有意思的问题,如果不能直接连接,能不能试试通过运行一个宏来导入刚才生成的格式化文本,再保存成XLS,再用ADO连接,相信数据量大的时候,还是要比直接用Server组件生成快一些
      

  4.   

    转贴一篇:.net编程创建 Access 文件和 Excel 文件
    http://blog.joycode.com/ghj/archive/2005/01/12/42861.aspx
    ---------------------------------------------------------------
    方案二、直接生成一个使用间隔符号隔开每一项数据的纯文本文件,但是文件的后缀是 XLS 。注意:这时候,如果你直接用Excel打开这样的文件,没问题,一切正常,但是如果你用ADO.net 读取这个文件的时候,你的链接引擎不应该是Excel,而是文本文件(Microsoft Text Driver)。也就是链接字符串不应该是 
    "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\\aa2.xls;Extended Properties=Excel 8.0;"  
    而应该是下面的方式:OLEDB的方式连接字符串:
    Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\11.txt;Extended Properties='text;HDR=No;FMT=TabDelimited'
    ODBC的方式读TXT字符串写法:
    Driver={Microsoft Text Driver (*.txt; *.csv)};Dbq=C:\\11.txt;Extensions=asc,csv,tab,txt;
      

  5.   

    为什么换成Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\11.txt;Extended Properties='text;HDR=No;FMT=TabDelimited'也不行?
      

  6.   

    OLEDB的方式:
    Provider=Microsoft.Jet.OLEDB.4.0;Data Source=e:\;Extended Properties="text;HDR=No;FMT=TabDelimited"ODBC的方式:
    Provider=MSDASQL.1;Persist Security Info=False;Extended Properties="Driver={Microsoft Text Driver (*.txt; *.csv)};Dbq=E:\;Extensions=asc,csv,tab,txt";Initial Catalog=E:\
      

  7.   

    用select * from book1.txt
    读取*.txt文件没有问题把后缀改成*.xls以后
    用select * from book1.xls
    要报“不能更新。数据库或对象为只读”的错误
    没找到具体解决办法
      

  8.   

    to大头鸟:你去这个地方留个言,我把分一起给你了。
    http://community.csdn.net/Expert/topic/4247/4247690.xml?temp=.0217554
      

  9.   

    to大头鸟:你去这个地方留个言,我把分一起给你了。
    http://community.csdn.net/Expert/topic/4247/4247690.xml?temp=.0217554