一个很值得研究的问题,感兴趣的进来看看

zjh527 2005-09-04 12:01:09
我用下面的方式生成个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组件生成的快。

...全文
199 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
zjh527 2005-09-05
  • 打赏
  • 举报
回复
to大头鸟:你去这个地方留个言,我把分一起给你了。
http://community.csdn.net/Expert/topic/4247/4247690.xml?temp=.0217554
zjh527 2005-09-05
  • 打赏
  • 举报
回复
to大头鸟:你去这个地方留个言,我把分一起给你了。
http://community.csdn.net/Expert/topic/4247/4247690.xml?temp=.0217554
zjh527 2005-09-05
  • 打赏
  • 举报
回复
谢谢sdzeng(大头鸟)
sdzeng 2005-09-05
  • 打赏
  • 举报
回复
用select * from book1.txt
读取*.txt文件没有问题

把后缀改成*.xls以后
用select * from book1.xls
要报“不能更新。数据库或对象为只读”的错误
没找到具体解决办法
sdzeng 2005-09-05
  • 打赏
  • 举报
回复
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:\
yuanchy 2005-09-04
  • 打赏
  • 举报
回复
ADO能直接连xls文件吗? 以前没听过啊
连了以后怎么用呢
zjh527 2005-09-04
  • 打赏
  • 举报
回复
为什么换成Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\11.txt;Extended Properties='text;HDR=No;FMT=TabDelimited'也不行?
sdzeng 2005-09-04
  • 打赏
  • 举报
回复
转贴一篇:.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;
XY.Chen 2005-09-04
  • 打赏
  • 举报
回复
很有意思的问题,如果不能直接连接,能不能试试通过运行一个宏来导入刚才生成的格式化文本,再保存成XLS,再用ADO连接,相信数据量大的时候,还是要比直接用Server组件生成快一些。。。
sdzeng 2005-09-04
  • 打赏
  • 举报
回复
你生成的文件格式不是xls格式
是一个制表符分隔的txt文件
Excel打开的时候是根据文件实际格式打开的,叫什么后缀名都可以

2,497

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