Excel导入文本文件

hsmserver 2004-08-06 12:12:20
我用的是‘|’的分割符
通过控制EXCEL的宏导入有个参数一直设置不好
请问有没有更好的办法
能实现就行
...全文
200 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
hsmserver 2004-08-07
  • 打赏
  • 举报
回复
其实遇到的真正问题是这样的
将DATASET的结果集导出到EXCEL上的某个单元
并且要进行合并、画线、居中等操作
通过OLE实现了功能但是速度很慢
所以想找一个速度比较快的方法
一些SQL导出的方法却遇到这样的问题:数据字段不全,或者数据记录不全 //我用的表字段比较多
所以我改用生成文本然后再导入到EXCEL
速度肯定可以改观,EXCEL宏是这样的:
With ActiveSheet.QueryTables.Add(Connection:= _
"TEXT;C:\Documents and Settings\Administrator\My Documents\sql.txt", _
Destination:=Range("A1"))
.Name = "sql"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = xlWindows
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = False
.TextFileSemicolonDelimiter = False
.TextFileCommaDelimiter = False
.TextFileSpaceDelimiter = False
.TextFileOtherDelimiter = "|"
.TextFileColumnDataTypes = Array(1,1,1,1)
.Refresh BackgroundQuery:=False
End With
问题就在这了 Array(1,1,1,1)
如果有多少列“|”就有几个1 VB可以这样写Array(1,1,1,1)
但DELPHI就不可以
我这样写了但是不成;
var ia:array of integer;
i,Num:integer;
begin
Num:=值 ;
setLength(Ia,num)
for i:=0 to num-1 do
IA[i]:=1;
end;
.TextFileColumnDataTypes
的类型又不认IA
所以还是不成

哪位高手能帮忙解决一下
或者有什么好的办法吗?
fhuibo 2004-08-07
  • 打赏
  • 举报
回复
我这里是SQL 导出到 EXCELL和文本的 可以参考:不行的话再帮你看 EXCELL 导出文本:
procedure TFormDataExp.DataToExcel(aPath: string);
var
s, xlsConnstr: string;
begin
xlsConnstr := 'Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties=Excel 8.0;Data Source=' + aPath + ';Persist Security Info=False';
s := 'Select * Into [sheet1] FROM '+ FMySQLStrList.Strings[ComboBoxTable.ItemIndex] + ' IN [ODBC]'
+ ' [ODBC;Driver=SQL Server;UID=sa;PWD=;Server=127.0.0.1;DataBase=HT01;]';
try
ADOConnecSQLServer.ConnectionString := xlsConnstr;
ADOConnecSQLServer.Connected := true;
ADOConnecSQLServer.Execute(s);
Application.MessageBox('导出Excel成功!','信息!',mb_ok + mb_iconinformation);
ADOConnecSQLServer.Connected := false;
except
Application.MessageBox('导出Excel失败','信息!',mb_ok+mb_iconstop);
ADOConnecSQLServer.Connected := false;
end;
end;

