Гость
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Кто может реализовать код FoxPro в VB.NET / 20 сообщений из 20, страница 1 из 1
23.12.2015, 12:17
    #39135720
mau-rus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто может реализовать код FoxPro в VB.NET
Кто может реализовать код FoxPro в VB.NET

Код: vbnet
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.
Do While  Substr(lcfoundtext, 1, 1)="{" .And. Substr(lcfoundtext, LEN(lcfoundtext), 1)="}"
	lccommand = oWord.Selection.Text
	lccommand = Substr(lccommand, 1, Len(lccommand)-1)
	lccommand = Substr(lccommand, 2)
	TRY 
		lctypevar = Vartype(Evaluate(lccommand))
	CATCH 
		lctypevar = "U"
	ENDTRY
		Do Case
		Case lctypevar="N"
			oWord.Selection.Text = Alltrim(Str(Evaluate(lccommand)))
		Case lctypevar="C"
			oWord.Selection.Text = Alltrim(Evaluate(lccommand))
		Case lctypevar="D"
			oWord.Selection.Text = Dtoc(Evaluate(lccommand))
		Case lctypevar="T"
			oWord.Selection.Text = Ttoc(Evaluate(lccommand))
		Case lctypevar="Y"
			oWord.Selection.Text = Ltrim(Str(Evaluate(lccommand), 13, 2))
		OTHERWISE
		Messagebox("Не корректно задано описание реквизита  "+lccommand+ ;
				"  для типа данных  "+lctypevar+Chr(13)+ ;
				"Исправьте шаблон документа.", 48, "Предупреждение")
			EXIT
		ENDCASE
	oWord.Selection.Find.execute("\{*\}", , , .T., , , .T., 1)
	lcfoundtext = oWord.Selection.Text
 ENDDO
...
Рейтинг: 0 / 0
23.12.2015, 12:17
    #39135723
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто может реализовать код FoxPro в VB.NET
...
Рейтинг: 0 / 0
23.12.2015, 12:31
    #39135763
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто может реализовать код FoxPro в VB.NET
Evaluate(lccommand) - выполнить код содержащийся в lccommand

Этот код берет что-то из ворда (какие-то выражения), выполняет это что-то и пишет результат обратно в ворд. Пишет в соответствии с типом полученного (Do Case ...).

Надо отталкиваться от того что конкретно из ворда читается. Если что-то типа "Table.Field" то просто перенести, если какие-то выражения с фокспрошными функциями, то придется вордовские шаблоны править.
...
Рейтинг: 0 / 0
23.12.2015, 12:39
    #39135785
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто может реализовать код FoxPro в VB.NET
Вставь запись в лог и посмотри что там бывает.
Код: c#
1.
2.
3.
	...
	lccommand = Substr(lccommand, 2)
	StrToFile(lccommand + chr(13), 'lccommand.log', .T.)
...
Рейтинг: 0 / 0
23.12.2015, 12:53
    #39135829
mau-rus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто может реализовать код FoxPro в VB.NET
Функция EVALUATE() Вычисляет символьное выражение и возвращает результат
в VB.NET такой функции нет, поэтому прошу помощи
Сложный переход с Фокса на Net
...
Рейтинг: 0 / 0
23.12.2015, 12:59
    #39135847
mau-rus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто может реализовать код FoxPro в VB.NET
Этот код был написан давно для записи данных в Ворд по шаблону.
т.е. {переменная} и в зависимости от типа переменной вычисляется и возвращается выражение обратно в Ворд
...
Рейтинг: 0 / 0
23.12.2015, 13:04
    #39135866
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто может реализовать код FoxPro в VB.NET
Там может быть не только {переменная}, но и выражение {left(переменная1, 3) + " " + переменная2}
т.е. может быть вызов любых функций фокса, в т.ч. и самописных.
...
Рейтинг: 0 / 0
23.12.2015, 13:19
    #39135907
