Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Программирование, связанное с MS Office > Если число страниц больше 2х то удалить файл


Автор: nikki4 29.5.2015, 01:38
Здравствуйте. Просьба помочь сделать следующее:

если число страниц в ворде больше Х (допустим 3), тогда удалить файл.
Причем надо сделать это массово.

Путем помощи на форумах и гугла удалось вот что найти:

скрипт который обрабатывает пачку файлов docx на удаление ссылок, только сюда вместо удаления ссылок проверку и удаление файла.

Код

With CreateObject("word.application")
  For Each x In CreateObject("scripting.filesystemobject").getfile(wscript.scriptfullname).parentfolder.Files
    If LCase(Mid(x.Name, InStrRev(x.Name, ".") + 1, 4)) = "docx" Then
      With .documents.open(x.Path)
        numDocs = numDocs + 1
 
 //сюда что-то надо вставить для счета страниц и удаления если счет больше указанного числа страниц
        .Range.Fields.Unlink 'Ctrl+A, Ctrl+Shift+F9  
        .Close True 'save changes 
 
      End With
    End If
  Next
  .Quit
End With
wscript.echo "Обработано документов " & numDocs


а вот нашел скрипт по счету числа страниц в файле
Код

Set objWord = CreateObject("Word.Application")
Const wdStatisticPages = 2
Set objDoc = objWord.Documents.Open("C:\Новая папка\имя файла.docx")
 
   if objDoc.ComputeStatistics(wdStatisticPages)>3 then удалить и продолжить проерять следующий файл

   objDoc.Close
   objWord.Quit


как теперь это скрестить?
с путем и названием объектов запутался...

Автор: Akina 29.5.2015, 09:01
В документе страницы явно существуют только тогда, когда в нём использованы символы, явно начинающие новую страницу (например, page break или разрыв раздела с новой страницы). Если таких символов нет, документ (или содержимое между такими символами, если они есть) делится на страницы в момент вывода, и это деление зависит от характеристик устройства вывода. Т.е. количество страниц запросто может меняться простой сменой дефолтного принтера или формата бумаги.

Задача недоопределена.

Автор: nikki4 29.5.2015, 13:31
Цитата(Akina @ 29.5.2015,  09:01)
В документе страницы явно существуют только тогда, когда в нём использованы символы, явно начинающие новую страницу (например, page break или разрыв раздела с новой страницы). Если таких символов нет, документ (или содержимое между такими символами, если они есть) делится на страницы в момент вывода, и это деление зависит от характеристик устройства вывода. Т.е. количество страниц запросто может меняться простой сменой дефолтного принтера или формата бумаги.

Задача недоопределена.

objDoc.ComputeStatistics(wdStatisticPages) работает корректно (там в исходнике был вывод сообщения с числом страниц и совпадало).

Код

Set objWord = CreateObject("Word.Application")
Const wdStatisticPages = 2
Set objDoc = objWord.Documents.Open("C:\Новая папка\имя файла.docx")
 
   msgbox objDoc.ComputeStatistics(wdStatisticPages)
   objDoc.Close
   objWord.Quit


по поводу размера бумаги и принтера. по умолчанию везде а4 книжная, а дома у меня вообще принтера нет.
никаких явных разрывов в странице нет.
Есть верхний и нижний колонтитул разве что, в частности где указано "страница 1 из ..."
но я только что создал тестовый документ из 3х страниц, где даже их нет и все считает.
Впрочем в данном случае и не нужна точность, просто надо каким-то образом отделить длинные документы от коротких.
Чтобы уже потом в ручную обработать длинные.
По рамеру файла не подойдет, так как там есть и таблицы всякие и потому больший по объему файл, может быть меньше  по количеству страниц.
Вот и задумался,  наверняка же можно это посчитать и даже нашел скрипт, но как сделать чтобы он пачкой все проверил, а не 1 конкретно.

нашел вот кстати .DeleteFile, но там надо указать путь файла .. а тут много файлов...

Автор: nikki4 30.5.2015, 17:30
Задача решена, решение:
Код

With CreateObject("word.application")
  For Each x In CreateObject("scripting.filesystemobject").getfile(wscript.scriptfullname).parentfolder.Files
    If LCase(Mid(x.Name, InStrRev(x.Name, ".") + 1, 4)) = "docx" Then
      With .documents.open(x.Path)
        np = .ComputeStatistics(2)  '2=wdStatisticPages
        .Close False                'don't save changes         
      End With
      if np < 2 then x.delete: numDel = numDel + 1
    End If
  Next
  .Quit
End With
wscript.echo "Удалено документов " & numDel



Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)