Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.03.02;
Скачать: CL | DM;

Вниз

Чтение количество страниц в документе Word   Найти похожие ветки 

 
saNat   (2008-02-06 11:24) [0]

Доброго времени суток, Мастера :о)

Подскажите, пожалуйста, по данному вопросу. Приложение "делает" выгрузку отчета в Word. Для этого создан шаблон, например, из 2-страниц. За счет выгружаемых данных, объем документа возрастает, например до 3-страниц. На титульном листе нужно указать количество страниц отчета.
Сейчас делаю так:

Function TProjectData.ExportCharge(Path:String):Boolean;
Var
 ExportSource                                          :Variant;
 MySection                                             :Variant;
 SelectionStart                                        :Integer;
 SelectionEnd                                          :Integer;
 Buffer                                                :String;
Begin
Result:=True;
Try
 ExportSource:=CreateOleObject("Word.Application");
 ExportSource.Documents.Add(ExtractFilePath(ParamStr(0))+"\Report.dot");
 //Так заполняем обязательные поля
 ExportSource.Selection.Find.Text:="###Наименование организации###";
 ExportSource.Selection.Find.Replacement.Text:=Value_CompanyName;
 ExportSource.Selection.Find.Execute(Replace:=2);
 //Так заполняю поля в зависимости от наличия или отсутствия (-1) значения
 If Value_N<>-1
  Then
   Begin
    ExportSource.Selection.Find.Text:="###КПГ###";
    ExportSource.Selection.Find.Replacement.Text:="";
    ExportSource.Selection.Find.Execute(Replace:=2);
    ExportSource.Selection.Find.Text:="###КПГЗначение###";
    ExportSource.Selection.Find.Replacement.Text:=IntToStr(Value_N);
    ExportSource.Selection.Find.Execute(Replace:=2);
   End
  Else
   Begin
    ExportSource.Selection.Start:=0;
    ExportSource.Selection.End:=0;
    ExportSource.Selection.Find.Forward:=True;
    ExportSource.Selection.Find.Text:="###КПГ###";
    SelectionStart:=ExportSource.Selection.Start;
    ExportSource.Selection.Find.Execute;
    ExportSource.Selection.Start:=0;
    ExportSource.Selection.End:=0;
    ExportSource.Selection.Find.Forward:=True;
    ExportSource.Selection.Find.Text:="###КПГЗначение###";
    ExportSource.Selection.Find.Execute;
    SelectionEnd:=ExportSource.Selection.End;
    ExportSource.Selection.Start:=SelectionStart;
    ExportSource.Selection.Start:=SelectionEnd;
    ExportSource.Selection.Delete;
    ExportSource.Selection.Rows.Delete;
   End;
 //Снова обязательное поле
 ExportSource.Selection.Find.Text:="###ЕИЗначение###";
 ExportSource.Selection.Find.Replacement.Text:=Value_Units;
 ExportSource.Selection.Find.Execute(Replace:=2);
 //Выполняем нумерацию страниц
 ExportSource.Selection.Start:=0;
 ExportSource.Selection.End:=0;
 MySection:=ExportSource.ActiveDocument.Range.Sections.Item(1);
 MySection.Headers.Item(1).PageNumbers.Add(PageNumberAlignment:=2,FirstPage:=Fals e);
 //Заполняем поле "Количество страниц..."
 Buffer:=ExportSource.ActiveDocument.BuiltInDocumentProperties[$0000000E].Value;
 If Copy(Buffer,Length(Buffer),1)="1"
  Then
    Buffer:=Buffer+" &#241;&#242;&#240;&#224;&#237;&#232;&#246;&#229;"
  Else
    Buffer:=Buffer+" &#241;&#242;&#240;&#224;&#237;&#232;&#246;&#224;&#245;";
 ExportSource.Selection.Find.Text:="###КСЗначение###";
 ExportSource.Selection.Find.Replacement.Text:=Buffer;
 ExportSource.Selection.Find.Execute(Replace:=2);
 //Сохранение документа
 If Path<>""
  Then
    ExportSource.ActiveDocument.SaveAs(Path);
 //Закрываем документ
 ExportSource.ActiveDocument.Close(False);
 //Закрываем MS Word
 ExportSource.Quit;
Except
 Result:=False;
End;
ExportSource:=UnAssigned;
End;

В данном случае нумерация страниц осуществляется, но количесвто страниц указывается неверно. Я где-то неправ?

С уважением, ЕВА.


 
saNat   (2008-02-06 11:27) [1]

Возможно требуется добавить, что "поля" в шаблоне организованы таблицей без отрисовки границ.


 
saNat   (2008-02-06 12:24) [2]

Нашел что можно читать свойство Information(wdNumberOfPagesInDocument);

Buffer:=ExportSource.Range.Information(4{wdNumberOfPagesInDocument});

