powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Кто может реализовать код FoxPro в VB.NET
20 сообщений из 20, страница 1 из 1
Кто может реализовать код FoxPro в VB.NET
    #39135720
mau-rus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кто может реализовать код 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
Кто может реализовать код FoxPro в VB.NET
    #39135723
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Кто может реализовать код FoxPro в VB.NET
    #39135763
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Evaluate(lccommand) - выполнить код содержащийся в lccommand

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

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

Дальше ищешь в ворде очередную подстановку, находишь по Dictionary нужное значение и заменяешь.
...
Рейтинг: 0 / 0
Кто может реализовать код FoxPro в VB.NET
    #39137133
mau-rus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Видимо без 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
Кто может реализовать код FoxPro в VB.NET
    #39137268
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
mau-rusВидимо без FoxPro никуда.
Решил проблему
Если бы вместо куска непонятного кода Вы написали бы что у вас на входе и что надо на выходе, то никакой бы фокспро не понадобился
...
Рейтинг: 0 / 0
Кто может реализовать код FoxPro в VB.NET
    #39137768
mau-rus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
Кто может реализовать код FoxPro в VB.NET
    #39138123
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mau-rusЯ НЕ МОГУ РЕАЛИЗОВАТЬ ЭТО В VB.NET
Что конкретно не получается?

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

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

Я новичок в vb.net поэтому не могу сообразить что и как сделать
...
Рейтинг: 0 / 0
Кто может реализовать код FoxPro в VB.NET
    #39138167
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Кто может реализовать код FoxPro в VB.NET
    #39138175
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Инициализация
Код: 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
Кто может реализовать код FoxPro в VB.NET
    #39138198
mau-rus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima T,
Спасибо, буду пробовать.
...
Рейтинг: 0 / 0
Кто может реализовать код FoxPro в VB.NET
    #39138342
mau-rus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В итоге вот что получилось.

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

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


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