C++Builder
  Начало   Форум   Помощь Войти Регистрация  
Страниц: [1]   Вниз
  Печать  
Автор Тема: Узнать количество страниц документа MS Word  (Прочитано 8544 раз)
2rik
Участник


Сказали спасибо: +0/-0
Offline

Сообщений: 24


Узнать количество страниц документа MS Word
« : 17 Февраль 2010, 12:46:03 »

Ребят, помогите. Нужно узнать количество страниц документа МС Ворд.
На одном из форумов прочитал такое:

long value;
OleVariant IncludeFootnotes = True;
if( SUCCEEDED(WordApp->ActiveDocument->ComputeStatistics(wdStatisticPages,IncludeFootnotes,&value)) )
{
   // количество листов посчитано
   ShowMessage(value);
}

Но я не могу разобраться, что за объект WordApp ))

Мой код открытия:

 Variant oledoc = CreateOleObject("Word.Application");
 oledoc.OlePropertySet("Visible", true);
 oledoc.OlePropertyGet("Documents").OleProcedure("Open", "c:\\1.doc", false, false, false, "",  "",    false, "", "" , 0, "");
 Variant ole = oledoc.OlePropertyGet("ActiveDocument");

Как мне подстроить подсчет кол-ва страниц под свой код ?)
Записан
S0mbre
Глобальный модератор


Сказали спасибо: +1113/-22
Offline

Сообщений: 2132

S0mbre


« Ответ #1 : 17 Февраль 2010, 13:32:19 »

https://cbuilder.ru/index.php/topic,4422.0.html
А также вот тебе макрос, который я писал в Экселе для подсчета статистики Вордовских документов:
Код:
Sub Кнопка1_Щелчок()
   
    Dim appWD As Word.Application ' объект Word
    Dim docWD As Word.Document ' документ Word
    Dim rg_paths As Range ' список путей к документам
    Dim n_paths_row, n_paths_rows, n_paths_col, pages, chars As Integer
       
    On Error GoTo ErrorHandler
   
    ' Инициализируем переменные
    Set appWD = New Word.Application
    appWD.Visible = False
     
    Set rg_paths = ActiveSheet.Range("E1:E76")
   
    ' Номера строк и столбцов списка
    n_paths_row = rg_paths.Row
    n_paths_rows = rg_paths.Rows(rg_paths.Rows.Count).Row
    n_paths_col = rg_paths.Column
   
    pages = chars = 0
    For rw = n_paths_row To n_paths_rows ' по всем строкам списка
        ' открываем этот документ Word
        Set docWD = appWD.Documents.Open(Filename:=ActiveSheet.Cells(rw, n_paths_col).Text, ReadOnly:=True, Visible:=False)
        If docWD Is Nothing Then
            MsgBox ("Не могу открыть документ!")
            GoTo ErrorHandler
        End If
        ' Записываем данные статистики
        docWD.Repaginate
        pages = docWD.BuiltinDocumentProperties(wdPropertyPages)
        chars = docWD.BuiltinDocumentProperties(wdPropertyCharsWSpaces)
        docWD.Close (False) ' закрываем документ без запроса
        ' Пишем данные в Excel
        ActiveSheet.Cells(rw, n_paths_col + 1).Value = pages
        ActiveSheet.Cells(rw, n_paths_col + 2).Value = chars
        'ActiveSheet.Cells(rw, n_paths_col + 3).Text = CStr(docWD.BuiltinDocumentProperties(wdPropertyTitle))
       
    Next rw
   
    ' закрываем Word
    appWD.Quit (False)
    ' уничтожаем обьект - документ
    Set appWD = Nothing
    ' уничтожаем обьект - Word
    Set appWD = Nothing
   
Exit Sub

ErrorHandler:
   
    MsgBox (Error)
   
    If Not appWD Is Nothing Then
        appWD.Quit (False) ' закрываем Word
        Set appWD = Nothing ' уничтожаем обьект - Word
    End If
   
End Sub

Просто переведи нужные тебе строчки на С++ OLE и все.
Записан
Ex_Soft
Участник


Сказали спасибо: +12/-10
Offline

Сообщений: 74


« Ответ #2 : 17 Февраль 2010, 14:26:05 »

тынць
Записан
2rik
Участник


Сказали спасибо: +0/-0
Offline

Сообщений: 24


« Ответ #3 : 17 Февраль 2010, 14:45:02 »

Спасибо, ребят) Вышло 
Записан
2rik
Участник


Сказали спасибо: +0/-0
Offline

Сообщений: 24


Re: Узнать количество страниц документа MS Word
« Ответ #4 : 17 Февраль 2010, 16:24:06 »

Спасибо, ребят) Вышло 
Рано радовался .. ))) Чет тупит снова ) При попытке прочитать количество страниц.

Когда пытаюсь так:

        MSWord = CreateOleObject("Word.Application");
        MSWord.OlePropertySet("Visible", false);
        MWODocs = MSWord.OlePropertyGet ("Documents");
        MWODoc  = MWODocs.OleFunction   ("Open", "c:\\1.doc", false, true, false);
        Pages=MWODoc.OlePropertyGet("BuiltInDocumentProperties").OlePropertyGet("Item",wdPropertyPages).OlePropertyGet("Value");

Копмилятор выдает мне вот что:
[C++ Error] Unit1.cpp(199): E2451 Undefined symbol 'wdPropertyPages'
[C++ Error] Unit1.cpp(199): E2285 Could not find a match for 'Variant::OlePropertyGet(char *,undefined)'

Библиотеки:
//---------------------------------------------------------------------------
#include
#include "Masks.hpp"
#include "SysUtils.hpp"
#include
#include "sysvari.h"
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "cdiroutl"
#pragma resource "*.dfm"
#pragma link "Word_2K_SRVR"

Что может быть за фигня ? )


Фухх ) Оказывается, надо было добавить библиотеку word_2k.h
« Последнее редактирование: 17 Февраль 2010, 16:54:31 от 2rik » Записан
2rik
Участник


Сказали спасибо: +0/-0
Offline

Сообщений: 24


« Ответ #5 : 18 Февраль 2010, 17:08:57 »

Снова траблы. Поскольку все файлы у меня, которые подлежали обработке программой - были 1 или 2-х страничные, то не смог проверить сразу.
Короче,
Pages=MWODoc.OlePropertyGet("BuiltInDocumentProperties").OlePropertyGet("Item",wdPropertyPages).OlePropertyGet("Value");
Считает правильно, когда 1 или 2 страничный документ. Когда выше (4, 5, 6) - он считает, что страниц три.
Ну и еще протестил с файлом на 960 страниц. Посчитал, как ни странно, правильно - 960.

Че за фигня может быть ? )


Попробовал по методу: Макрос в VB + перевод на С++. Думал, что это возникает из за того, что просто ворд не успевает просчитать кол-во страниц и записать корректные данные в свойства документа. Поэтому решил открывать документ и опускаться в конец документа, а потом лишь считывать его свойства.

MSWord.OlePropertyGet("Selection").OleProcedure("EndKey");

Но та же фигня - неверно считывает количество страниц ((
« Последнее редактирование: 18 Февраль 2010, 17:51:13 от 2rik » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  




....

Powered by SMF 1.1.21 | SMF © 2025, Simple Machines
Страница сгенерирована за 0.039 секунд. Запросов: 23.