C++Builder
Начало
Форум
Помощь
Войти
Регистрация
C++Builder
>
Forum
>
Вопросы программирования
>
Общие вопросы программирования в C++Builder
>
Узнать количество страниц документа MS Word
Страниц: [
1
]
Вниз
Печать
Автор
Тема: Узнать количество страниц документа MS Word (Прочитано 8605 раз)
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
Re: Узнать количество страниц документа MS Word
«
Ответ #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
Re: Узнать количество страниц документа MS Word
«
Ответ #2 :
17 Февраль 2010, 14:26:05 »
тынць
Записан
2rik
Участник
Сказали спасибо: +0/-0
Offline
Сообщений: 24
Re: Узнать количество страниц документа MS Word
«
Ответ #3 :
17 Февраль 2010, 14:45:02 »
Спасибо, ребят) Вышло
Записан
2rik
Участник
Сказали спасибо: +0/-0
Offline
Сообщений: 24
Re: Узнать количество страниц документа MS Word
«
Ответ #4 :
17 Февраль 2010, 16:24:06 »
Цитата: 2rik от 17 Февраль 2010, 14:45:02
Спасибо, ребят) Вышло
Рано радовался .. ))) Чет тупит снова ) При попытке прочитать количество страниц.
Когда пытаюсь так:
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
Re: Узнать количество страниц документа MS Word
«
Ответ #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
]
Вверх
Печать
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Вопросы программирования
-----------------------------
=> Общие вопросы программирования в C++Builder
=> Программирование с FMX
=> Работа с базами данных в C++Builder
=> Windows API
=> Технологии COM/DCOM, ActiveX
=> Аспекты и идеология профессиональной разработки ПО
=> Компьютерное железо и системное администрирование
=> студенческий городок
-----------------------------
Обсуждение материалов на сайте
-----------------------------
=> Обсуждений статей на сайте
=> Обсуждение материалов из файлового архива
=> Компоненты сторонних разработчиков к С++Builder
-----------------------------
Работа сайта и новости
-----------------------------
=> Ищу/предлагаю работу
=> Новости из мира программирования
=> Новости - события календаря
=> Голосования
=> Компьютерный юмор и приколы
=> Работа сайта
=> Флейм
-----------------------------
FAQ - частозадаваемые вопросы/ответы
-----------------------------
=> FAQ, общие вопросы, посвящённые C++Builder
=> FAQ, вопросы по базам данных
=> FAQ, вопросы по компонентам
Загружается...