ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
12
返回列表 发新帖
楼主: 守柔

[Word 应用与开发] [第1期]中英文分离 ★★★[已总结]

[复制链接]

TA的精华主题

TA的得分主题

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

大家好,目前我能做的版主决大部分要求,只有一个做不到,就是我不能将分开后的东西做成五列的表格,而只能做成三列的表格。也就是我只能做成

1

我明白了

I see

2

我不干了

I quit

3

放手

Let go

4

我也是

Me too

5

天哪

My god

6

不行

No way

题目已好多天了,也没人答,说明是比较难的。再往下也不会做了。那们仁兄也来看一看。我们共同研究啊。

TA的精华主题

TA的得分主题

发表于 2005-7-16 11:44 | 显示全部楼层

再来一法:

一、CTRL+F,调出查找/替换,在查找中输入”^p”,在查找中输入“”(即空),替换了42处,

二、CTRL+F,调出查找/替换,在查找中输入“[!^1-^127]”,选中突出显示所有该范围内的项目,选中使用通配符。这时选中汉字部分,点关闭按钮。

三、选择格式/字体、选择字体颜色、红色。

四、CTRL+F,调出查找/替换,在查找中输入“”(空),在高级中选择格式为字体“红色”,在替换中输入“^p^&^p”。确定,168处。

五、全选,表格/文本转化为表格。列数选4列,表格的行数自动为84,其它默认。

六、选择要定义为大写的列选择格式、更改大小写,句首字母大写。选中第二列(把光标放在上面),剪切,再把光标放在第一列,粘贴。同理,第三列,第四列一样。这时文字在字母的前面了。

七、再在第一列的前面插入三列,第一列第一个输入域{autonum},在第二行第一列按下F4,再选择此二行,再复制,全选第一列粘贴。再选中第二列,选择/粘贴/选择性粘贴/无格式文本,同理第一列也是。这样第一列与第二列就是数字了。再放光标放在第三列第一行,选择表格/公式。自动出现=sum(left),这正是我们想要的。复制,再全选第三列,粘贴。再按f9更新域一下。全选第三列,再选粘贴/选择性/无格式文本。再ctrl+f,查找“^13”,替换为“”(即空)。此处替换了“84”

八、再在第一行前插入一列,输入“序”、“中文短语”、“英文短语”等。再表格/标题行重复。表格属性中选择选择跨页断行。

共替换了84+168+42=294处<1200处

TA的精华主题

TA的得分主题

 楼主| 发表于 2005-7-22 05:42 | 显示全部楼层

中英文分离与WORD的查找与替换的总结

在本次的测试题中,我们继续考查WORD中的复杂查找与替换,当然,查找是关键。正确地分析文档中现有文本与目标文本的差异,以及查找项目与非查找项目之间的差异,才能正确地区分两者,才能让WORD正确地查找到我们需要的文本;当然,在分析的过程中,势必存在分离的效率的问题,查找与替换的次数问题,查找与替换的处数问题。

现在,我们就地分析中英文分离这个样本文档,在这个文档中,存在有:中文字符,空格,英文字符,段落标记,''(撇号)等。就此文档而言,WORD为我们准备了这些查找项目(包括通配符):

所有英文字符,可以为"[a-z]""[A-Z]"注意,必须用升序来表示该范围;"^$"(任意字母),"^?"(任意字符,任意字符涵盖任意字母)

空格,可以直接为" "表示;段落标记可以以两种方式表示,"^p"或者"^13",其中"13"表示字符的ASCII码,在EXCEL中或者在VBA中,我们可以使用EXCEL.CODE(直接使用CODE(TEXT))或者VBA.ASC函数(VBA.ASC(CHAR))来返回字符的ASCII,中文的ASCII码均<0,简体汉字的ASCII码为-2050~-20319之间。

以此句为例:"i see我明白了i quit"

