Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - Помогите разобраться с повторяющимися данными в VBS

Ответить
Настройки темы
VBS/WSH/JS - Помогите разобраться с повторяющимися данными в VBS

Новый участник


Сообщения: 6
Благодарности: 0

Профиль | Отправить PM | Цитировать


Изменения
Автор: Boris26rus
Дата: 29-05-2013
Вложения
Тип файла: xlsx Ent.xlsx
(10.9 Kb, 6 просмотров)
Добрый вечер.
Я только учусь писать на VBS. Общий смысл такой - берем данные из Excel и переносим их в Word.
Проблема - в Excel-файле бывают несколько одинаковых строк, которые все переносятся в Word. Но мне не надо их переносить, если они одни и те же (например в Excel есть: Иванов
Петров
Иванов
- перенести нужно: "Иванов, Петров")
В VBS написал так:

IF objRec.Fields(2) = "Фамилия" THEN fio = fio1&chr(13)&objRec.Fields(3)&"," &chr(13)& "прож. по адресу:"


И получается так:
"Иванов
прож. по адресу:
Петров
прож. по адресу:
Иванов
прож. по адресу:"

А нужно:
"Иванов
прож. по адресу:
Петров
прож. по адресу:"

Помогите, пожалуйста!

Полный код:
Код: Выделить весь код
Set oArg = Wscript.Arguments
fName = oArg.Item(0)

Set objCon = CreateObject("ADODB.Connection")
Set objRec = CreateObject("ADODB.Recordset")

objCon.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source="&fName&";Extended Properties=""Excel 12.0 Xml;HDR=Yes;"";"
objRec.Open "Select * From [ReportData$]",objCon,3,3

Do Until objRec.EOF
	 	
	 IF objRec.Fields(2) = "Фамилия" THEN fio 	= fio&chr(13)&objRec.Fields(3)&"," &chr(13)& "прож. по адресу:"

 	 objRec.MoveNext
Loop

Set oWord = CreateObject("Word.Application")
oWord.Visible = True
Const wdReplaceAll = 2

Set oDoc = oWord.Documents.Open("C:\Данные\Фамилии.rtf")
Set oSel = oWord.Selection
oSel.Find.Forward = TRUE
oSel.Find.MatchWholeWord = TRUE

oSel.Find.Execute "fio"    	,,,,,,,,,fio     	,wdReplaceAll
oDoc.SaveAs("c:\Данные\Фамилии "&fio&".doc")

Отправлено: 23:32, 28-05-2013

 

Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Boris26rus, выложите образец документа Excel, выложите Ваш код. Целиком, а не одну строку.
Это сообщение посчитали полезным следующие участники:

Отправлено: 05:58, 29-05-2013 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
objRec.Open "SELECT DISTINCT * FROM [ReportData$]", objCon, 3, 3
SELECT (Transact-SQL)Выражение SELECT (Transact-SQL).
Это сообщение посчитали полезным следующие участники:

Отправлено: 22:10, 29-05-2013 | #3


Новый участник


Сообщения: 6
Благодарности: 0

Профиль | Отправить PM | Цитировать


Спасибо!
А как привязать это именно к переменной "fio"?
При запуске, когда много фамилий, выдает ошибку - "Слишком длинный строковый параметр".
Может подскажите как исправить.

Последний раз редактировалось Boris26rus, 30-05-2013 в 14:19.


Отправлено: 12:38, 30-05-2013 | #4


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Цитата Boris26rus:
А как привязать это именно к переменной "fio"? »
А причём тут переменная?

Цитата Boris26rus:
При запуске, когда много фамилий, выдает ошибку - "Слишком длинный строковый параметр". »
Выложите архив под паролем c документом на RGhost, ссылку на архив и пароль — в личку.

Отправлено: 15:01, 30-05-2013 | #5


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Boris26rus, проблема к запросу к рабочей книге не имеет отношения. Слишком длинная строка («por1») для использования в диалоге поиска и замены:
Код: Выделить весь код
oSel.Find.Execute "por1"   	,,,,,,,,,por1    	,wdReplaceAll
— вижу, Вы так и не добавили предикат «DISTINCT» в запрос.

Если добавить — то следующей ошибкой будет «Несоответствие типа» в:
Код: Выделить весь код
oSel.Find.Execute "raschet"	,,,,,,,,,raschet 	,wdReplaceAll
поскольку переменная «raschet» оказывается равна «Null».
Это сообщение посчитали полезным следующие участники:

Отправлено: 05:15, 31-05-2013 | #6


Новый участник


Сообщения: 6
Благодарности: 0

Профиль | Отправить PM | Цитировать


Iska, добрый день и спасибо!
Я «DISTINCT» вставил сразу, но как Вы и указали, стала возникать ошибка с переменной «raschet». Тогда я и спросил как можно привязать «DISTINCT» только к той переменной, которой нужен такой "фильтр" (самостоятельные эксперименты по "привязке" у меня были безрезультатны).
А вот по слишком длинной строке пробовал разбить так:

Код: Выделить весь код
Sub Replace(rtext,text)
	if len(text)>255 then
		oSel.Find.Execute rtext  ,,,,,,,,,"temp"   ,wdReplaceAll
		i=len(text)/250	
		if (i-FIX(i))>0 then i=FIX(i)+1
		z=1
		For y=1 to i
			stext=Mid(text,z,248) + " temp"
			oSel.Find.Execute " temp"  ,,,,,,,,,stext   ,wdReplaceAll
			z=y*248+1
		NEXT 
	else
		oSel.Find.Execute rtext  ,,,,,,,,,text   ,wdReplaceAll
	end if
	oSel.Find.Execute " temp"  ,,,,,,,,,""   ,wdReplaceAll
End Sub
- не помогло.
Не пойму почему переменная «raschet» равна «Null» и как избежать ошибки.

Отправлено: 12:09, 31-05-2013 | #7


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Вы спросили:
Цитата Boris26rus:
Проблема - в Excel-файле бывают несколько одинаковых строк, которые все переносятся в Word. Но мне не надо их переносить, если они одни и те же »
я показал, как избавиться от повторов. Весь же Ваш алгоритм я не рассматривал — он чересчур запутан и не очень логичен.

Отправлено: 20:29, 31-05-2013 | #8



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - Помогите разобраться с повторяющимися данными в VBS

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
VBS/WSH/JS - Помогите новичку разобраться со скриптом(vbs). Vector101 Скриптовые языки администрирования Windows 4 15-03-2013 16:08
VBS/WSH/JS - Помогите с VBS скриптом coptercor Программирование и базы данных 2 21-09-2011 08:48
VBS/WSH/JS - Помогите русифицироват *.vbs скрипт nod201 Скриптовые языки администрирования Windows 3 07-12-2009 10:53
VBS/WSH/JS - Помогите редактировать Autorun_Disable.vbs на Autorun_Enable.vbs nod201 Скриптовые языки администрирования Windows 0 05-12-2009 05:44
Разное - Помогите в работе з бинарными данными .bin BMW09121985 Программирование и базы данных 14 03-05-2009 22:13




 
Переход