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

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » Любой язык - [решено] Создание этикетки товара в .doc из данных в xls

Ответить
Настройки темы
Любой язык - [решено] Создание этикетки товара в .doc из данных в xls

Пользователь


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

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


Добрый день коллеги!
Есть небольшая задача.
В документе формата .doc есть шаблон этикетки с динамическими полями. Эти поля должны заполняться из файла .xls.
Вот так выглядит этикетка (желтым помечены динамические поля)

А так выглядит файл .xls

Таких этикеток обычно от 500 до 700 штук.
Готов оценить работу в $)) Скажите "сколько вешать в граммах")))

Отправлено: 13:39, 16-05-2017

 

Ветеран


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

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


Заменить места, куда должно подставляться на значения [[Number]],[[RollN]],[[VCode]],[[RLength]]
Формат: wdFormatDocument97
Название файла: Номер рулона.doc

Наличие Word,Excel, PowerShell 2+:

Код: Выделить весь код
# Входные файлы
$fWord = "C:\Doc\MyTemplate.doc"
$tmpPath = "C:\Doc\"
$fExcel = "C:\Doc\File.xls"

# Параметры замены
$ReplaceAll = 2 
$FindContinue = 1 
$MatchCase = $False 
$MatchWholeWord = $True 
$MatchWildcards = $False 
$MatchSoundsLike = $False 
$MatchAllWordForms = $False 
$Forward = $True 
$Wrap = $FindContinue 
$Format = $False 


$MSWord = New-Object -ComObject Word.Application 
$MSExcel = New-Object -ComObject Excel.Application
$MSExcel.DisplayAlerts = $False
$wb = $MSExcel.Workbooks.Open($fExcel)
$ws = $wb.Worksheets.Item(1)

#Количество строк
$mainRng = $ws.UsedRange.Cells 
$xRow = $mainRng.Rows.Count  

for($i=2; $i -le $xRow; $i++) 
{
	$MSWord.Documents.Open($fWord) 
		 
	#[[Number]] 
	$FindText = "[[Number]]" 
	$ReplaceText = $ws.Cells.Item($i,4).Value2 
	$MSWord.Selection.Find.Execute($FindText, $MatchCase, $MatchWholeWord, $MatchWildcards, $MatchSoundsLike, $MatchAllWordForms, $Forward, $Wrap, $Format, $ReplaceText, $ReplaceAll) 
	 
	#[[RollN]] 
	$FindText = "[[RollN]]" 
	$ReplaceText = $ws.Cells.Item($i,1).Value2  
	$MSWord.Selection.Find.Execute($FindText, $MatchCase, $MatchWholeWord, $MatchWildcards, $MatchSoundsLike, $MatchAllWordForms, $Forward, $Wrap, $Format, $ReplaceText, $ReplaceAll) 

	#[[VCode]] 
	$FindText = "[[VCode]]" 
	$ReplaceText = $ws.Cells.Item($i,3).Value2  
	$MSWord.Selection.Find.Execute($FindText, $MatchCase, $MatchWholeWord, $MatchWildcards, $MatchSoundsLike, $MatchAllWordForms, $Forward, $Wrap, $Format, $ReplaceText, $ReplaceAll) 
	 
	#[[RLength]] 
	$FindText = "[[RLength]]" 
	$ReplaceText = $ws.Cells.Item($i,2).Value2 
	$MSWord.Selection.Find.Execute($FindText, $MatchCase, $MatchWholeWord, $MatchWildcards, $MatchSoundsLike, $MatchAllWordForms, $Forward, $Wrap, $Format, $ReplaceText, $ReplaceAll) 
	 

	$saveFormat = [Microsoft.Office.Interop.Word.WdSaveFormat]::wdFormatDocument97
	$path = Join-Path $tmpPath "$($ws.Cells.Item($i,1).Value2).doc"
	$MSWord.ActiveDocument.SaveAs([ref]$path, [ref]$saveFormat) 

	$MSWord.Documents.Close()
}   

$MSWord.Quit() 
$MSExcel.Quit()

[System.Runtime.InteropServices.Marshal]::ReleaseComObject($MSExcel)
[System.Runtime.InteropServices.Marshal]::ReleaseComObject($MSWord)
Это сообщение посчитали полезным следующие участники:

Отправлено: 14:29, 16-05-2017 | #2



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

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


Ветеран


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

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


zhuk09, Ваша задача, в принципе, решается и без программирования, обычным слиянием.

Отправлено: 15:00, 16-05-2017 | #3


Пользователь


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

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


Цитата Kazun:
Заменить места, куда должно подставляться на значения [[Number]],[[RollN]],[[VCode]],[[RLength]]
Формат: wdFormatDocument97
Название файла: Номер рулона.doc »
Завтра буду пробовать!
Спасибо огромное за оперативный ответ)! Если что-то не получится, обязательно напишу)

Цитата Iska:
Ваша задача, в принципе, решается и без программирования, обычным слиянием. »
Можно об этом по подробней?!

Последний раз редактировалось zhuk09, 17-05-2017 в 13:17.


Отправлено: 17:40, 16-05-2017 | #4


Ветеран


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

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


Цитата zhuk09:
Модно об этом по подробней?! »
Модно у меня навряд ли получится, тут талант нужо́́н .

