Справка - Поиск - Участники - Войти - Регистрация
Полная версия: Автозаполнение шаблона Word из Exel
Частный клуб Алекса Экслера > Софт
bilbo
18 октября 2016, 16:10
Дано:
Около сотни закупок. На каждую необходимо заполнить 6 разных шаблонов в которых меняется наименование товара и дата закупки.
Хочется сделать это примерно так - заполняю в Exel таблицу с наименованием закупки и её датой. Нажимаю кнопку (запускаю батник/скрипт), он заполняет шаблоны Word беря данные из Exel и сохраняя результаты в отдельную папочку. Последнее не критично, можно и в одну папку и даже наименования файлов просто по порядку сделать.
Можно ли это сделать стандартными средствами? Кстати, если проще перекинуть шаблоны тоже в Exel то я могу это сделать. На выходе всё равно должны быть бумажные документы.
Или может есть какие готовые надстройки/скрипты?
Носки Поэта
18 октября 2016, 22:21
Готового не знаю, но набросал быстренько скрипт, использующий WSH.

CODE
Option Explicit

Dim WordApp, Excel, Book, Sheet, eNam, eDat, wDoc, i, str

Set Excel = CreateObject("Excel.Application")
Set Book = Excel.Workbooks.open("F:\wsh\xls1.xlsx")
Set Sheet = Book.Sheets(1)

Set WordApp = CreateObject("Word.Application")
'WordApp.Visible=true


'Excel.visible = true
 i = 1
 do until isEmpty(Sheet.Range("A" & Cstr(i)).Value)
   eNam = Sheet.Range("A" & Cstr(i)).Value
   eDat = Sheet.Range("B" & Cstr(i)).Value
   Set wDoc = WordApp.Documents.Open("F:\wsh\shablon.doc")
   wDoc.Content.Find.Execute "@name@", False, False, False, False, False, True, 1, False, eNam, 2
   wDoc.Content.Find.Execute "@data@", False, False, False, False, False, True, 1, False, edat, 2
   wDoc.SaveAs "F:\wsh\Done\" & Cstr(i) & ".doc"
   wDoc.Close
   i = i + 1
 Loop
 Book.Close
Носки Поэта
18 октября 2016, 22:36
Пояснения.
1. Код выделить и сохранить в файл с расширением .vbs
2. В скрипте используется в качестве рабочей папки F:\wsh. Для своей папки просто меняешь все вхождения F:\wsh на путь к своей папке.
3. Файл Excel с именем xls1.xlsx кладётся в эту же папку.
4. В ней же должен лежать и файл шаблона shablon.doc
5. В файле шаблона должны присутствовать слова @name@ и @data@. Все вхождения первого будут автоматически заменены на то, что в цикле будет считываться из ячеек столбца "A" в excel-файле. Все вторые заменятся датой из ячеек столбца "B".
6. Вордовые файлы сохраняются после подстановки в папку F:\wsh\Done. Эту папку надо создать самому до первого запуска скрипта.
7. Работа скрипта проверялась на Office2010 и в папках с правильными путями, удовлетворяющими DOS-нотации. Будет ли работать с русскими именами файлов и папок - хз.

Скрипт элементарный, так что допилить его для себя думаю труда не сотавит. Исполнятся по идее должен на любой машине с windows, начиная от Win98.
bilbo
18 октября 2016, 23:20

Носки Поэта написал: Готового не знаю, но набросал быстренько скрипт, использующий WSH.

Спасибо, попробую.
Я правильно понял что для добавления дополнительных столбцов надо модифицировать в таком ключе:


CODE
Option Explicit

Dim WordApp, Excel, Book, Sheet, eNam, eDat, wDoc, i, str

Set Excel = CreateObject("Excel.Application")
Set Book = Excel.Workbooks.open("F:\wsh\xls1.xlsx")
Set Sheet = Book.Sheets(1)

Set WordApp = CreateObject("Word.Application")
'WordApp.Visible=true


