|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » Любой язык - [решено] Создание этикетки товара в .doc из данных в xls |
|
|
Любой язык - [решено] Создание этикетки товара в .doc из данных в xls
|
Пользователь Сообщения: 85 |
Профиль | Отправить PM | Цитировать Добрый день коллеги!
Есть небольшая задача. В документе формата .doc есть шаблон этикетки с динамическими полями. Эти поля должны заполняться из файла .xls. Вот так выглядит этикетка (желтым помечены динамические поля) А так выглядит файл .xls Таких этикеток обычно от 500 до 700 штук. Готов оценить работу в $)) Скажите "сколько вешать в граммах"))) |
|
Отправлено: 13:39, 16-05-2017 |
Ветеран Сообщения: 1259
|
Профиль | Отправить 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
|
Профиль | Отправить PM | Цитировать zhuk09, Ваша задача, в принципе, решается и без программирования, обычным слиянием.
|
Отправлено: 15:00, 16-05-2017 | #3 |
Пользователь Сообщения: 85
|
Профиль | Отправить PM | Цитировать Цитата Kazun:
Спасибо огромное за оперативный ответ)! Если что-то не получится, обязательно напишу) Цитата Iska:
|
||
Последний раз редактировалось zhuk09, 17-05-2017 в 13:17. Отправлено: 17:40, 16-05-2017 | #4 |
Ветеран Сообщения: 27449
|
Профиль | Отправить 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
|
Профиль | Отправить PM | Цитировать Цитата Iska:
Цитата Iska:
Меняются наклейки только на следующем листе)) |
||
Отправлено: 13:21, 17-05-2017 | #6 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать zhuk09, тогда Вы явно выбирали не наклейки, потому как при выборе варианта «Наклейки» в каждую запись макета кроме последней добавляется поле Word «NEXT», вызывающее переход к новой записи источника данных:
Скрытый текст
Скрытый текст
В принципе, и сейчас ничто не мешает Вам добавить поля NEXT в макет в конец каждой наклейки (кроме последней) «ручками». |
Отправлено: 13:37, 17-05-2017 | #7 |
Пользователь Сообщения: 85
|
Профиль | Отправить PM | Цитировать Цитата Iska:
Вот так выглядит структура этикетки Так Выглядит структура данных. В частности интересуют номера от 1 до 4 Теперь переходим к этикеткам. Стр.№1 И самая ВАЖНАЯ стр.№2 Вот такую неразбериху мы получаем на 2-ой и последующих страницах. Т.е по этой логике получается, что команда NEXT на следующей странице работает от данных, которые были в первой этикетке)! |
|
Отправлено: 16:25, 17-05-2017 | #8 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать zhuk09, тогда попробуйте заново с начала, выбрав типом документа именно Наклейки:
Скрытый текст
В крайнем случае, упакуйте образец документа с шаблоном и таблицу в архив, каковой приложите к сообщению, либо выложите на RGhost или Яндекс.Диск. |
Отправлено: 17:22, 17-05-2017 | #9 |
Пользователь Сообщения: 85
|
Профиль | Отправить PM | Цитировать Iska, добрый день!
И так, если в процессе слияния выбирать типом документа наклейка то в дальнейшем возможны 2 варианта событий 1. а) Изменить макет документа. В процессе этого будет создан новый файл с заданным нами макетом б) заполнить поля слияния Файл во вложении 111111.docx 2. а)В выборе документа указать "Существующий документ". б) заполнить поля слияния Файл во вложении 222222.docx |
Последний раз редактировалось zhuk09, 18-05-2017 в 13:58. Отправлено: 13:50, 18-05-2017 | #10 |
|
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
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 |
|