Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Получение статистики документа Word

49K
15 октября 2009 года
S0mbre
16 / / 15.10.2009
Написал код для Excel для получения статистики (кол-во страниц и знаков с пробелами) списка документов MS Word.

Код:
Sub Кнопка1_Щелчок()

    Dim appWD As Word.Application ' объект Word
    Dim docWD As Word.Document ' документ Word
    Dim rg_paths, rg_pages, rg_chars As Range ' список путей к документам, массивы Excel куда вставить статистику по страницам и знакам
    Dim StatsSheet As Worksheet ' страница где находятся rg_pages и rg_chars
    Dim n_paths_row, n_paths_rows, n_paths_col, pages, chars, k As Integer
    Dim s_filepath As String
   
    ' Инициализируем переменные
    Set appWD = New Word.Application
    Set StatsSheet = Worksheets(2)
    Set rg_pages = StatsSheet.Range("E2:E77")
    Set rg_chars = StatsSheet.Range("F2:F77")
   
    ' Список документов д.б. выделен
    If Not Selection Is Nothing Then
        Set rg_paths = Selection
    Else
        Exit Sub
    End If
   
    ' Номера строк и столбцов списка
    n_paths_row = rg_paths.Row
    n_paths_rows = rg_paths.Rows(rg_paths.Rows.Count).Row
    n_paths_col = rg_paths.Column
   
    k = -1
    For rw = n_paths_row To n_paths_rows ' по всем строкам списка
        s_filepath = ActiveSheet.Cells(rw, n_col).Text ' извлекаем путь к файлу
        Set docWD = appWD.Documents.Open(s_filepath) ' открываем этот документ Word
        docWD.Activate ' и активируем его
        ' Записываем данные статистики
        pages = appWD.ActiveDocument.BuiltinDocumentProperties(wdPropertyPages)
        chars = appWD.ActiveDocument.BuiltinDocumentProperties(wdPropertyCharsWSpaces)
        appWD.ActiveDocument.Close True ' закрываем документ без запроса
        k = k + 1
        ' Пишем данные в Excel
        StatsSheet.Cells(2 + k, rg_pages.Column).Value = pages
        StatsSheet.Cells(2 + k, rg_chars.Column).Value = chars
    Next rw
   
    ' закрываем Word
    appWD.Quit True
    ' уничтожаем обьект - документ
    Set appWD = Nothing
    ' уничтожаем обьект - Word
    Set appWD = Nothing
   
End Sub


Компилятор VB говорит: "User-defined type not defined" и показывает на 1 строку кода (Dim appWD As Word.Application)

Что не так? Помогите ответом.
49K
15 октября 2009 года
S0mbre
16 / / 15.10.2009
Все понял! Подключить надо было библу типов MS Word... Эх, дурости хватает :)

Только теперь другая маленькая проблемка. Количество страниц в документах выдает неправильно. Это связано, думаю, с тем, что между открытием документа и считывания статистики слишком мало времени и Ворд не успевает произвести разбивку страниц, следовательно возвращает неправильное количество. Как с этим бороться? Другими словами, как сделать так, чтобы Ворд "дождался" полного открытия документа и разбивки на страницы перед тем, как вывести статистику?
7
15 октября 2009 года
@pixo $oft
3.4K / / 20.09.2006
Можно поискать такое событие.Наверняка должно быть что-то типа DocumentComplete или вроде этого.Или,как у компонента WebBrowser,может быть свойство,возвращающее состояние загрузки
49K
16 октября 2009 года
S0mbre
16 / / 15.10.2009
Поищу, спасибо...
49K
19 октября 2009 года
S0mbre
16 / / 15.10.2009
Нашел. Doc.Repaginate пересчитывает кол-во страниц.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог