主页
Top.Mail.Ru Yandeks.Metrika
论坛:“基地”;
当前存档:2002.04.01;
下载:[xml.tar.bz2];

向下

先生们,帮助您从Excel中读取数据 找到类似的分支


Санька   (2002-03-05 13:28) [0]

问题如下:
客户提供Excel文件,然后将所有数据传输到本地
DB进行进一步处理。 遗憾的是,这个文件在单元格中编写得不​​是很好(而不是自动传输)
一堆间隙m / s带有单词并按下输入....当将列复制到表格时,所有这些额外字符看起来都很难看,而且不是很正确。 如果它有帮助,这是代码。 也许有人会说。
程序TForm1.BitBtn1Click(发件人:TObject);
var i,k:integer;
n:字符串;
AppExcel,价值:变体;
开始
i:= 6; //来自Excel的第六行
AppExcel:= CreateOleObject(“Excel.Application”);
AppExcel.Workbooks.Open(“c:\ 111.xls”,False);
AppExcel.Visible:= True;
而我<= 34做
开始
n:= AppExcel.Cells.item [i,4] .Value;
taSS.edit;
taSS.insert;
taSs.fieldbyname(“Name”)。AsString:= n;

taSS.post;
taSS.Next;
i:= i + 1;
结束;
结束;

或者也许告诉我如何最好地组织所有这些......
如果可能的话,不要发送到网站D-Excel已经......
好吧,zadolbal,可能。 在此先感谢!!!



MetallAdm   (2002-03-05 16:38) [1]

是否可以删除额外的空格等?

n:= AppExcel.Cells.item [i,4] .AsString; --- Sdes,也就是字符串do如果它是一个字符串
taSS.edit;
taSS.insert;
DelSpaces(N); ---就像这样:))

taSs.fieldbyname(“Name”)。AsString:= n;


过程DelSpaces(Var xx:String);
瓦尔
lt,i:整数;
ll,l:整数;
s:字符串;
b,a:字节;
开始
s:= xx;
ll:= 1;
Lt:=长度(S);
l:= 0;
a:= 0;
for i:= 1 to lt
开始
if String(s [i])=“”那么inc(l);
如果String(s [i])=“*”那么a:= 1;
结束;
如果l = lt那么
开始
s:=“*”;
a:= 1;
ll:= 1;
结束;
如果a = 0那么
开始
b:= 0;
对于i:= lt downto 2 do
开始
if String(s [i])<>“”然后
如果b = 0那么
开始
ll:= i;
b:= 1;
结束;
结束;
如果ll> 2则Setlength(s,ll)else s:=“*”;
结束;
xx:= s;
结束;

是的,即使是随行程序
当我写得好的时候,我也不知道它是多么正确
很久以前它是

是的,我没有打扰她。为了清晰起见,她用星号标记空白行:)

我想你会干净:)



Санька   (2002-03-05 17:29) [2]

非常感谢,我会试试。 如果那再次呼吁你
(关于明星:))。
至于任务,原则上没有人出现
想法。 Mbyb有人遇到问题......
顺便说一下,在我的情况下,通过这个程序,计算机“思考”很长一段时间(只要它通过所有单元格,同时将其插入表格中的行)
了解您的意见,专家将是非常有趣的。



MetallAdm   (2002-03-05 17:47) [3]

顺便说一句,该过程删除了该过程
只有从最后还有额外的空间

但我认为做这样的事并不难
在字符串中查找单个单词
然后他们连续穿过一条线上的间隙mona推




Санька   (2002-03-06 09:05) [4]

Das ....
我认为我不会很快成功:就像帕斯卡一样
干净(在字符串处理方面)没有多少面子。 我更喜欢数据库。 那么lana - 试试.. Sanks。
其他的想法没有chtoli ....唉!



gek   (2002-03-06 09:40) [5]

我想如果客户将以csv格式提供文件,那么
它会更容易消除差距等。



MetallAdm   (2002-03-06 09:51) [6]

像我曾经在Turbo piskale上做过的事情:))

我加载一个文本文件,荣耀推入一个数组
也就是说,从数组中选择单个单词
好吧,如果不清楚,我会问自己

