|
|
|
| По данной ссылке http://forum.script-coding.info/viewtopic.php?id=1384 нашел скрипт который перебирает документы в определенной папке и распечатывает Word документы. Данный скрипт работает только для конкретной папки, с файлами конкретного расширения. А как сделать чтобы печатались файлы со всеми расширениями (файлы с текстовой структурой, но имеют числовое расширение, состоящее из трех цифр:0000,0001,0002 и т.д.). Эти файлы лежат в папке c:\OTDEL\000,001,002 и т.д.\дата (пример 01012009,02012009 и т.д.)\**.000 и т.д. Так надо что бы тотал пускал на печать все файлы находящиеся во всех папках 000,001,002 и т.д. но за определенную дату: например за 04012009-(имя папки с файлами).
Вот структура папок /подкаталоги-номер отделения
[img]http://s59.radikal.ru/i163/0901/e0/fc8ce1fa2b5b.png[/img]
подкаталоги дата
[img]http://s59.radikal.ru/i164/0901/68/101a4fed6b37.png[/img]
В папках дата файлы для печати по одному отделению
[img]http://s51.radikal.ru/i131/0901/6c/40e1c9a691a0.png[/img]
по другому отделению
[img]http://s49.radikal.ru/i124/0901/a1/ad3a6f5f35d1.png[/img]
и т. д по все отделениям за определенную дату.
Помогите пожалуйста, заранее благодарен. | |
|
| |
|
|
|
| Вы имеете ввиду вот этот код?
Const wdPromptToSaveChanges = -2
Const wdSaveChanges = -1
Dim objWord, objDoc, objFS, objFolder, objItem
Set objFS = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFS.GetFolder("c:\work\temp\") 'Папка, из которой производится печать
Set objWord = WScript.CreateObject("Word.Application")
For Each objItem In objFolder.Files
If StrComp(objFS.GetExtensionName(objItem.Name), "doc", vbTextCompare) = 0 Then
With objWord
Set objDoc = .Documents.Open(objItem.Path, False, True, False)
objDoc.PrintOut False
Set objDoc = Nothing
End With
End If
Next
objWord.Quit
Set objWord = Nothing
WScript.Quit 0
|
| |
|
| |
|
|
|
|
Эти файлы лежат в папке c:\OTDEL\000,001,002 и т.д.\дата (пример 01012009,02012009 и т.д.)\**.000 и т.д
|
Так как же всё таки, я не понял, название выглядит?
00101012009 , 00001012009 - так?
и ещё это wordovskiy документ или текстовый
изначалбно doc или txt или rtf или .......... | |
|
| |
|
|
|
| В папке OTDEL находится 20 папок с номером отделения, т.е. (0001,0002,0003 и. д 20 шт. В каждой из этих папок находятся папки с названием даты отчета (например в папке 0001 есть папки - 01012009,02012009,03012009, ит.д , т.е название папки это дата создание отчета) и уже в этих папках находятся файлы с расширением номера отеления ( например ****,0001,0002 и .тд) В определенный момент требуется распечатать все отчеты по всем отелениям за определеное число, а имено например за 02,01,2009 - это все файлы по адресам:
D:\OTDEL\0001\02012009\*****.0001
D:\OTDEL\0002\02012009\*****.0002
D:\OTDEL\0003\02012009\*****.0003
D:\OTDEL\0004\02012009\*****.0004
....
D:\OTDEL\0016\02012009\*****.0016
D:\OTDEL\0017\02012009\*****.0017
D:\OTDEL\0018\02012009\*****.0018
D:\OTDEL\0019\02012009\*****.0019
D:\OTDEL\0020\02012009\*****.0020
Если как в скрипте отдельно указать путь к отдной из папок D:\OTDEL\0001\02012009\*****.0001
и срасширение 0001, файлы с этой папки печатаются нормально.Но как сделать чтобы печатались сразу все файлы с папок 02012009, т.е. отчеты за оределенную дату. | |
|
| |
|
|
|
| То есть нуна сформировать правильно строку, куда послать скрипт искать файлы......... | |
|
| |
|
|
|
| вот вернёт нужное имя папки
Function Folder_NAME(My_Date) As String
Folder_NAME = Format(Day(My_Date), "00") & Format(Month(My_Date), "00") & Format(Yaer(My_Date), "0000")
End Function
my_Patch = "D:\OTDEL\0016\" & Folder_NAME(дата из поля на форме)
Set objFolder = objFS.GetFolder(my_Patch)'Папка, из которой производится печать
|
| |
|
| |
|
|
|
| Спасибо за ответ, но что то не получается. Надо чтобы скрипт запускал на печать все файлы, со всех вложеных папок с именем например 02012009. | |
|
| |
|
|
|
| ты свой код сюда положи чтоба видеть о чём мы реч ведём....
чё там написано и как у Вас??? | |
|
| |
|
|
|
| D:\OTDEL\0001
вот эту часть менять???
подойдёт
Dim Hirina as long
Dim Hirina_STR as string
и пока цикл продолжается
Hirina = Hirina +1
а потом преобразуй её
Hirina_STR = Format(Yaer(Hirina ), "0000")
в скрипт Hirinka_STR
my_Patch = "D:\OTDEL\" & Hirina_STR & "\" & Folder_NAME(дата из поля на форме)
Set objFolder = objFS.GetFolder(my_Patch)'Папка, из которой производится печать | |
|
| |
|
|
|
| А для смены расширения заведи переменную
Dim Hirinka as long например
Dim Hirinka_STR as string
и пока цикл продолжается
Hirinka = Hirinka +1
а потом преобразуй её
Hirinka_STR = Format(Yaer(Hirinka ), "0000")
и вместо "doc" всавь в скрипт Hirinka_STR
If StrComp(objFS.GetExtensionName(objItem.Name), Hirinka_STR , vbTextCompare) = 0 Then | |
|
| |
|
|
|
|
Код:
Option Explicit
Const wdDoNotSaveChanges = 0
Const wdPromptToSaveChanges = -2
Const wdSaveChanges = -1
Dim objWord, objDoc, objFS, objFolder, objItem
Set objFS = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFS.GetFolder("d:\OTDEL\0001\02012009") 'Папка, из которой производится печать
Set objWord = WScript.CreateObject("Word.Application")
For Each objItem In objFolder.Files
If StrComp(objFS.GetExtensionName(objItem.Name), "0001", vbTextCompare) = 0 Then
With objWord
Set objDoc = .Documents.Open(objItem.Path, False, True, False)
objDoc.PrintOut False
Set objDoc = Nothing
End With
End If
Next
objWord.Quit
Set objWord = Nothing
WScript.Quit 0
|
Я в скриптах не силен. Скрипт такого вида печатае все файлы за 02,01,2009 по отделу 0001, как бы сделать чтобы печатались все отделы за это число, пожалуйста, уже третий день мучаюсь, можно на моем кодепоказать что изменить, заранее спасибо. | |
|
| |
|
|
|
| прилепляем функцию
Option Explicit
Const wdDoNotSaveChanges = 0
Const wdPromptToSaveChanges = -2
Const wdSaveChanges = -1
' переменные пишем
Dim Hirinka as long
Dim Hirinka_STR as string
Dim Hirina as long
Dim Hirina_STR as string
Dim my_Patch as string
Dim objWord, objDoc, objFS, objFolder, objItem
Dim F as long
Function Cikl()
for F=1 to 20' смотря сколько папок
Hirina_STR = Format(Yaer(F), "0000")
my_Patch = "D:\OTDEL\" & Hirina_STR & "\" & Folder_NAME(дата из поля на форме)
call Printing
next F
end Function
Function Printing ()
Set objFS = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFS.GetFolder("d:\OTDEL\0001\02012009") 'Папка, из которой производится печать
Set objWord = WScript.CreateObject("Word.Application")
For Each objItem In objFolder.Files
If StrComp(objFS.GetExtensionName(objItem.Name), "0001", vbTextCompare) = 0 Then
With objWord
Set objDoc = .Documents.Open(objItem.Path, False, True, False)
objDoc.PrintOut False
Set objDoc = Nothing
End With
End If
Next
objWord.Quit
Set objWord = Nothing
WScript.Quit 0
End Function
Function Folder_NAME(My_Date) As String
Folder_NAME = Format(Day(My_Date), "00") & Format(Month(My_Date), "00") & Format(Yaer(My_Date), "0000")
End Function
|
| |
|
| |
|
|
|
| час-спасибо огромное что со мной мучаешся.
скрипт при запуске ругается на 3-8 строки -"предполагается наличие окончания инструкции"
и покажи пожалуйста на предыдущем примере как вставить в скрипт вот это
D:\OTDEL\0001
вот эту часть менять???
подойдёт
Dim Hirina as long
Dim Hirina_STR as string
и пока цикл продолжается
Hirina = Hirina +1
а потом преобразуй её
Hirina_STR = Format(Yaer(Hirina ), "0000")
в скрипт Hirinka_STR
my_Patch = "D:\OTDEL\" & Hirina_STR & "\" & Folder_NAME(дата из поля на форме)
Set objFolder = objFS.GetFolder(my_Patch)'Папка, из которой производится печать
Ответить
автор: час (07.01.2009 в 21:01) личное сообщение
А для смены расширения заведи переменную
Dim Hirinka as long например
Dim Hirinka_STR as string
и пока цикл продолжается
Hirinka = Hirinka +1
а потом преобразуй её
Hirinka_STR = Format(Yaer(Hirinka ), "0000")
и вместо "doc" всавь в скрипт Hirinka_STR
If StrComp(objFS.GetExtensionName(objItem.Name), Hirinka_STR , vbTextCompare) = 0 Then
|
Спасибо | |
|
| |
|
|
|
|
| Да ... а ты подскажи какую ты библиотеку подключал, что бы скрипт пахал??? | |
|
| |
|
|
|
| C:\WINDOWS\System32\WScript.exe | |
|
| |
|
|
|
| Я щас примерчик набросаю - погоди..... | |
|
| |
|
13 Кб. |
|
| Посмотри | |
|
| |
|
|
|
| Только дату там подходяшую на форме напиши. | |
|
| |
|
12 Кб. |
|
| Чета я поторопился
Вот это лучше ,но
как нам определить сколько папок, сколько документов????
есть что взять за критерий?
можно конечно попробовать вот так написать....For Hirinka = 1 To 500 - это для файлов | |
|
| |
|
|
|
| Папок 33 но они имеют не последовательные названия, а имено 0000,0001,0025,0027 ит д
Файлов будет максимум 100шт | |
|
| |
|
|
|
| выдает ошибку
Run-time error'76'
Path not found
ругается на строку
Set objFolder = objFS.GetFolder(my_Patch) | |
|
| |
|
12 Кб. |
|
| Значит путь не верен.
Я наверное не угадал названия папок
У меня работает - надо тока с пакою разобраться - с её именем | |
|
| |
|
|
|
| D:\OTDEL\0001\07012009\07012009.0001
Вот так вот ??? | |
|
| |
|
|
|
| Да, только имя файлов не всегда дата, оно произвольное, и сорри я ошибся расширение состоит из трех цифр. | |
|
| |
|
12 Кб. |
|
| Вот может так........ | |
|
| |
|
12 Кб. |
|
| Вот на три буквы
Для нас главнее имя папки, чем файла | |
|
| |
|
|
|
| А у вас печатает ? а то уменя не происходит не ких действий . | |
|
| |
|
|
|
| У меня накидывает в принтер кучу -
у меня просто нет принтера....
Запусти в отладчике чё там происходит.... | |
|
| |
|
|
|
| Acces печатает первый файл и после подвисает | |
|
| |
|
|
13 Кб. |
|
| Вот тестик...... | |
|
| |
|
|
|
| При оладке никаких ошибок не выскакивает | |
|
| |
|
|
|
| Что за XP ...................................
А текстовые файлы - тяжёлые?????????77 | |
|
| |
|
|
|
| Надо поспать ............. | |
|
| |
|
|
|
| Винда ХР сборка от филки, файлы легкие в основном одна страница текста, просто папок в реале 33, а надо наверное ставить от 0 до 110 -так как названия не попорядку и последнее отделение №110 + файлоф каждой папке 3. Может из за этого и подвисает? | |
|
| |
|
|
|
|
| Точно, 33*110=
пока все проверишь охр--еешь
Он не виснет он фигачит - видимо
Попробуй номера прпорядку поближе к 001 понапихать в папочку
и посмотри результат............. | |
|
| |
|
|
|
| Тута надо ещё проверять есть ли такой файл и если нет то нефига искать, хотя это доп функция - опять тормоз.......................
И к тому же мы не знаем имя файлика | |
|
| |
|
|
|
| Точно лапатит все папки попорядку, вот поэтому и долго. Спасибо большое. А нельзя прописать не диапазон от 0 до 110, а имено номера отделений, чтобы все не лапатил. | |
|
| |
|
|
|
| Спасибо !!! | |
|
| |
|
|
|
| А можно в функции установить не с 0 до 110-количество папок, а перечислить конкретно номера отделений:000,001,0025,0027, и.т.д. и также количество файлов не от 0 до130,а тоже 000,001,025,027 что бы прога не лапатила все параметры. | |
|
| |
|
|
|
| А ты знаешь какие номера нужны? | |
|
| |
|
|
|
| Привет!
да номера отделов 0000,0001,0025,0027,0054,0057,0058,0060,0061,0062,0064,0065,0071,0076,0077,0078,0079,0080,0083,0084,0085,0086,0088,0090,0091,0092,0094,0097,0098,0099,0100,0101,0102
и соответственно расширения файлов
000,001,025,027,054,057,058,060,061,062,064,065,071,076,077,078,079,080,083,084,085,086,088,090,091,092,094,097,098,099,100,101,102
И гдеб указать что текст в кодировке ASCII (DOS), а то некоторіе файлі печатаются не коректно иероглифами. | |
|
| |
|
22 Кб. |
|
| Тада вот посмотри:
Открываем таблицу Otdel и заполняем номера отделов, нажимаем крестик слева и вводим все номера файлов в этом отделе. | |
|
| |
|
|
|
| Ну чё как результат?
И гдеб указать что текст в кодировке ASCII (DOS), а то некоторіе файлі печатаются не коректно иероглифами - видимо в самом документе....... | |
|
| |
|
|
|
| Кстати забыл пердупредить, но думаю сам догодался - надо dao подключить.
C:\Program Files\Common Files\Microsoft Shared\DAO | |
|
| |
|
|
|
| Выдает ошибку Run-time error '94'
Invalid use of Nul
на эту строку H_STR = MyRst1!Numder_File
Посмотри пожалуйста еще, прикладываю директорию только с 15,01,2009 числом и настроеннйый под нее аксес - т.е. отделы и расширения | |
|
| |
|
|
|
| Это значит в таблице имеется строка без данных - пустая срока - Null
Удали пустые строки из таблицы
или отдел с незаполненными данными о файлах | |
|
| |
|
|
|
|
Посмотри пожалуйста еще, прикладываю директорию только с 15,01,2009 числом и настроеннйый под нее аксес - т.е. отделы и расширения
|
простите, а это что значит??? | |
|
| |
|
24 Кб. |
|
| Вот посмотри вроде пустых строк нет. | |
|
| |
|
|
|
| Еще в некоторых отделах бывает что отчетов за определенную дату нет .Сейчас приложу еще и директорию. | |
|
| |
|
11 Кб. |
|
| Вот моя директория с файлами | |
|
| |
|
|
4 Кб. |
|
| вот скрин | |
|
| |
|
|
|
| Простите а это имя файла???
01152864.100 | |
|
| |
|
22 Кб. |
|
| Вот посмотри | |
|
| |
|
|
|
| час
Спасибо огромное пашет НАУРА, на печать идут все файлы. Еще покавыряюсь, посмотрю как сделать чтобы файлы выводились с нормальным текстом - а то половина нормально, а половина иероглифы, хотя все файлы с досовским текстом ASCII(DOS) | |
|
| |
|
|
|
|
| Может там шрифт поменять???????7 | |
|
| |
|
|
|
| час
Спасибо ! Спасибо! Спасибо!
Все пашет как часы. Проблему с кодировкой решил подстановкой Encoding:=866 в строку:
Set objDoc = .Documents.Open(objItem.Path, False, True, False, Encoding:=866)
И все файлы стали печататься на нормальном языке.
| |
|
| |
|