mau-rus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто может реализовать код FoxPro в VB.NET
Да не суть.
Как тоже самое сделать в VB.NET?
...
Рейтинг: 0 / 0
23.12.2015, 13:38
    #39135951
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто может реализовать код FoxPro в VB.NET
mau-rusФункция EVALUATE() Вычисляет символьное выражение и возвращает результат
в VB.NET такой функции нет, поэтому прошу помощи
Сложный переход с Фокса на Netесли символьное выражение на фоксе, то еще и документы придется переписывать.
...
Рейтинг: 0 / 0
23.12.2015, 13:39
    #39135954
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто может реализовать код FoxPro в VB.NET
mau-rusДа не суть.
Как тоже самое сделать в VB.NET?самый простой способ: http://www.experts-exchange.com/questions/20989306/Vb-Net-expression-evaluation.html
...
Рейтинг: 0 / 0
23.12.2015, 13:41
    #39135958
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто может реализовать код FoxPro в VB.NET
Подсовывай на вход этой функции заранее подготовленный Dictionary<string, string> где ключ - твоя вордовская {переменная}, значение - ее значение, т.е. на что менять.

Дальше ищешь в ворде очередную подстановку, находишь по Dictionary нужное значение и заменяешь.
...
Рейтинг: 0 / 0
24.12.2015, 14:15
    #39137133
mau-rus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто может реализовать код FoxPro в VB.NET
Видимо без FoxPro никуда.
Решил проблему
Код: vbnet
1.
2.
3.
4.
5.
Imports VisualFoxpro
Public Sub FoxPro()
        Dim Fox As New VisualFoxpro.FoxApplication
        Fox.DoCmd("Do G:\WORD\word.prg")
End Sub
...
Рейтинг: 0 / 0
24.12.2015, 15:42
    #39137268
Cat2
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто может реализовать код FoxPro в VB.NET
mau-rusВидимо без FoxPro никуда.
Решил проблему
Если бы вместо куска непонятного кода Вы написали бы что у вас на входе и что надо на выходе, то никакой бы фокспро не понадобился
...
Рейтинг: 0 / 0
25.12.2015, 07:40
    #39137768
mau-rus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто может реализовать код FoxPro в VB.NET
Cat2Если бы вместо куска непонятного кода Вы написали бы что у вас на входе и что надо на выходе, то никакой бы фокспро не понадобился
ВОТ КОД FOXPRO
КОТОРЫЙ ЗАМЕНЯЕТ ТЕКСТ В ВОРДЕ ПО ШАБЛОНУ
ПРИМЕР ШАБЛОНА
{aa}
{bb}
{cc}

Код: vbnet
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.
CLEAR
        
#include word.h

PUBLIC oWord As "Word.Application"

Try
	oWord = Getobject(, "Word.Application")
Catch
	If Type("oWord")<>"O" .Or. Isnull(oWord)
		oWord = Createobject("Word.Application")
	Endif
ENDTRY
oWord.Visible = .F.
Local lcFile, loComDialog
Private plCancel
loComDialog = Newobject( "mscomdlg.commondialog" )
IF oword.Application.Version  >=[12]
loComDialog.Filter = "Документ Microsoft Word|*.docx"
else
loComDialog.Filter = "Документ Microsoft Word|*.doc"
endif
loComDialog.ShowOpen()
lcFile = loComDialog.FileName
If Empty(lcFile)
	Return .F.
ENDIF

Local aa,bb,cc
aa = 'Какой то текст'
bb= 'Еще одна строка'
cc= Date()

public loDoc
loDoc = oWord.documents.Open(lcFile)
Local lcfoundtext, lccommand
oWord.Selection.Find.execute('\{*\}', , , .T., , , .T., 1)
lcfoundtext = oWord.Selection.Text

Do While  Substr(lcfoundtext, 1, 1)='{' .And. Substr(lcfoundtext,  ;
			LEN(lcfoundtext), 1)='}'
			
	lccommand = oWord.Selection.Text
	lccommand = Substr(lccommand, 1, Len(lccommand)-1)
	lccommand = Substr(lccommand, 2)

	TRY 
		lctypevar = Vartype(Evaluate(lccommand))
	CATCH 
		lctypevar = "U"
	ENDTRY
	
	Do Case
		Case lctypevar="N"
			oWord.Selection.Text = Alltrim(Str(Evaluate(lccommand)))
		Case lctypevar="C"
			oWord.Selection.Text = Alltrim(Evaluate(lccommand))
		Case lctypevar="D"
			oWord.Selection.Text = Dtoc(Evaluate(lccommand))
		Case lctypevar="T"
			oWord.Selection.Text = Ttoc(Evaluate(lccommand))
		Case lctypevar="Y"
			oWord.Selection.Text = Ltrim(Str(Evaluate(lccommand), 13, 2))
		OTHERWISE
		Messagebox("Не корректно задано описание реквизита  "+lccommand+ ;
				"  для типа данных  "+lctypevar+Chr(13)+ ;
				"Исправьте шаблон документа.", 48, "Предупреждение")
			EXIT
		ENDCASE
	oWord.Selection.Find.execute('\{*\}', , , .T., , , .T., 1)
	lcfoundtext = oWord.Selection.Text
 	
