Понадобилось мне упростить работу с бланками в Отделе кадров. Все «рыбы» бланков были набиты в Ворде. Пришлось полазить по форуму, но вся информация била разрозненная. Так что для новичков (кем я тоже являюсь в Фоксе) я собрал все в один класс. Надеюсь, кому пригодиться. Профи – сильно не пинайте, но критику с удовольствием приму.
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
**********************************************************
* Работа с Микрософт Вордом.
* ToDo:**********************************************************
* Создаем новый документ MS WORD на базе ранее созданного шаблона
LOCAL loWord as TMSWord
loWord = CREATEOBJECT( [TMSWord] )
loWord.AddDoc()
loWord.SetTextToDoc("Номер заявки: ##NZav#^", .T.)
loWord.SaveDocAs("c:\test2.doc")
loWord.CloseDoc()
loWord.OpenDoc("c:\test2.doc")
loWord.VisibleWord( .T. )
loWord.StartOfDoc()
loWord.FindAndPasteTextDoc("##NZav#^", "1 239kgr")
loWord.PrintDialogWord()
WAIT
loWord.SaveDocAs("c:\test22.doc")
loWord.CloseDoc()
RELEASE loWord
**********************************************************
* Класс работы с Вордом.
* [ 27 . 09 . 2005 ] v 1 . 4 /rf1/
**********************************************************
DEFINE CLASS TMSWord as Custom
PROTECTED m_pMSWord
m_pMSWord = NULL
&& --- Печатаем напрямую, без диалогов. Можно задать и другие параметры.
PROCEDURE PrintOutDoc( NumCopies as Integer )
* Если не указали кол-во копий печатаем одну.
IF PARAMETERS()< 1
this.m_pMSWord.ActiveDocument.PrintOut()
ELSE
this.m_pMSWord.ActiveDocument.PrintOut( NumCopies )
ENDIF
ENDPROC
&& --- Открывает диалог печати.
PROCEDURE PrintDialogWord
* Const wdDialogFilePrint= 88
this.m_pMSWord.Dialogs.Item( 88 ).Show()
ENDPROC
&& --- Находжим (вперед) текст и заменяем его.
PROCEDURE FindAndPasteTextDoc( findtext as string , pastetext as string)
this.m_pMSWord.Selection.Find.Forward = .T.
this.m_pMSWord.Selection.Find.Text = findtext
* -
* - Если нашли выражение, то заменяем его.
IF this.m_pMSWord.Selection.Find.Execute()
this.m_pMSWord.Selection.Text = pastetext
ENDIF
ENDPROC
&& --- Удаляем выделенный текст и вставляем новый.
PROCEDURE PasteTextDoc( txt as string )
this.m_pMSWord.Selection.Delete()
this.m_pMSWord.Selection.InsertAfter(txt)
ENDPROC
&& --- Находим текст (вперед)
PROCEDURE FindTextDoc( txt as string ) as Logical
this.m_pMSWord.Selection.Find.Forward = .T.
this.m_pMSWord.Selection.Find.Text = txt
RETURN this.m_pMSWord.Selection.Find.Execute()
ENDPROC
&& --- В начало документа.
PROCEDURE StartOfDoc
this.m_pMSWord.Selection.End = 0
this.m_pMSWord.Selection.Start = 0
ENDPROC
&& --- В конец документа.
PROCEDURE EndOfDoc
this.m_pMSWord.ActiveDocument.Range.Select()
this.m_pMSWord.Selection.Start = this.m_pMSWord.Selection.End
ENDPROC
&& --- Открываем документ.
PROCEDURE OpenDoc( filename as string )
this.m_pMSWord.Documents.Open(filename)
ENDPROC
&& --- Отображать Ворд на экране.
PROCEDURE VisibleWord( vis as Logical )
this.m_pMSWord.Visible = vis && .T. - Делаем созданный документ видимым
ENDPROC
&& --- Сохранение текста.
PROCEDURE SaveDocAs( filename as string )
this.m_pMSWord.ActiveDocument.SaveAs( filename )
ENDPROC
&& --- Запись текста после курсора.
PROCEDURE SetTextToDoc( txt as string, insertAfter as Logical )
* вставлять ли текст после курсора или до.
IF insertAfter
this.m_pMSWord.ActiveDocument.Range. InsertAfter(txt)
ELSE
this.m_pMSWord.ActiveDocument.Range. InsertBefore(txt)
ENDIF
ENDPROC
&& --- Создание пустого документа
PROCEDURE AddDoc
this.m_pMSWord.Documents.Add() &&'Полный_путь_доступа'+'Имя_файла_шаблона.dot')
ENDPROC
&& --- Закрытие документа
PROCEDURE CloseDoc
this.m_pMSWord.ActiveDocument.Close()
ENDPROC
&& --- Соединение с вордом.
PROCEDURE Init
this.m_pMSWord = CREATEOBJECT( [WORD.APPLICATION] )
ENDPROC
&& --- Закрытие ворда.
PROCEDURE Destroy
this.m_pMSWord.Quit()
ENDPROC
ENDDEFINE