ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 13440|回复: 24

[分享]替换空行速度记之一

[复制链接]

TA的精华主题

TA的得分主题

发表于 2006-4-8 19:58 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
感 想 以前研究过替换空行方法,但这一段时间,越发对速度感兴趣。所以,有以下的东东与大家分享。 我时常发现有的小工具(文本整理),速度很快,而Word却不是,今天想用Api直接取得剪贴板的内容,无奈没找到。但是,却找到DataObject的作用,把他作为中间处理后转贴,速度也是不错的。 这个的速度基本就是第二快了。(假设Api能取得为第一快)。 注意:这只是我的想法,很有可能是错的。(随着知识的增多,大多事物都是这样) 就当是给大家提高速度的一滴润滑油吧。 感悟:来论坛学了不少的Word知识,只有一发现有好东东,我就马上整理,然后与大家分享。希望兄弟姐妹都向老大学习,努力进步。 使用方法: 点击工具栏上的“超快”。 他就会取出剪贴板的内容并处理后,粘贴到光标的后面。 -------------------------------- 以上文字,附件中也有。 特别提醒: 这个是仅留文本的,其他的都没了,使用时,注意。 dM1Zv77h.rar (9.6 KB, 下载次数: 516)

TA的精华主题

TA的得分主题

发表于 2006-4-8 21:12 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
谢谢Konggs兄的分享,试用了一下,非常棒!!!

TA的精华主题

TA的得分主题

发表于 2006-4-9 12:50 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2006-4-9 15:49 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

请KONGGS上传一份空行文本实例,越大越好,我测试一下,感觉有些问题,但需要证实:

1:是否必须剪贴板?

2:是否必须使用数组?

3:关于屏幕刷新,按KONGGS兄的代码中,只有Selection.InsertBefore astring '光标后插入字符串时屏幕会刷新,其余过程均在内存中完成,没有必要禁止屏幕刷新的。

TA的精华主题

TA的得分主题

 楼主| 发表于 2006-4-9 18:10 | 显示全部楼层
老大说的对。屏幕更新可以不用。我是一开始先写下面的函数的(才开始准备写成“过程”的)。 后来,改成调用这个函数,所以这个没有去掉。 一、用剪贴板的原因就是我发现如果先剪贴到Word中(猜想由于Word要处理、考虑、分页等等,所以比较慢。再处理后),再粘,不会很快的。所以,我想如果要提高处理这种纯文本的, 二、所以,我想只要不是很必要时不直接贴到Word中,最后一起放应该不会慢的(但受到内存的影响)。 三、我猜想利用数组,可以很快的处理前后的空格,与空段,而且速度也比较快,我目测([em04])了一下与Word的“粘贴为无格式文本”相比,也不慢些。 四、所以,我猜想网上很多的处理文本的工具大多利用这个原理。这个只是我的猜想。我又不会反编译,只能猜想了。 五、我觉得老大说的“必须”,我觉得“不是必须,”只是说提高速度,所以,我在向这方面想。如有不妥,请指正。 以上,如果不对,希望老大指点为感。 (我测试时就是找一个网页内容比较多的,然后全选,复制,到Word中,点“快速”,所以,并没有在真正的环境测试。例如这个网页:http://post.baidu.com/f?kz=81824230) (我就复制了几个网页来测试的,比较草率[em04][em04])

TA的精华主题

TA的得分主题

发表于 2006-5-9 16:45 | 显示全部楼层

呵呵,刚刚看到,孔兄终于出手了,如果能够成功,就多谢啦。

用API函数来处理TXT文本可是偶的夙愿啊,但愿孔兄这个良好的开端能带来满意的结果。

由于水平差了点,时间少了点,玩的花样多了点,这个问题看来得靠孔兄出力了,我已经无能为力了。。。。。

TA的精华主题

TA的得分主题

发表于 2006-5-9 16:55 | 显示全部楼层

另外,再说几点,仅供参考。

1、TXT文本与粘贴到WROD中的纯文本在理论上是一样的,但在实际操作中仍有不同。似乎前者更可靠。

2、只要能找到用VBA控制API函数的思路,即使不过于WORD界面打开也可以,毕竟打开文件所消耗的时间相当可观。

3、网上工具的高速运行可能不止于此,API的确是WINDOWS的核心,而VB、C、DELPHI也都有控制API的能力。但估计前者的控制效率是最低的,因此,想让WORD与这些工具一样快,从原理上来说可能性不大。不过是强在入门门槛低,容易DIY。。。。

TA的精华主题

TA的得分主题

 楼主| 发表于 2006-5-9 17:13 | 显示全部楼层

1.山兄说的对。我最近发现也是这样。

2.基本找到(七叶一枝梅兄找的),但我没看懂,所以,没敢放上来。

3.这个我近段时间也考虑到了,要Word与哪些速度比速度是不可能的。

TA的精华主题

TA的得分主题

发表于 2006-5-14 13:37 | 显示全部楼层
  试用几天了,这是目前我看到的最好的一种快速去空行的方法。当然,期待老大的改进意见与成品。
  在试用过程中,发现孔兄这个宏有一处让我使用不习惯:每次用“超快”宏粘贴的文本,总是独立成一个新段,很多时候粘帖内容后面就产生了一个空行,仍得手工删除,这在把网上帖子正文对应粘贴到表格中的每一行时尤为不惯。
  于是我经过小测试,加进了两行蹩脚的代码,达成了心愿——不再有“额外的”空行产生。可是视觉及速度上又有相当不足,会明显的顿一下才完成粘贴。请孔兄指导我应该如何修改。
Sub 超快()
Dim mydata As DataObject
Dim acon As String
Set mydata = New DataObject '创建一个数据对象
mydata.GetFromClipboard '将数据复到到DataObject
acon = mydata.GetText(1) '只取得文本格式
'上面的还可以改进,用WINAPi,可惜我不会。
'以下基本就是最好方法之一了
替换空行 (acon)
Selection.MoveRight Unit:=wdCharacter, Count:=1 '在粘贴完内容后将光标移往粘贴内容的下一行
Selection.TypeBackspace '用向前删除键删除空行
End Sub
Function 替换空行(a1)
Dim b1, c1
Dim d1 As String, astring As String
Dim atim As Long
atim = Timer
Application.ScreenUpdating = False
b1 = Replace(a1, Chr(11), Chr(13))
b1 = Split(a1, Chr(13)) '变为数组
For Each c1 In b1 '在数组中循环
c1 = Replace(c1, Chr(10), "")
c1 = LTrim(c1) '去掉前后的空格,选择性粘贴后,没有软回车
d1 = Replace(c1, Chr(9), "") '如果全部是制表符
If d1 = "" Then
'不作处理
Else
astring = astring + c1 + Chr(13) '累加
End If
Next
Selection.InsertBefore astring '光标后插入字符串
Application.ScreenUpdating = True

End Function

Sub t()
MsgBox VBA.Asc(Selection.Text)
End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2006-5-14 14:42 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

呵呵,谢谢,

这个还有些很多case,所以,仅在参加。

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-4-28 11:12 , Processed in 0.043762 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表