过程LoadFile(Var txt:POuts; Fl:String);
瓦尔
我,j,k:Word;
s:Word;
buff:字节的数组[1..lhtWord];
b阅读,bWrite:Word;
Sk,NumL:Word;
Strs:String;
开始
分配(Fls,Fl);
重置(Fls,1);
大小:= FileSize(Fls);
如果Size <65000则
开始
BlockRead(Fls,lBuff ^,Size,bRead);
i:= 1;
虽然(i <=大小)和(lBuff ^ [i] =“”)或(lBuff ^ [i] =#13)或(lBuff ^ [i] =#10)做
开始
Inc(i);
结束;
AddW:= 1;
k:= 0;
对于s:= i to Size do
开始
j:= 0;
如果(lbuff ^ [s] <>“”)和(lBuff ^ [s] <> #13)和(lBuff ^ [s] <>#10)和(lBuff ^ [s] <>“。”)和(lBuff ^ [s] <>“,”)然后
开始
{写(lbuff ^ [s]);}
Inc(k);
Strs [k]:= lbuff ^ [s];
Strs [0]:= Chr(k);
txt ^ [addW]:= Strs;
结束
其他
开始
j:= s;
k:= 0;
如果(lBuff ^ [j] =“。”)或(lBuff ^ [j] =“,”)那么
开始
{Strs [k]:= lbuff ^ [s];
Strs [0]:= Chr(k);}
如果(lBuff ^ [j + 1] <>“”)或(lBuff ^ [j + 1] <> #13)或(lBuff ^ [j + 1] <> #10)那么
开始
Inc(AddW);
s:= j;
结束;
结束
其他
开始
虽然(lBuff ^ [j] =“”)或(lBuff ^ [j] =#13)或(lBuff ^ [j] =#10)
开始
Inc(j);
{If(lBuff ^ [j] =#13)或(lBuff ^ [j] =#10)然后写(“|”)else写(“+”);}
结束;
Inc(AddW);
s:= j-1;
结束;
结束;
结束;
结束;
结束;


嘿龙程序:))



Shirson   (2002-03-06 12:50) [7]

嗯......
XL有两个这样的功能:
1。 清除(文本)从文本中删除所有不可打印的字符(换行符适用于它们)。
2。 修剪(文本)删除单词之间的所有空格(单个除外)。

通过制作总计 =修剪(清洁(A1)) 可以避免长程序:)



Санька   (2002-03-06 14:10) [8]

>希尔森
请直接在Excel中指定这些功能,还是应该从Delphi调用它们?



Shirson   (2002-03-06 14:35) [9]

>桑卡

可以直接在XL。 有可能并且从德尔福 - 使用公式将任何细胞带入XL =修剪(清洁(A1)),只用而不是A1,替换所有需要处理的单元格,并用Delphi读取数据并扔进数据库...呃......只是不完全清楚为什么你需要从Delphi中取一步:)你可以直接从XL把数据扔进数据库:) ))



Санька   (2002-03-06 14:45) [10]

>希尔森
我会试试,谢谢......
至于直接转移到数据库:使用eksel的方式来做这件事 - 我的用户不会触摸它......然后,如果重复数据,那么我很难跟踪它。 所以 - 我复制到一个中间数据库,然后我使用SQL工具做它并选择我想要的主要...实际上,该项目非常愚蠢:)主程序已经工作了很长时间,一切都经过精心调整,但我开始厌倦了无聊并为用户发明了新的简化。
好吧,好吧,我会继续受苦。 谢谢大家!!! 有帮助!
很快可能会再次上诉。 ;)



Санька   (2002-03-06 15:13) [11]

>希尔森
顺便说一下,我试过这个:

n:= AppExcel.Cells.item [i,4] .Value;
修剪(n); - 它工作,删除空格
干净(n); - 这个f-I Delphi不为人知

也许有些东西会取代这个功能。 在帮助工作的线路翻找 - 没有:(。???????



TIP   (2002-03-06 15:31) [12]

Delphi有一个优秀的Qstrings库。
并在汇编程序中使用字符串。



Shirson   (2002-03-06 15:35) [13]

通常,在Delphi中(至少在D6中),trim函数会删除行开头,行末尾的空格以及行本身的所有控制字符。 (如帮助翻找?:))
尝试仅修剪字符串 - 会发生什么?



Shirson   (2002-03-06 15:40) [14]

>桑卡
“关于直接转移到数据库:使用eksel的方式来做nadati - 我的用户不会触摸......然后,如果重复数据,那么我将很难跟踪它。”

主人是主人:)我不会在一个花园,但在XL做了一切。 并且juzverej需要按下一个pimpu,而不考虑系统的机制。 并在那里检查你想要你做什么,并调整用户界面,等等。但如果你想delphi,这意味着你需要:)



Санька   (2002-03-06 16:21) [15]

:)))))))是的,我想很久以前我离开了茶壶...... :)
使用字符串,说话和修剪是一个汇编芯片,%)
短于%%((。
嗯,“有,带有字符串的duc字符串...但除了对接,搜索字符等等,我找不到任何东西,但是关于删除空格和”输入“和”标签“以及它们 - 只看到修剪。
如果你告诉不幸的程序员 - 谢谢。
如果没有,去学习英语并购买D为dummers :))
而且,再次感谢大家,我去醉了!




dmitryK   (2002-03-06 18:13) [16]


>至于任务,原则上没有人出现
>想法。 Mbyb有人遇到问题......
>顺便说一句,在我的情况下,通过这个程序,计算机“思考”
>很长一段时间(直到所有的细胞通过,而在线
>插入tabla)
>了解您的意见,专家将是非常有趣的。


