2、直接插入排版法 这种方法是将选项A与选项C作为同一行写入、选项B与选项D作为同一行写入,关键在于要求上一行的C选项与下一行的D选项要求对齐,定位方法是在选项A的末尾与选项C、选项B的末尾与选项D之间插入若干个制表位,模拟手工调整的方法进行对齐。但上、下行要分别插入多少个制表位才能对齐呢?这要借助于Selection对象的Information属性进行检测。Selection.Information(wdHorizontalPositionRelativeToPage)可以返回指定的所选内容或区域的水平位置,该位置是所选内容或区域的左边与页面的左边之间的距离,以磅为单位(72磅 = 1英寸)。具体方法是每插入一个制表位就将选定区域收缩为选定区域后一个字符,同时检测它距页面的左边之间的距离,直到距离达到某个设定值时就停止插入。具体程序如下:
* q* `" e% H+ k" {0 F# {7 ]) c; { insTabIndent "A) " + mObj.ChoiceA, 0 '写入选项A
% B' J2 T8 e( R3 x; j x = appObj.ActiveDocument.Content.Paragraphs.Count – 1/ O7 i, S+ i7 {; Z7 K# F, @3 B5 y
'x记录下选项A所在的段落数" H: e/ |' z8 w. F8 m+ B
'每次循环插入一个制表位,并在循环条件中进行位置检测4 X, |, x+ J# Y* D" o' L6 |
Do4 T' V/ ] ?: y" v; N/ B# O
Set tempRange = appObj.ActiveDocument.Range(appObj.ActiveDocument.Content.Paragraphs(x). _4 ~1 U2 |, N# N0 R+ f
Range.End - 1, appObj.ActiveDocument.Content.Paragraphs(x).Range.End)
' _' i$ W: C0 N, W tempRange.Select
" a% y' d& Q8 Z: a2 ~4 G Selection.TypeText vbTab '在选项A的内容后插入一个制表位8 f3 T4 Y. w! v+ K# s% U9 _
Set tempRange = appObj.ActiveDocument.Range(appObj.ActiveDocument.Content.Paragraphs(x). _, G% B" g( t" ]+ q8 A
Range.End - 1, appObj.ActiveDocument.Content.Paragraphs(x).Range.End)
0 M T& U x) f5 |' Q- t tempRange.Select '选定区域设为当前区域的最后位置5 D! z8 G5 N5 V6 p, p
Loop While (Selection.Information(wdHorizontalPositionRelativeToPage) < 280)
) I+ Y+ \5 h5 o( v* W% | '当检测到写入点位置距与页面左边的距离超过280磅时停止插入制表位
" ^3 G9 a7 L# Y+ m Selection.TypeText "C) " + mObj.ChoiceC '写入选项C
+ J5 [8 a# @: k- B, B9 V1 ]5 M- ~ '以下处理下一行的选项B和选项D,方法同上
% f) Y; E, T- r7 E insTabIndent "B) " + mObj.ChoiceB, 0 '写入选项B+ Z Z9 `+ L5 F% F4 ~9 b7 @
x = appObj.ActiveDocument.Content.Paragraphs.Count - 1
) j% H' z- K" F7 D9 ^ Do
3 d L' I* V# c/ g Set tempRange = appObj.ActiveDocument.Range(appObj.ActiveDocument.Content.Paragraphs(x). _! Y8 m/ L1 g" Y H# S8 P ~2 u% k) m
Range.End - 1, appObj.ActiveDocument.Content.Paragraphs(x).Range.End)
i7 l( f0 b8 S( B; d: I# a7 V$ [ tempRange.Select$ m. u: {1 |: A# h9 Z
Selection.TypeText vbTab) ]$ o9 @5 x4 G1 A; O3 W& U
Set tempRange = appObj.ActiveDocument.Range(appObj.ActiveDocument.Content.Paragraphs(x). _
$ F& i' ^5 U& @+ R4 R Range.End - 1, appObj.ActiveDocument.Content.Paragraphs(x).Range.End); Z, a) T3 G( D( S6 H
tempRange.Select
- p; T F! h8 x5 C C" @: P Loop While (Selection.Information(wdHorizontalPositionRelativeToPage) < 280)
/ x6 t L' h6 {! F, E Selection.TypeText "D) " + mObj.ChoiceD '写入选项D6 Q# L" J$ Q/ J, R$ k
appObj.ActiveDocument.Content.InsertParagraphAfter
% K2 U% K, M R- P 五、结语
* y' k; [0 ]0 E, }( H 前述两种选择题的排版方式均已在实际的试卷自动生成系统的排版应用中进行实测,测试表明两种方法都能得到较为规范、美观的排版效果。分节分栏法实现思想较为简单,但由于生成的文档中有大量的分节符,如果对于生成的文档要作手工调整,可能会带来一点麻烦;直接插入排版法的好处是不分节,便于后期的手工调整,但生成文档的速度稍慢。 |