如果我们找到""""(两个中文字符),则可以在此替换为段落标记(或者其它如制表位等)和查找内容("^&"/"^q"---前者是不使用通配,后者是在使用通配符的情况下)

显然,在中文短语中直接查找中文首字和中文尾字,WORD是没有办法的,那么,如果我们查找的是以英文字符开头中间为任意汉字字符的并以英文字母结尾的文本项目(相当于"e我明白了i"),是一个WORD较易识别的标志,而且在每句中,是唯一的。

首尾英文字符好办,在样本文档中,均为小写字母,那么就是"[a-z]*[a-z]",中间为*通配符,零或多个任意字符,显然,WORD还是无法区分。

前面已经分析过了,样本文档中,只有五种字符,中文、英文字母、空格、段落标记和''(撇号),也就是中文字符只要为非另外的四种,OK,,我们来试一下,注意查找使用通配符,"[a-z][!a-z, ,'']"(:"[!a-z, ,'']",逗号为分隔,也可以省略,为清晰起见,我此处写入了逗号.显然,WORD会将所有类似"e"这样的文本项目找到,已经成功了,接下来,我们应该查找"i"这样形式的文本项目,我们可以以"[!a-z, ,'',^13] [a-z]"来查找,显然,我们将段落标记也排除了.OK,我们已将可以将两者区分起来了.

方法一:

替换:第一步,我们不考虑直接替换为具有分隔标志的内容,因为我们还没有找到有效的方法前,我们可以替换格式的方法,先将它们区分出来,比如,在查找项目中,键入"[a-z][!a-z, ,'']",勾选通配符,在替换项目中,直接按下CTRL+B,则在替换项目文本框下方,会出现格式:字体:加粗,其它快捷键同WORD,CTRL+U(下划线),CTRL+I(斜体),WORD2000中可能不支持此快捷键,则可以在下方的格式中设置,此处略.全部替换,OK,168.我们的目的是在中文(粗体字)前加入段落分隔符(或其它,此处以段落标志为例,下同),继续查找粗体的任意字母,替换为非粗体的格式,只要在查找中键入"^$"(如果是在通配符情况下,可以使用"[a-z]",光标在查找项目的文本框中,按下CTRL+B,使其为格式:字体:粗体;替换中,键入"^&^p"(即在查找内容后面加入段落标记,以分隔)按下CTRL+B,使其处于格式:字体:非粗体(如果切换为不限定格式,将会起到删除作用,即替换为""(空空),非粗体是将查找项目中的粗体文本转为非粗体).OK,168,2*168,第一次分离成功进行!

第二个分隔, 勾选通配符,查找"[!a-z, ,'',^13][a-z]",替换为粗体格式,同上,,2*126

这样,我们通过二次分隔,二次查找与替换,累计为588处替换.

CTRL+A,全选,CTRL+B二次转为常规文本,SHIFT+F3.切换为句首字母大写,也可以格式/更改大小写/句首字母大写.

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

能不能再简单一点?

,我们先按下述方法,做一遍:

方法二:

勾选使用通配符,查找为不限定格式的"([a-z])([!a-z, ,''])",注意此处的两个()为表达式,它将我们要查找的内容,放入表格式中.替换为"\1^p\2",注意,前者表达式在替换为对应了"\1",而后者对应了"\2",如果我们反一下,则可以将两个查找的表达式在最后文本中交换位置,显然在替换中,我们在两个表达式之间加入了一个段落标记.OK,168!

第二次分离,同理,查找"([!a-z, ,'',^13])([a-z])",替换为"\1^p\2",126.

,我们通过这样两次查找与替换,即可以完成分离,294!,比上一次操作减少了一半,294!

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

能不能再简单一些?!

TA的精华主题

TA的得分主题

 楼主| 发表于 2005-7-22 05:45 | 显示全部楼层

方法三:

请再跟我做一遍,查找:"^p",替换为"",即将所有段落标记删除.43,注意,您此处不需要再勾选通配符!

为更精确些,请全选文档(CTRL+A),为什么,WORD中还是有些微妙区别的,有时包括在编程中,也存在类似问题,WORD可能会"失落"某些符合的项目,至少,在本过程中,您还是需要全选的.

勾选通配符,查找中键入"([a-z])([!^1-^127]*)([a-z,^13])",替换为:"\1^p\2^p\3",我们来分析一下,这个表达式的含义,查找的第一部分()为任意英文字母开头的,第二部分为非ASC码在1~127之间(纵观本文档,就是两种字符,一是中文字符,二是西文字符(注意,此处我用的是西文字符,而非英文字符),在文章开头,我们就分析了,中文字符正好符合这个判断条件,"[!^1-^127]","*"的目的是零个或多个字符,此处相当于延伸了中文字符部分,第三部分,是任意字母或者为段落标记(段落标记^13针对全文档最后一个段落,也是最后一段落中英文短语).在替换中,"\1"代表的是"([a-z])","\2"代表的是"([!^1-^127]*)","\3"代表的是"([a-z,^13])",OK,168.

如图:

显然,第三次的查找与替换,更为简洁,211!

如图:

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

分离后的文档,您看上去就非常轻松.

如果我们接第三次的话,由于文档最后有两个空白段落标记,我们按下F8扩展,将光标定位到"要是"""后面(即全文档最近第三个段落处),这样,我们需要的内容将被选定.