难怪这么久以来。 代码制动。
简而言之,您如何优化。 这是源代码:


> procedure TForm1.BitBtn1Click(Sender:TObject);
> var i,k:integer;
> n:string;
> AppExcel,价值:变体;
>开始
> i:= 6; //来自Excel的第六行
> AppExcel:= CreateOleObject(“Excel.Application”);
> AppExcel.Workbooks.Open(“c:\ 111.xls”,False);
> AppExcel.Visible:= True;
>而我<= 34
>开始
> n:= AppExcel.Cells.item [i,4] .Value;
> taSS.edit;
> taSS.insert;
> taSs.fieldbyname(“Name”)。AsString:= n;
>
> taSS.post;
> taSS.Next;
> i:= i + 1;
>结束;
>结束;


AppExcel.Visible:= True; - 为什么? 什么会慢慢运作?
这段代码表明需要可视化使用XL的过程,这自然会减慢工作速度。

n:= AppExcel.Cells.item [i,4] .Value; - 来自教科书的代码,绝对正确,但绝对制动。 我不确切知道它是如何工作的(在操作系统级别),但是随着时间的推移,你将从书页中卸载多少数据 - 一个单元格或1000完全没有区别。 为此,您必须创建所需大小的动态数组并在其中加载Range。
然后才分析这个数组,这个数组本身要快得多。

但是这段代码片段对我来说并不十分清楚。
> taSS.edit;
> taSS.insert;
> taSs.fieldbyname(“Name”)。AsString:= n;
>
> taSS.post;
> taSS.Next;

试图替换现有的字符串? 虽然它似乎是关于添加新的? 但无论如何,整体形成SQL查询并执行它们通常会更快。 因为根据代码,一次只能在少于一个30行中,您可以一次性发送整批更改(30 SQL修改/添加请求),这也将加快任务执行时间。

最后
i:= i + 1; - 最好用Inc(i)替换这样的片段;

关于在XL中优化数据访问速度的提示,我强烈建议您查看“德尔福王国”网站,并找到文章“通过推动的浪潮”。 我在这里简要提到的所有内容都在那里详细描述。 读它。

至于删除多余的空间,这个问题值得一试。 我不知道在D6中如何,但早期的TRIM只削减了前导和尾随空格。 如果现在他仍然是一个加号,这将删除中间控制字符,那么一切都很简单,好吧,如果没有,那么你必须花半个小时自己删除它们。



dmitryK   (2002-03-06 18:16) [17]


>提示(06.03.02 15:31)
> Delphi还有一个优秀的Qstrings库
>并在汇编程序中使用字符串。


顺便说一句,非常有用的建议,我强烈建议使用它。



MetallAdm   (2002-03-06 18:57) [18]

嘿,是的,你已经提出了优化的问题:)

> Shirson顺便不知道不知道:)
我仍然无法打破dos的习惯
当任何程序必须从头开始:))



Страницы: 1 整个分支

论坛:“基地”;
当前存档:2002.04.01;
下载:[xml.tar.bz2];

楼上









内存:0.65 MB
时间:0.037 c
1-200
艾琳
2002-03-18 11:25
2002.04.01
如何阅读备忘录中的字符


1-207
tovSuhov
2002-03-20 12:29
2002.04.01
再次关注焦点......


3-69
Huliganka
2002-03-06 21:27
2002.04.01
Delphi和MS SQL服务器


1-155
SB.John
2002-03-21 12:47
2002.04.01
如何找出对象占用多少内存?


3-45
moor_38
2002-03-04 13:00
2002.04.01
DBGrin





南非荷兰语 阿尔巴尼亚人 阿拉伯语 亚美尼亚 阿塞拜疆 巴斯克 白俄罗斯 保加利亚语 加泰罗尼亚 简体中文 中国(繁体) 克罗地亚 捷克 丹麦语 荷兰人 英语 爱沙尼亚语 菲律宾人 芬兰 法文
加利亚西语 格鲁吉亚语 德语 希腊语 海地克里奥尔语 希伯来语 印地语 匈牙利 北日耳曼语 印度尼西亚人 爱尔兰语 意大利语 日本性玩偶 韩语 拉脱维亚 立陶宛 马其顿 马来语 马耳他语 挪威语
波斯语 波兰语 葡萄牙语 罗马尼亚 俄语 塞尔维亚 斯洛伐克 斯洛文尼亚 西班牙语 斯瓦希里 瑞典语 泰国人 土耳其 乌克兰 乌尔都语 越南人 威尔士语 意第绪语 孟加拉 波斯尼亚
宿务 世界语 古吉拉特语 豪萨语 苗族 伊博 爪哇 卡纳达语 高棉 老挝 拉丁语 毛利 马拉 蒙古人 尼泊尔 旁遮普 索马里 泰米尔人 泰卢固语 约鲁巴语
祖鲁
英文 Французский Немецкий Итальянский Португальский 俄文 Испанский