我将一个.DOC文件转存成.txt文件,在Word中查看宏命令的VB代码如下:
Sub 测试保存()
'' 测试保存 Macro
' 宏在 2005-3-7 由 Bryantd 录制
'    ChangeFileOpenDirectory "E:\"
    ActiveDocument.SaveAs FileName:="test.txt", FileFormat:=wdFormatText, _
        LockComments:=False, Password:="", AddToRecentFiles:=True, WritePassword _
        :="", ReadOnlyRecommended:=False, EmbedTrueTypeFonts:=False, _
        SaveNativePictureFormat:=False, SaveFormsData:=False, SaveAsAOCELetter:= _
        False, Encoding:=936, InsertLineBreaks:=False, AllowSubstitutions:=False, _
         LineEnding:=wdCRLF
End Sub
用OLE在Delphi中应该怎样实现?
  WordApp:=CreateOleObject('Word.Application');
  WordApp.Documents.Open('e:\test.doc');
  WordApp.Visible:=False;
  ……………………//就是这段代码应该怎么写呢????
  WordApp.Documents.Close;
  WordApp.Quit;
  ShowMessage('转存完毕!')

解决方案 »

  1.   

    WordApp.ActiveDocument.SaveAs(FileName:='test.txt', FileFormat:=wdFormatText, _
            LockComments:=False, Password:='', AddToRecentFiles:=True, WritePassword :='', ReadOnlyRecommended:=False, EmbedTrueTypeFonts:=False,         SaveNativePictureFormat:=False, SaveFormsData:=False, SaveAsAOCELetter:=False, Encoding:=936, InsertLineBreaks:=False, AllowSubstitutions:=False,LineEnding:=wdCRLF);
      

  2.   

    这样写不行!SaveAs不被支持…………
      

  3.   

    aWord : Variant;aWord := WordApp.Documents.Open('e:\test.doc');
    aWord.SaveAs(……); 
      

  4.   

    //录到什么宏,就执行什么宏
    //参考如下代码
    var
      WordApp: OleVariant;
      vVBComponents: OleVariant;
      I: Integer;
    begin
      WordApp := CreateOleObject('Word.Application');
      WordApp.Visible := False;
      WordApp.Documents.Open('e:\test.doc');  vVBComponents := WordApp.VBE.ActiveVBProject.VBComponents;
      with TStringList.Create do try
        Text :=
    'Sub MyMacro()'#13#10 +
    '    ActiveDocument.SaveAs FileName:="e:\test.txt", FileFormat:= _'#13#10 +
    '        wdFormatUnicodeText, LockComments:=False, Password:="", AddToRecentFiles _'#13#10 +
    '        :=True, WritePassword:="", ReadOnlyRecommended:=False, EmbedTrueTypeFonts _'#13#10 +
    '        :=False, SaveNativePictureFormat:=False, SaveFormsData:=False, _'#13#10 +
    '        SaveAsAOCELetter:=False'#13#10 +
    'End Sub'#13#10;
        for I := 1 to Count do
          vVBComponents.Item(2).CodeModule.InsertLines(I, Strings[I - 1]);
        WordApp.Run('MyMacro');
        vVBComponents.Item(2).CodeModule.DeleteLines(1, Count);
      finally
        Free;
      end;
      WordApp.Documents.Close;
      WordApp.Quit;
      ShowMessage('转存完毕!')
    end;
      

  5.   

    我想我不是要这样的思路,你可能误解了。我明白您的意思,你是想通过Delphi调用Word里的宏命令对吧??我之所以要再Word里录制宏命令,就是想通过VBA的代码来做一下参考,用OLE直接调用Word,而不是其中的宏。因为我以前写过这样的程序:(查看一个Word文件的模版信息)
      WordApp:=CreateOleObject('Word.Application');
      WordApp.Documents.Open('e:\test.doc');
      WordApp.Visible:=False;
      VTemplate:=WordApp.ActiveDocument.AttachedTemplate;
      Template:=VTemplate.Name;
      WordApp.Documents.Close;
      WordApp.Quit;
      ShowMessage('这个文件的模版是'+Template)
    所以我想要的是这个思路。
      

  6.   

    关于变量声明TempDoc,NewTempDoc,TempWord,TempEmpty:OleVariant;
    关于打开TempEmpty := EmptyParam;
         TempDoc := EmptyParam;
         NewTempDoc := True;
         try
           Wordapplication1.Connect;
         except
           MessageDlg('无法打开Word,请确认已安装Word。', mtError, [mbOk], 0);
           Abort;
         end;
         //打开指定WORD文档
         TempWord := Edit1.Text ;
         //WordApplication1.Visible := True;
         WordApplication1.Documents.Open(TempWord,TempEmpty,TempEmpty,
                             TempEmpty,TempEmpty,TempEmpty,TempEmpty,
                             TempEmpty,TempEmpty,TempEmpty);关于保存       try
             wordapplication1.ChangeFileOpenDirectory('C:\My Documents');
             Temp1 := 'b.rtf';
             Temp2 := wdFormatDocument;
             Temp3 := '';
             Temp4 := True;
             TempW := False;
             WordApplication1.ActiveDocument.SaveAs(Temp1,Temp2,TempW,
                         Temp3,Temp4,Temp3,TempW,TempW,TempW,TempW,TempW);
             wordApplication1.Quit;
             WordApplication1.Disconnect;
             showmessage('保存成功');      except
             on E: Exception do
             begin
             Showmessage(E.Message);
             WordApplication1.Disconnect;
             end;
           end;大家见笑,交流研究
      

  7.   

    再把你的宏的FileName:="test.txt", FileFormat:=wdFormatText, _
            LockComments:=False, Password:="", AddToRecentFiles:=True, WritePassword _
            :="", ReadOnlyRecommended:=False, EmbedTrueTypeFonts:=False, _
            SaveNativePictureFormat:=False, SaveFormsData:=False, SaveAsAOCELetter:= _
            False, Encoding:=936, InsertLineBreaks:=False, AllowSubstitutions:=False, _
             LineEnding:=wdCRLF
    在参数中对号入座,是False的对相应的tempn参数赋false,是数字的赋数字
      

  8.   

    小小大哥,你的程序还是用到了COM吧?用了控件WordApplication阿。能用OLE解决问题吗???
      

  9.   

    恭喜你,再就是补充说一下,在这里其实用OLE和用控件是一样的,只是呈现在开发人员面前的表现形式不同罢了。
      

  10.   

    恩,都是这样说。不过理论上OLE能够全面地利用对象的所有属性,而控件可能还不能完全做到这一点。另外我怎么给您加分?
      

  11.   

    xuxiaozhao_3411(小小)提的方法不错!