SHIFT+F3.切换为句首字母大写,也可以格式/更改大小写/句首字母大写.

表格/以段落标记(您也可以在上面的操作中换成您喜爱的符号)为分隔符,将文本转为四列的表格.选中第一列,用鼠标拖动到第二列时,两列文本将自动交换;同理,第三列与第四列也交换.

选中表格的第一第二列,表格/插入/列在左侧,插入二列.

进行编号:

有两种方法,但需要使用域.

第一种方法,在第一个单元格中,插入域{ListNum},选中该单元格,复制,选中第一二列,粘贴,如果你的编号项中有多余的修饰符,请替换掉.

第二种方法:选中第一列,插入/项目符号与编号/多级符号/自定义/高级,插入以123形式的不带特别标注的编号,复制,编辑/选择性粘贴/无格式文本,OK,编号转为文本了.

如图:

在第二列的第一个单元格中,插入域: { =SUM(LEFT)*2 },其意为左侧单元格和(其实就一个单元格)*2.选中该单元格,复制,选中该列,粘贴.ALT+F8,出现""对话框,在宏位置中,选择WORD命令,注意,这是WORD命令,不是VBA,找到或者键入此命令:" UpdateFields",WORD将更新域,说明,由于在表格中,没有相应的命令来更新全部域,您也可以模拟打印的方式(虚拟打印,或者去掉打印机,来打印,以求彻底更新域).OK,编号出来了.

如图:

全选文档,CTRL+SHIFT+F9,转域转为文本(断开域链接),删除第一列,将光标定位于表格中,或者全选表格,表格属性,宽度,百分比,100%,OK,表格调整为页面宽度.

在表格第一行上方插入一行,输入相应文本,选中该行,表格/标题行重复.OK,全部完成.

参赛人员的一些分析:

asdf1001的方法,比较精巧,查找"([a-z, ,']{1,200})"替换为:"^t^&^t",替换处数最少,其编号也是用得非常好;但由于在文本转换为表格,和表格转换过程中次数太多,有不合理之处。另外的不足是{1,200}不是精确匹配,受英文短语字数影响较大,且为不定数,{n,m}(n m 个前一字符或表达式),n/m的最大值不能超过255;从本处情况看使用{n,}( 至少 n 个前一字符或表达式),也能达到同样的目的,同理,n的值不能超过255.同时我们要注意到,此法在WORD查找中,是比较费时的.

实例:'勾选通配符,查找中键入"([a-z])([!^1-^127]*)([a-z,^13])",替换为:"\1^p\2^p\3"'asdf1001两种方法用VBA进行计时比较 ,WORD用时分别为0.296875 2.375,也就是前者的效率更高.