ENDDO
End = oWord.activedocument.bookmarks("\ENDOFDOC").Select
oWord.selection.goto(wdGoToPage, wdGoToAbsolute)
oWord.Visible = .T.
oWord.Application.WindowState = 1
oWord.Activate()



Я НЕ МОГУ РЕАЛИЗОВАТЬ ЭТО В VB.NET
...
Рейтинг: 0 / 0
25.12.2015, 13:41
    #39138123
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто может реализовать код FoxPro в VB.NET
mau-rusЯ НЕ МОГУ РЕАЛИЗОВАТЬ ЭТО В VB.NET
Что конкретно не получается?

Тут все просто:
открыть вордовский файл. Искать в цикле очередное вхождение {переменная} и заменять на значение переменной.

Все что начинается на oWord. это вызовы методов ворда, т.е. в любом другом ЯП будут точно также вызываться.
...
Рейтинг: 0 / 0
25.12.2015, 13:55
    #39138157
mau-rus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто может реализовать код FoxPro в VB.NET
Dima T,
Как мне реализовать функцию Evaluate(lccommand) в vb.net
в Fox-е эта функция оценивает выражение и возвращает результат.

Я новичок в vb.net поэтому не могу сообразить что и как сделать
...
Рейтинг: 0 / 0
25.12.2015, 14:02
    #39138167
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто может реализовать код FoxPro в VB.NET
...
Рейтинг: 0 / 0
25.12.2015, 14:08
    #39138175
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто может реализовать код FoxPro в VB.NET
Инициализация
Код: c#
1.
2.
3.
4.
5.
6.
7.
Dim values As New Dictionary(Of String, String)
//aa = 'Какой то текст'
values.Add("aa", "Какой то текст")
//bb= 'Еще одна строка'
values.Add("bb", "Еще одна строка")
//cc= Date()
values.Add("cc", DateTime.Today.ToString())


Использование
Код: c#
1.
2.
lccommand = oWord.Selection.Text
oWord.Selection.Text = values(lccommand)


вот и весь evaluate()

PS на VB не пишу, мог немного в синтаксисе напутать.
...
Рейтинг: 0 / 0
25.12.2015, 14:32
    #39138198
mau-rus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто может реализовать код FoxPro в VB.NET
Dima T,
Спасибо, буду пробовать.
...
Рейтинг: 0 / 0
25.12.2015, 17:08
    #39138342
mau-rus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто может реализовать код FoxPro в VB.NET
В итоге вот что получилось.

Все работает, но буду еще думать как улучшить.

Код: c#
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.
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim dialog As New OpenFileDialog With {
                        .Title = "Открытие шаблона",
                         .Filter = "Шаблон Microsoft Word 2003 (*.doc)|*.doc;|Шаблон Microsoft Word 2007 (*.docx)|*.docx",
                         .FilterIndex = 2}

        If dialog.ShowDialog = DialogResult.OK Then
            Dim oWord As New Microsoft.Office.Interop.Word.Application
            oWord.Documents.Open(dialog.FileName)
            oWord.Visible = False
            oWord.Selection.Find.Execute("\{*\}", , , True, , , True, 1)
            lcfoundtext = oWord.Selection.Text
            While lcfoundtext.Substring(0, 1) = "{" And lcfoundtext.Substring(Len(lcfoundtext) - 1) = "}"
                lccommand = oWord.Selection.Text
                lccommand = lccommand.Substring(1, Len(lccommand) - 2)
                TextBox1.Text = lccommand
                Dim values As New Dictionary(Of String, String)
                values.Add("name", "Какой то текст")
                values.Add("title", "Еще одна строка")
                values.Add("cc", DateTime.Today.ToString())
                oWord.Selection.Text = values(lccommand)
                oWord.Selection.Find.Execute("\{*\}", , , True, , , True, 1)
                lcfoundtext = oWord.Selection.Text
            End While
            oWord.Visible = True
            oWord.Selection.GoTo(1, 1)
            oWord.Application.WindowState = WdWindowState.wdWindowStateMaximize
            oWord.Activate()
        End If
    End Sub


...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Кто может реализовать код FoxPro в VB.NET / 20 сообщений из 20, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]