'Excel.visible = true
i = 1
do until isEmpty(Sheet.Range("A" & Cstr(i)).Value)
  eNam = Sheet.Range("A" & Cstr(i)).Value
  eDat = Sheet.Range("B" & Cstr(i)).Value
  eNum = Sheet.Range("C" & Cstr(i)).Value
  Set wDoc = WordApp.Documents.Open("F:\wsh\shablon.doc")
  wDoc.Content.Find.Execute "@name@", False, False, False, False, False, True, 1, False, eNam, 2
  wDoc.Content.Find.Execute "@data@", False, False, False, False, False, True, 1, False, edat, 2
  wDoc.Content.Find.Execute "@Num@", False, False, False, False, False, True, 1, False, eNum, 2
  wDoc.SaveAs "F:\wsh\Done\" & Cstr(i) & ".doc"
  wDoc.Close
  i = i + 1
Loop
Book.Close

?

Я пока сделал через "рассылка-слияние". Всё сваливается в один файл, но может так даже и лучше.

bilbo
18 октября 2016, 23:32
"предполагается наличие инструкции"
Ошибка строка 2 символ 1
Носки Поэта
19 октября 2016, 00:20

bilbo написал: Ошибка строка 2 символ 1

Если у тебя в первой строчке CODE - удали её. Первой строкой должна быть Option Explicit. И eNum для имени переменной лучше не использовать, поскольку это спецслово. Лучше что-то типа xN.
И, вводя новую переменную, опиши её в строке Dim
bilbo
19 октября 2016, 07:17

Носки Поэта написал: Если у тебя в первой строчке CODE - удали её. Первой строкой должна быть Option Explicit. И eNum для имени переменной лучше не использовать, поскольку это спецслово. Лучше что-то типа xN.
И, вводя новую переменную, опиши её в строке Dim

Заработало! Спасибо!

Носки Поэта
19 октября 2016, 11:03

bilbo написал: Я пока сделал через "рассылка-слияние". Всё сваливается в один файл, но может так даже и лучше.

ОК, сам решишь как лучше.
На всякий случай, даю изменение кода для работы с 6-ю шаблонами shablon1.doc - shablon6.doc, с последующей раскладкой по папкам Done1 - Done6.
Надо код
CODE

  Set wDoc = WordApp.Documents.Open("F:\wsh\shablon.doc")
   wDoc.Content.Find.Execute "@name@", False, False, False, False, False, True, 1, False, eNam, 2
   wDoc.Content.Find.Execute "@data@", False, False, False, False, False, True, 1, False, edat, 2
   wDoc.SaveAs "F:\wsh\Done\" & Cstr(i) & ".doc"
   wDoc.Close

заменить на
CODE

   for j = 1 to 6
     Set wDoc = WordApp.Documents.Open("F:\wsh\shablon" & Cstr(j) & ".doc")
     wDoc.Content.Find.Execute "@name@", False, False, False, False, False, True, 1, False, eNam, 2
     wDoc.Content.Find.Execute "@data@", False, False, False, False, False, True, 1, False, edat, 2
     wDoc.SaveAs "F:\wsh\Done" & Cstr(j) & "\" & Cstr(i) & ".doc"
     wDoc.Close
   next


И не забыть добавить переменную j в строку Dim.

Думаю, дальше уже сам сможешь довести до кондиции.
bilbo
19 октября 2016, 11:31

Носки Поэта написал: Думаю, дальше уже сам сможешь довести до кондиции.

Какого ты хорошего мнения обо мне. biggrin.gif
Я попробую (думаю добавить переименования готовых файлов в соответствии с назначением "приказ", "Заявка" и т.д.), пока не подсказывай. biggrin.gif Но если не получится - в личку стукнусь, ок?
И ещё раз огромное спасибо!
alibek
19 октября 2016, 12:54

bilbo написал: Можно ли это сделать стандартными средствами?

Да, это называется "Слияние". В новых версиях офиса находится в разделе "Рассылки".
Но:

bilbo написал: Кстати, если проще перекинуть шаблоны тоже в Exel то я могу это сделать.

Так будет лучше.
Носки Поэта
20 октября 2016, 08:28

bilbo написал: Но если не получится - в личку стукнусь, ок?

Да, конечно.
Эта версия форума - с пониженной функциональностью. Для просмотра полной версии со всеми функциями, форматированием, картинками и т. п. нажмите сюда.
Invision Power Board © 2001-2016 Invision Power Services, Inc.
модификация - Яро & Серёга
Хостинг от «Зенон»Сервера компании «ETegro»