Показать полную графическую версию : [решено] переименования файлов
Извините за тупой вопрос но все же wsf файл запускать так же как и vbs »
Да, исполнитель тот же — wscript.exe/cscript.exe.
office 2013 /2016, скрипт ругается на 5 строчку: Методы или свойство OpenDataSource недоступны, потому что эту команду нельзя использовать в режиме чтения. И действительно word запускаться в режиме чтения »
Замените строку:
Set objDocument = objWord.Documents.Open("C:\Мои проекты\0136\order.doc", , True)
на:
Set objDocument = objWord.Documents.Open("C:\Мои проекты\0136\order.doc")
mcintosh55
07-12-2017, 23:56
ISKA, большое спасибо!!!
скрипт работает office 2003/2007/2013/2016
<job>
<object ProgId = "Word.Application" id = "objWord" events = "true" />
<script language = "VBScript">
Option Explicit
Const wdFormLetters = 0
Const wdSendToNewDocument = 0
Const wdDefaultFirstRecord = 1
Const wdDefaultLastRecord = -16
Const wdNextRecord = -2
Dim objDocument
Dim objCurrResultDocument
Dim i
Dim strDocumentName
objWord.Visible = True
Set objDocument = objWord.Documents.Open("C:\Мои проекты\0136\order.doc")
With objDocument.MailMerge
.MainDocumentType = wdFormLetters
.OpenDataSource _
"C:\Мои проекты\0136\base.xls", _
,,,,,,,,,, _
"Provider=Microsoft.Jet.OLEDB.4.0;Mode=Read;Extended Properties=""HDR=YES;IMEX=1;Jet OLEDB:Engine Type=35;""", _
"SELECT * FROM `Лист1$`"
.Destination = wdSendToNewDocument
.SuppressBlankLines = True
For i = wdDefaultFirstRecord To .DataSource.RecordCount
.DataSource.FirstRecord = .DataSource.ActiveRecord
.DataSource.LastRecord = .DataSource.ActiveRecord
Set objCurrResultDocument = Nothing
strDocumentName = .DataSource.DataFields.Item("SNP").Value
.Execute False
.DataSource.ActiveRecord = wdNextRecord
Do
WScript.Sleep 100
Loop Until Not objCurrResultDocument Is Nothing
objCurrResultDocument.Close
Next
End With
objDocument.Close False
WScript.DisconnectObject objWord
objWord.Quit
WScript.Quit 0
Sub objWord_MailMergeAfterMerge(ByVal objResultDocument, ByVal objMainDocument)
objResultDocument.SaveAs "C:\Мои проекты\0136\" & strDocumentName & ".doc"
Set objCurrResultDocument = objResultDocument
rem WScript.Echo "Mail Merge Complete: " & objResultDocument.FullName
End Sub
</script>
</job>
mcintosh55, так… Это уже хорошо. Теперь двигаемся дальше.
1. Как я понимаю, Вам сие придётся проделывать достаточно регулярно, так? Как было бы Вам удобнее и проще работать?
2. Существует вполне ненулевая вероятность, что в одном списке окажутся разные люди с полным совпадением ФИО (или даже один и тот же, но с разными постановлениями). Пока это даже никак не проверяется — файл с именем, стоящим ниже по списку просто тупо затрёт ранее созданный файл. Что можно придумать, исходя из исходных данных — что там есть уникального в списке (скажем, тот же номер постановления, нет?
mcintosh55
08-12-2017, 02:03
Как было бы Вам удобнее и проще работать? »
в принципе на данном этапе все ок, Я завтра напишу cmd скрипт которые будет запускать скрипт wsf скрипт (все системе все скрипты открываются как txt файл ).
Я думаю можно по пробовать фио+столбик personal account это число уникальное
strDocumentName = .DataSource.DataFields.Item("SNP" & "_" & "personal account").Value
что типа такого, но у меня не получилось вываливает в ошибку
mcintosh55
08-12-2017, 14:09
Сегодня протестировал скрипт, почему то рандомно он останавливается т.е. может создать новых файлов из всего списка а может и остановиться 10 или 20 или 24 файлов каждый раз по разному
Я думаю можно по пробовать фио+столбик personal account это число уникальное »
strDocumentName = .DataSource.DataFields.Item("SNP").Value & "_" & .DataSource.DataFields.Item("personal account").Value
Сегодня протестировал скрипт, почему то рандомно он останавливается т.е. может создать новых файлов из всего списка а может и остановиться 10 или 20 или 24 файлов каждый раз по разному »
На одном и том же файле-списке?
mcintosh55
08-12-2017, 15:09
На одном и том же файле-списке? »
нет на разных такое ощущение что он теряет фокус окна, к примеру пока выполнялся скрипт Я открыл cmd консоль и скрипт остановился, до этого еще был браузер открыт другой документ word если делаешь активное например браузера может скрипт остановиться. После того как все закрыли скрипт отработал полностью 2 из 3 раза.
mcintosh55, ну, с окнами там работы никакой не ведётся по причине отсутствия такового кода. То, что окна новосозданных документов Word мельтешат в процессе — так я пока специально оставил окно приложения Microsoft Word видимым на случай возникновения ошибок.
mcintosh55, мне вот ещё что подумалось: Вы исполняете .wsf под консольным cscript.exe или под GUI'шным wscript.exe? Я-то всегда работаю под консолью, и у меня именно cscript.exe задан исполнителем (в противовес wscript.exe, используемому по умолчанию). Так вот, под wscript.exe от команд WScript.Echo будут появляться не сообщения в консоли, а окна сообщений, и после появления такого окна сообщения скрипт действительно будет останавливаться до тех пор, пока будет это окно сообщения не будет закрыто.
mcintosh55
08-12-2017, 15:46
strDocumentName = .DataSource.DataFields.Item("SNP").Value & "_" & .DataSource.DataFields.Item("personal account").Value
у нас скрипт выдал ошибку в "personal account" надо поставить _ а то ошибку выдает Я поменял и в скрипте и в таблице
strDocumentName = .DataSource.DataFields.Item("SNP").Value & "_" & .DataSource.DataFields.Item("personal_account").Value
Скрипт Я запускаю по двойному щелчку, по Вашему комментарию Я понял что скрипт надо запускать через cscript.exe. Буду пробовать, отпишусь что и как.
через cscript.exe все отлично отрабатывает
mcintosh55
08-12-2017, 16:02
Большое спасибо, Iska!!! Все отлично работает, то что окна открываются закрываются это не страшно.
у нас скрипт выдал ошибку в "personal account" надо поставить _ а то ошибку выдает Я поменял и в скрипте и в таблице »
Ну, я не проверял, просто воспользовался Вашим кодом.
Скрипт Я запускаю по двойному щелчку, по Вашему комментарию Я понял что скрипт надо запускать через cscript.exe. Буду пробовать, отпишусь что и как.
через cscript.exe все отлично отрабатывает »
Периодически выпадает из памяти, что надо этот момент учитывать.
Все отлично работает, то что окна открываются закрываются это не страшно. »
Это можно будет убрать, просто закомментировав:
' objWord.Visible = True
Но что дальше? В первую очередь я имею в виду указание путей к файлам непосредственно в коде.
mcintosh55
08-12-2017, 20:02
Но что дальше? В первую очередь я имею в виду указание путей к файлам непосредственно в коде. »
в принципе тот функционал, что сейчас есть его хватает, все файлы лежат в папках и Я сказал пользователю ни чего не трогать не передвигаем редактируем только это и это. Ну максимум на что Я бы посмотрел это как в excel файле сделать печатную форму т.е. те данные которые храниться word как то перенести в excel. Ну и переделать скрипт которые выше т.е. встроить его в excel документ, что я имею веду к примеру пользователь выделяет строку и нажимает кнопку печать и печатается конкретный документы или нажимаю кнопку печатать всю таблицу и печатается вся таблица в виде печатной форме. Просто интересен момент с печатной формой в excel + можно уйти от слияния.
А так весь функционал хватает.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.