говорит что у Range() нет такого метода :(


 
EvS ©   (2008-02-06 12:27) [3]

> В данном случае нумерация страниц осуществляется, но количесвто
> страниц указывается неверно


И насколько неверно?


 
saNat   (2008-02-06 12:28) [4]

На данный момент в шаблоне 2 страницы. После выгрузки имеем 3, но выводит значение "2"


 
easy ©   (2008-02-06 12:56) [5]

Вставка -> Поле -> Категории -> О документе -> NumPages -> OK
После всех заполнений -
ExportSource.ActiveDocument.Fields.Update;


 
saNat   (2008-02-06 12:58) [6]

Не до конца понял. Счас попробую. Спасибо большое.


 
saNat   (2008-02-06 13:03) [7]

Гм... В принципе то что искал - спасибо. Только возникает момент - после значения нужно вставить "странице/ах". Я правильно понимаю, что бы не читать значение поля из документа можно "внутри" обратиться к полю и прочитать значение?


 
easy ©   (2008-02-06 13:10) [8]


> "странице/ах"

стр.
=)


 
saNat   (2008-02-06 13:16) [9]

;) так заказчица хочет


 
saNat   (2008-02-06 14:22) [10]

Гм... Подскажите, пожалуйста, почему ниже приведенный код работает "не так как хочется".

 //Обновляю поле подстановки
 ExportSource.ActiveDocument.Fields.Update;
 //Выполняю нумерацию страниц
 ExportSource.Selection.Start:=0;
 ExportSource.Selection.End:=0;
 MySection:=ExportSource.ActiveDocument.Range.Sections.Item(1);
 MySection.Headers.Item(1).PageNumbers.Add(PageNumberAlignment:=2,FirstPage:=Fals e);
 //Заполняю подстановку "Отчет выполнен на...."
 Buffer:=IntToStr(ExportSource.ActiveDocument.Fields.Item(1).Result);
 If (Copy(Buffer,Length(Buffer),1)="1")And(StrToInt(Buffer)<>11)
  Then
    Buffer:=" странице ["+Buffer+"]"
  Else
    Buffer:=" страницах ["+Buffer+"]";
 ExportSource.Selection.Find.Text:="###Подстановка###";
 ExportSource.Selection.Find.Replacement.Text:=Buffer;
 ExportSource.Selection.Find.Execute(Replace:=2);


В квадратных скобочках я вывожу значение поля подстановки для контроля. Получаю результаты:

Отчет выполнен на 3 страницах [2]
Отчет выполнен на 2 страницах [2]


Почему оно так?


 
saNat   (2008-02-06 14:29) [11]

Сейчас на том же коде попробовал шаблон, в котором дабавил пустых ячеек таблицы так, что шаблон располагается на 20 страницах. Получил

Отчет выполнен на 4 страницах [3]

:(


 
saNat   (2008-02-06 14:46) [12]

Хм...
Шаблон из себя представляет каркас таблицы (т.е. линии не рисуются). Первый лист - титульный. Далее собственно результаты работы приложения. Грубо говоря, на втором и последующих листах таблица из одного столбца. Сейчас шаблон представляет состоит из 21 страницы. В последней ячейке записано слово test. Запускаю формирование отчета. В методе такой код:

...
//Обновляю поле подстановки
ExportSource.ActiveDocument.Fields.Update;
//Выполняю нумерацию страниц
ExportSource.Selection.Start:=0;
ExportSource.Selection.End:=0;
MySection:=ExportSource.ActiveDocument.Range.Sections.Item(1);
MySection.Headers.Item(1).PageNumbers.Add(PageNumberAlignment:=2,FirstPage:=Fals e);
//Сохранение документа
If Path<>""
 Then
   ExportSource.ActiveDocument.SaveAs(Path);
//Закрываем документ
ExportSource.ActiveDocument.Close(False);
//Закрываем MS Word
ExportSource.Quit;
...


В итоге получаю:

Расчёт выполнен на 3


Что-то вообще не так...


 
saNat   (2008-02-06 14:47) [13]

Забыл сказать, если открыть сгенерированный документ, и щелкнуть по полю, выбрать "Обновить поле", то оно становится равным 21.


 
saNat   (2008-02-06 15:34) [14]

Отчет весь доделал. Вот только с нумерацией этот косяк остался. :(
Подскажите, пожалуйста.


 
saNat   (2008-02-07 00:13) [15]

Доброго времени суток, Мастера (:

Может быть у кого-нибудь из Вас есть идея как поправить проблему?

С уважением, ЕВА


 
saNat ©   (2008-02-07 20:04) [16]

Тема для меня по-прежнему актуальна....


 
EvS ©   (2008-02-07 21:01) [17]

По идее должно работать:

 Buffer:=IntToStr(ExportSource.ActiveDocument.Range.ComputeStatistics($00000002)) ;


 
saNat ©   (2008-02-08 08:26) [18]

Спасибо (: Счас попробую этот вариант...


 
saNat ©   (2008-02-08 14:14) [19]

Помогло (: Большое Вам спасибо.

С уважением, ЕВА.



Страницы: 1 вся ветка

Текущий архив: 2008.03.02;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.02 c
15-1201686214
andreoman
2008-01-30 12:43
2008.03.02
Microsoft Word 9.0 что за версия ?


15-1201334473
del
2008-01-26 11:01
2008.03.02
Санер радиочастот


2-1201689760
Ell
2008-01-30 13:42
2008.03.02
Нужна помощь


15-1200384548
KSergey
2008-01-15 11:09
2008.03.02
Интернет, компьютер, ребенок


2-1201951880
Sten
2008-02-02 14:31
2008.03.02
Скролбары