hpw, konggs, sailorgg的方法,是比较传统的方法, sailorgg的公式域是比较正确的一个做法(我倾向),但辅助列中,没有必要使用Autonum;Konggs后面的解法中,受我在OFFICEFANS回复贴的启发,此处不作评论.

sdbbsdbb的方法中,使用表达式,是一个比较好的方法,但整体过程效率偏低.

如意版主的方法中,使用了样式,(如意版主是样式/格式使用高手), 整个思路比较清晰.但选择所有实例是XP及以上版本中的新功能,有一定的局限性,以及新建了两个空白文档,效率显得不是太高.

fieldsun的方法很好,特别是公式的使用,更见功力(但我不肯定是否存在重复计算的问题,因为WORD在更新域过程中,始终引用了上一个域中的值).邮件合并的方法,也是一个非常不错思路.

注意,本案例中的表格的编号,我们提倡以域公式为主,假如我们的编号间隔在63以上,用表格中的项目符号与编号的方法,是不适宜的,WORD中表格的列数极限为63.

好了,这次中英分离的总结结束了,您是否和我一样,收获颇丰啊?也许你还有更好更妙的方式,请告诉我和网友,我们一同分享知识和快乐!

通过这次竞赛,通过这次总结,我们越来越感到,WORD中的查找与替换,它的内涵也是非常精奥,掌握了它的技术与方法,会对我们今后的工作,有很大的帮助.

一些感慨:

记得先前,我们的英文引号替换http://club.excelhome.net/viewthread.php?tid=46624,长长的代码,现在,只要使用查找与替换的方法,即可轻松做到,比之代码运行,效率更高;

WORD的查找中,还支持语言查找,查找/格式/语言/查找语言对话框.还是以本案例为例,我们可以注意到,状态栏右下方的语言显示,如果是西文,它会出现西文语言名称如"英语(美国),如果是中文,它会出现"中文(中国)"字样,也就是说,我们通过语言查找,也能分开,但在实际查找与替换中,有一定的问题,也许与您的语法检测有关.我在实际查找过程中,时而有效,时而无效,好象需要初始化似的(这个问题,我需要进一步探索,但应该是行得通的) ,但如果以以下代码运行查找与替换,则可以,有兴趣的您,不妨一试:

Sub Test() With ActiveDocument.Content.Find .ClearFormatting '.LanguageID = 1033 '英文 .LanguageID = 2052 '中文 .Format = True .Replacement.ClearFormatting .Replacement.Font.Color = wdColorBlue '兰色字体 .Execute Replace:=wdReplaceAll End With End Sub

附中英文分离总结WORD文档

[此贴子已经被作者于2005-7-22 5:48:14编辑过]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?免费注册

x

TA的精华主题

TA的得分主题

发表于 2007-4-18 12:42 | 显示全部楼层
通过这个竞赛,我学到了太多的东西。前几天,我提出的问题斑竹的回答我都看不懂,今天我终于明白了。

TA的精华主题

TA的得分主题

发表于 2005-7-9 09:20 | 显示全部楼层

上一次传的答案有疏漏,有几个要求没有实现,现重新做了两种实现方法.

方法一、在表格移动列

1、在文件最后加end(任意英文小写字母或单词)