procedure TFormDataExp.DataToTxt(aPath: string;aStr: string);
var
s,txtConnstr: string;
MyIniFile: TiniFile;
MyPath, MyStr: string;
begin
MyPath := ExtractFilePath(aPath);
MyIniFile := TiniFile.Create(MyPath + 'schema.ini');
MyIniFile.WriteString(Copy(aPath,length(MyPath)+ 1,length(aPath)-length(MyPath)),'ColNameHeader','True');
if aStr = 'Tab' then
begin
MyStr := StringReplace(aStr, 'Tab', #9, [rfReplaceAll]);
end
else
begin
MyStr := aStr;
end;
MyIniFile.WriteString(Copy(aPath,length(MyPath)+ 1,length(aPath)-length(MyPath)), 'Format', 'Delimited('+ MyStr + ')');
MyIniFile.Free;
txtConnstr := 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+ MyPath + ';Mode=Share Deny None;Extended Properties="text;HDR=YES;FMT=Delimited";Persist Security Info=False';
s := 'Select * Into ' + Copy(aPath,length(MyPath)+ 1,length(aPath)-length(MyPath)) + ' FROM '+ FMySQLStrList.Strings[ComboBoxTable.ItemIndex] +' IN [ODBC]'
+ ' [ODBC;Driver=SQL Server;UID=sa;PWD=;Server=127.0.0.1;DataBase=HT01;]';
try
ADOConnecSQLServer.ConnectionString := txtConnstr;
ADOConnecSQLServer.Connected := true;
ADOConnecSQLServer.Execute(s);
Application.MessageBox('导出文本成功!','信息提示!',MB_OK + mb_iconinformation);
ADOConnecSQLServer.Connected := false;
except
Application.MessageBox('导出文本失败!','错误!',MB_OK+MB_ICONSTOP);
ADOConnecSQLServer.Connected := false;
end;
end;
数字蛋糕 2004-08-07
  • 打赏
  • 举报
回复
最简单的就是用Tab键:#9
oioioi-090 2004-08-06
  • 打赏
  • 举报
回复
没做过,帮顶!
hsmserver 2004-08-06
  • 打赏
  • 举报
回复
高手帮个忙
使用说明 : 1、本程序可以作什么? 本程序功能分为两个部分: 一部分是:批量查找指定路径下的文件中的内容中,是否包含要查询的项目。并把查询出的内容分文件存储。 一部分是:将文本文件导入EXCEL中,可以将上一步查找的结果导入,也可以自己选择文件导入(支持多选)。 2、如何使用他? a、批量查找: 首先,在“读入位置”按钮处设置你所要读取的文件的存放位置,此时程序会自动读入此文件夹下所有文件,以供选择;其次,用“>>”或“>”将要读取的文件选入读取队列,当然如果选错了可以用“<<”或“<”删除队列,或者鼠标双击选中项删除;再次,点击“+”按钮,添加查找项目到查找项目列表,一次只可以添加一条,如需添加多条则需要重复添加操作;如果添加错误可以双击选中项删除或选中后点击“-”按钮。最后,点击“开始查找”,程序将会把查找结果输出保存到指定路径下面的output文件夹下面,你可以选择是否打开目录查看。如果需要查询的文件有文件头,可以选择“保留文件首行”。 b、EXCEL导入: 首先,选择导入方式,导入方式分为“查询结果导入”和“新选文件导入”两种;当选择“查询结果导入”时,本程序将把“读入位置”处“output”文件夹下文件批量导入EXCEL。当选择“新选文件导入”时,本程序在点击“开始导入”时将弹出窗口,您可以自己选择需要导入文件(支持多选),导入EXCEL。其次,设置导入文件时的分割符,默认为“|”,本程序只支持按照分隔符导入。最后,点击“开始导入”按钮开始导入。 3、本程序不判断所查找的文件类型 由于本程序在读入文件时,并没有校验文件的内容和文件类型,因此本程序会读取用户所选择的任意文件,即使此文件是二进制格式的。不论是查询或者是导入功能都是这样。本程序将按行读取所选择的文件(或者有换行符的),在读取完文件后,无论是否找到,都会创建和源文件相同类型的文件,即使是.exe或.rar(一般是打不开的),文件名存储为“output”+原文件名。即使没有找到任何相匹配的内容,本程序也会创建文件,这时后文件大小是0字节,可以按照大小排列看到。 4、请使用“清除文件”按钮及时清除查询结果 程序在查询和创建文件的过程中,不会判断是否已经执行过查询操作。如果已经执行过查询操作,“output”文件夹下就会存在查询出的文件,当再次执行查询时,本程序会在已存在的文件后追加查询结果。这样就会出现重复的记录或内容。因此,当需要多次查询时,每次查询前需要点击“清空文件”按钮删除output文件夹,才能保证查找的准确。 5、本程序不会判断运行的环境,因此在运行过程中可能会有些未知的错误 本程序在win7环境,vs2012,Netframe4.0下编译通过。本程序支持winxp及以上操作系统。执行EXCEL导入的时候,需要安装Office。Office的版本在2003以上就可以。但是不同我Office版本对导入性能,有一定的影响。Excel2003,最多256列,即2的8次方,最多65536行,即2放入16次方; Excel2007及以上版本,最多16384列,即2的14次方,最多1048576行,即2的20次方。因此如果需要导入的单个文件的行数或者列数,超过了所安装Office版本的最多行列数,程序将会报错!

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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