В принципе, тут ничего особо не изменилось за последние четверть века: готовится источник данных (другой документ Word с таблицей, таблица Excel, база данных Access, SQL, текстовый файл и т.п.), готовится основной документ слияния Word, в нём расставляются поля слияния, затем выполняются определённые действия над ним по слиянию, полученный результат либо сразу распечатывается, либо сохраняется, либо рассылается по почте. Отличия в мелких деталях, да в интерфейсе в зависимости от используемой версии Microsoft Office.

Например: Слияние данных MS Excel и MS Word - Интеграция Excel с другими приложениями - Эффективная работа в Excel - Статьи об Excel - Мир MS Excel — только в Вашем случае, возможно, выбор наклеек вместо писем будет лучшим вариантом. Принципиальной разницы нет, но наклеек на одном листе сразу может быть несколько — скажем, если Вы их печатаете.

Создание и печать наклеек с помощью слияния - Word
Слияние с использованием таблицы Excel - Word
и т.п.
Это сообщение посчитали полезным следующие участники:

Отправлено: 17:59, 16-05-2017 | #5


Пользователь


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

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


Цитата Iska:
Модно у меня навряд ли получится, тут талант нужо́́н . »
У Вас получилось очень круто)))
Цитата Iska:
Принципиальной разницы нет, но наклеек на одном листе сразу может быть несколько — скажем, если Вы их печатаете. »
Тут все дело в том, что наклеек действительно можно сделать несколько на одном листе, НО проблема в том, что наклейки эти все одинаковые.
Меняются наклейки только на следующем листе))

Отправлено: 13:21, 17-05-2017 | #6


Ветеран


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

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


zhuk09, тогда Вы явно выбирали не наклейки, потому как при выборе варианта «Наклейки» в каждую запись макета кроме последней добавляется поле Word «NEXT», вызывающее переход к новой записи источника данных:
Скрытый текст
Скрытый текст

В принципе, и сейчас ничто не мешает Вам добавить поля NEXT в макет в конец каждой наклейки (кроме последней) «ручками».
Это сообщение посчитали полезным следующие участники:

Отправлено: 13:37, 17-05-2017 | #7


Пользователь


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

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


Цитата Iska:
В принципе, и сейчас ничто не мешает Вам добавить поля NEXT в макет в конец каждой наклейки (кроме последней) «ручками». »
На первой странице получилось добиться 3-х (трех разных) наклеек на одном листе. Но на 2-м листе происходит какой-то "ШВАХХХХ"
Вот так выглядит структура этикетки
Скрытый текст

Так Выглядит структура данных. В частности интересуют номера от 1 до 4
Скрытый текст

Теперь переходим к этикеткам. Стр.№1
Скрытый текст

И самая ВАЖНАЯ стр.№2
Скрытый текст


Вот такую неразбериху мы получаем на 2-ой и последующих страницах. Т.е по этой логике получается, что команда NEXT на следующей странице работает от данных, которые были в первой этикетке)!

Отправлено: 16:25, 17-05-2017 | #8


Ветеран


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

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


zhuk09, тогда попробуйте заново с начала, выбрав типом документа именно Наклейки:
Скрытый текст

В крайнем случае, упакуйте образец документа с шаблоном и таблицу в архив, каковой приложите к сообщению, либо выложите на RGhost или Яндекс.Диск.
Это сообщение посчитали полезным следующие участники:

Отправлено: 17:22, 17-05-2017 | #9


Пользователь


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

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


Вложения
Тип файла: docx 111111.docx
(17.9 Kb, 2 просмотров)
Тип файла: docx 222222.docx
(31.3 Kb, 3 просмотров)
Тип файла: xlsx A057173 DPL.xlsx
(21.8 Kb, 2 просмотров)

Iska, добрый день!
И так, если в процессе слияния выбирать типом документа наклейка
Скрытый текст

то в дальнейшем возможны 2 варианта событий
1.
а) Изменить макет документа. В процессе этого будет создан новый файл с заданным нами макетом
Скрытый текст

б) заполнить поля слияния
Скрытый текст

Файл во вложении 111111.docx

2.
а)В выборе документа указать "Существующий документ".
Скрытый текст

б) заполнить поля слияния
Скрытый текст

Файл во вложении 222222.docx

Последний раз редактировалось zhuk09, 18-05-2017 в 13:58.


Отправлено: 13:50, 18-05-2017 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » Любой язык - [решено] Создание этикетки товара в .doc из данных в xls

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
2013 - [решено] Outlook 2013 + Win8.1 открытие вложений *.doc и *.xls Garold Microsoft Office (Word, Excel, Outlook и т.д.) 3 16-05-2014 12:34
Разное - [решено] Резервное копирование файлов doc и xls. dzekka Microsoft Windows 2000/XP 2 28-01-2011 13:09
[решено] Вирус зашифровал doc,xls,rar,zip,jpeg,jpg,psd gamber Лечение систем от вредоносных программ 3 05-11-2009 16:49
Прикрепить фаил *xls, *.doc, *.jpg treiber Хочу все знать 1 02-03-2007 21:57
VBA - Создание файлов *.xls из VBA Excel.я Bob7 Программирование и базы данных 1 06-07-2004 14:17




 
Переход