WPS文件转换成WORD格式

 

    我们当然不会在Word 中重新输入已在WPS 系统中录入的文件资料。因此,将WPS 文件格式转换为Word格式,是低版本的WPS(WPS97的文件转换功能要强得多)与Word 共享资源的必然要求。
  采用手工转换方法,不仅要将每个需要转换的WPS文件转换为文本文件,而且需要在Word 中完成各种繁琐的查找、替换操作。
  当设定的左边界不为1、或者段落中有连续的两个空格(确实需要)、或者存在因WPS 排版形成的软空格时,这种方法就会产生错误的结果,必须进行修正。
  上述方法显然比较费时费力,且不太可靠,有没有更好的解决办法呢?其实,利用可视化编程工具Delphi 3强大的低级文件处理功能,编写一个小程序,就能很轻松将WPS 文件转换为Word 能够正确读写的文本文件格式。
  编程思路
  分析一下WPS 文件格式和Word 能够正确读写的文本文件格式,就会明白,WPS 文件不仅有1KB的文件头,而且还包含有字体、字号、软硬回车符、分页符、软空格(因自动排版产生)等控制符,在所有这些符号中,Word 仅能正确读取硬回车,其他符号都将变为乱码。
  为了避免出现上述问题,我们在编制程序时,可以采用以下设计思路:读入WPS 文件,跳过文件的1KB文件头,忽略除硬回车外的各类控制符,将其余的字节写入新文件。
  具体方法
  在Delphi 3中新建一个窗体,在窗体中加入两个编辑框和一个Caption为“转换”的位图按钮,其中编辑框Edit1用于输入源文件名,另一个编辑框Edit2用于输入转换的结果文件名,在“转换”按钮的Onclick 事件中输入以下代码:
procedure TMainBox.BitBtn1Click(Sender :TObject);
var source ,target :integer ;
filesizes :longint ;
i :integer ;
x,x1,x2:byte ;
ss :string ;
begin source :=fileOpen(Edit1.Text ,0);
if source =-1then begin
MessageDlg(′打开源文件出错,请核对!′,mt Warn—
ing ,[mbOk],0);
Exit ;
end ;
fileread(source ,x1,1);{判断WPS 版本号}
fileread(source ,x2,1);
if ((x1<>$1)and (x1<>$2))or (x2<>$ff)
then begin
MessageDlg(′不是WPS 文件,请核对!′,mt Warn—
ing ,[mbOk],0);
fileclose(source);Exit ;
end ;
if FileExists(Edit2.Text)then begin
i :=MessageDlg(′目标文件已存在,是否覆盖之?′,
mt Warning ,mbOkCancel ,0);
ifi =mrCancel then begin
FileClose(source);
Exit end ;
end ;
target :=fileCreate(Edit2.Text);
iftarget =-1then begin
MessageDlg(′建立目标文件出错,请核对!′,mt—
Warning ,[mbOk],0);
FileClose(source);
Exit ;end ;filesizes :=fileseek(source ,0,
2);fileseek(source ,$400,0);
{跳过1KB文件头}
while fileseek(source ,0,1)
<filesizes do begin
fileread(source ,x,1);
if (x=$0c)or (x=$8d)or
((x>=$90)and (x<=$9f))
then {屏蔽分页符、
软回车和各类控制符号}
fileread(source ,x,1)
else {屏蔽软空格}
if x<>$7fthenfilewrite(target ,x,1);
end ;
fileclose(source);
fileclose(target);
Edit1.Text :=′′;
Edit2.Text :=′已转换完成′;
end ;最后,按F9编译,即可得到一个可执行文件,用它来进行转换,一般的文件仅需要几秒钟就可完成。
  (湖北省枝江市委办公室曹祖权443200)