Библиотеки: Библиотека для работы с COM-объектами.

 

Библиотека для работы с COM-объектами.:

Эта библиотека даёт возможность работать с COM-объектами, предоставленными некоторыми приложениями. Например: Excel, Word, Mathcad, Matlab. А также объект ADODB для работы с базами данных через драйвер ODBC. Библиотека работает и в MT4 и в MT5.

Автор: Koldun Zloy

 

У меня 64битное все

Наткнулся на "The program only works in a 32-bit terminal!"

Странно, что существует резон до сих пор использовать 32битное. Думал, что это уже давно кануло в лету

 
MT4 существует только 32-разрядный.
 
Огромное спасибо! Все работает, отличная работа!!! Уважуха. Если не трудно, простенький пример кода для Word  можете добавить ?
 

Очень простой пример работы с Word.

Допустим, мы хотим написать одно слово.

Назначить ему шрифт, размер, цвет и выравнивание по центру.

Первым делом запускаем Word.

Включаем запись макроса.

Делаем вручную, всё, что нам нужно.

Выключаем запись макроса.

После этого заходим в редактирование макроса.

Там мы увидим код нашего макроса на VB.
Sub Макрос1()
'
' Макрос1 Макрос
'
'
    Selection.Font.Name = "Arial"
    Selection.Font.Size = 20
    Selection.Font.Color = 5287936
    Application.Keyboard (1049)
    Selection.TypeText Text:="Сочинение"
    Selection.TypeParagraph
    Selection.MoveUp Unit:=wdLine, Count:=1
    Selection.ParagraphFormat.Alignment = wdAlignParagraphCenter
    ActiveDocument.SaveAs FileName:="Сочинение.docx", FileFormat:= _
        wdFormatXMLDocument, LockComments:=False, Password:="", AddToRecentFiles _
        :=True, WritePassword:="", ReadOnlyRecommended:=False, EmbedTrueTypeFonts _
        :=False, SaveNativePictureFormat:=False, SaveFormsData:=False, _
        SaveAsAOCELetter:=False
End Sub

В нём видно какие функции нужно вызывать и какие константы использовать.

Чтобы узнать значение константы, надо нажать на ней правую кнопку мыши, и выбрать в меню "Definition".


Затем переносим всё в MQL.

Для начала нужно создать документ.

Поскольку это не попало в макрос, воспользуемся справкой.

#include <ComObject.mqh>

const int wdAlignParagraphCenter = 1;

static ComObject* Word = NULL;

string fileName = TerminalInfoString( TERMINAL_COMMONDATA_PATH ) + "\\Сочинение.docx";

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
{
   HRESULT result = CoInitialize( 0 );
   if( result == S_OK ){
      Word = new ComObject( "Word.Application" );
      if( Word.isValid() ){
         ComObject Documents = Word.GetProperty( "Documents" );
         if( Documents.isValid() ){
            ComObject Document = Documents.Function( "Add" );   // Создание документа.
            if( Document.isValid() ){
               ComObject Selection = Word.GetProperty( "Selection" );
               if( Selection.isValid() ){
                  ComObject Font = Selection.GetProperty( "Font" );
                  if( Font.isValid() ){
                     Font.SetProperty( "Name", Variant( "Arial" ) );
                     Font.SetProperty( "Size", Variant( 20 ) );
                     Font.SetProperty( "Color", Variant( 5287936 ) );
                  }
                  ComObject ParagraphFormat = Selection.GetProperty( "ParagraphFormat" );
                  if( ParagraphFormat.isValid() ){
                     ParagraphFormat.SetProperty( "Alignment", Variant( wdAlignParagraphCenter ) );
                  }
                  Variant var = "Сочинение";
                  Selection.Function( "TypeText", var );
               }
               Document.Function( "SaveAs", Variant( fileName ) );
            }
         }
         Word.Function( "Quit" );
      }
      else {
         Print( "Word не обнаружен" );
      }
      delete Word;
      CoUninitialize();
   }
}
//+------------------------------------------------------------------+