2CTRL-H,高级 选定“使用通配符”,查找内容输入[!a-z ']*[a-z] ,替换为^t^&,全部替换。替换次数168

3CTRL-H,高级 选定“使用通配符”,查找内容输入[a-z]*^t ,替换为^t^&,全部替换。替换次数168次,然后删除第一步增加的一行内容

4、在文件前面打回车增加一行,CTRL-H,不使用通配符,查找内容输入^p*^t ,替换为^p,替换次数42

5、选定全部内容,表格-转换-文本转换成表格,列数为4,文字分隔位置为“制表符”

6、表格前面第一行输入表头内容,并设置为“重复标题行”,最左边插入一列

7、在表格第一列第二个单元格,表格-公式,在公式框中输入公式=COUNT(ABOVE)*2+2,然后将这个单元格内容复制到本列下的剩余单元格中

8、更新域操作:文件-打印,选任一个打印机打印(注意:工具-选项-打印中要选定“更新域”,最好是虚拟打印机或在打印中选择“打印到文件”,以免实际打印)

9、选择整个表格,按CTRL+SHIFT+F9将域转换为文本,

10、在选择整个表格的情况下,执行:格式-更改大小写,选“句首字母大写”

11、在表格中移动第二行与第三列,第四列与五列互换位置,方法:选定列,SHIFT在鼠标为箭头时拖动

共替换次数168*2+42=378

方法二、用邮件合并

1、在文件最后加end(任意英文小写字母或单词)

2CTRL-H,高级 选定“使用通配符”,查找内容输入[!a-z ']*[a-z] ,替换为^t^&,全部替换。替换次数168

3CTRL-H,高级 选定“使用通配符”,查找内容输入[a-z]*^t ,替换为^t^&,全部替换。替换次数168次,然后删除第一步增加的一行内容

4、在文件前面打回车增加一行,CTRL-H,不使用通配符,查找内容输入^p*^t ,替换为^p,替换次数42

5、在第一行(第4步增加的一行),输入标题,共8个字段,每个字段中间用制表符(TAB)分隔,如 A B C D E F G H,保存

6、新建一个WORD文档,邮件合并文档类型为“目录”(2000下为分类),数据源为1-5步建立的文件,插入两行五列表格,分别在各单元插入合并域。其中第一列两个单元格用插入域-公式然后再修改域插入合并记录号,并设置计算公式, 域公式为:{={MERGEREC}*4-2 \*MERGEFORMAT}, 其他单元格直接插入BADCFEHG合并域(合并文档格式及数据源见附件)

7、执行邮件合并-合并为新文档

8、选定合并生成的新文档整个表格,按按CTRL+SHIFT+F9将域转换为文本

9、在选择整个表格的情况下,执行:格式-更改大小写,选“句首字母大写”

10、在前表最前面插入一行,打入相应的表头文字,选择第一行设置表格-标题行重复

Fieldsun 2005-7-9

(附件为方法二的邮件合并主文档和将原文件转换后合并数据源文件)

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?免费注册

x

TA的精华主题

TA的得分主题

发表于 2005-7-5 14:15 | 显示全部楼层

这个在实际中还是很有作用的,以下是我的答案

1CTRL-H,高级中 选定“使用通配符”,查找内容输入[!a-z ']*[a-z] ,替换为^t^&,全部替换。替换次数167

2CTRL-H,高级中 选定“使用通配符”,查找内容输入[a-z]*^t ,替换为^t^&,全部替换。替换次数167

3、选定全部内容,表格-转换-文本转换成表格,列数为9,文字分隔位置为“制表符”

4、在表格第一列第一个单元格输入2,选第二个单元格,表格-公式,在公式框中输入公式=COUNT(ABOVE)*2+2,然后将这个单元格内容复制到本列下的剩余单元格中

5、更新域操作:文件-打印(或CTRL-P),选任一个打印机打印(注意:工具-选项-打印中要选定“更新域”,最好是虚拟打印机或在打印中选择“打印到文件”,以免实际打印)

6、选择整个表格,按CTRL+SHIFT+F9将域转换为文本,

7、在选择整个表格的情况下,执行:格式-更改大小写,选“句首字母大写”

共替换次数167*2=334

TA的精华主题

TA的得分主题

发表于 2009-7-9 01:12 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
哎……感觉自己水平太差!与高手距离相差太远,得努力!

TA的精华主题

TA的得分主题

发表于 2010-8-9 09:25 | 显示全部楼层
实际的教学工作中经常用到。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-12-29 03:35 , Processed in 0.049303 second(s), 14 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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