С Новым годом! Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/15: Рейтинг темы: голосов - 15, средняя оценка - 4.73
 Аватар для Within_t
34 / 21 / 11
Регистрация: 20.10.2013
Сообщений: 577

Ole Server Word установка полей

11.07.2019, 12:51. Показов 3355. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день!

Пытаюсь программно установить поля листа, и вылетает ошибка "неизвестная ошибка", не могу понять в чем дело уже и макрос в word написал и ни чего(((

.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <ComObj.hpp> 
#include <utilcls.h>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
private:    // User declarations
    bool     fStart;     // служит индикатором того, что сервер запущен
 
    Variant  vVarApp,
             vVarDocs,
             vVarDoc,
             vVarParagraphs,
             vVarParagraph,
             vVarRange,
             vVarTables,
             vVarTable,
             vVarCell;
 
public:     // User declarations
    __fastcall TForm1(TComponent* Owner);
};
.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
void __fastcall TForm1::FormShow(TObject *Sender)
{
    if(!fStart)
    {
        try
        {
            //Создаем объект Word.Application
            vVarApp=CreateOleObject("Word.Application");
            fStart=true;
        }
        catch(...)
        {
 
        }
 
        vVarApp.OlePropertySet("Visible",true);             //Делаем сервер видимым
        vVarDocs=vVarApp.OlePropertyGet("Documents");       //Получаем свойство Documents объекта
        vVarDocs.OleProcedure("Add");                       //Создаем документ
        vVarDoc=vVarDocs.OleFunction("Item",1);             //Будем работать с первым документом
        vVarDoc.OleProcedure("Activate");                   //Смотреть будем тоже на первый документ
        vVarParagraphs=vVarDoc.OlePropertyGet("Paragraphs");//активируем лист
        
vVarDoc.OlePropertyGet("PageSetup").OlePropertySet("TopMargin",vVarApp.OleFunction("CentimetersToPoints",(int)2));
    }
}

Visual Basic
1
2
3
4
5
6
7
    With ActiveDocument.PageSetup
            .LineNumbering.Active = False
            .Orientation = wdOrientPortrait
            .TopMargin = CentimetersToPoints(0.5)
            .BottomMargin = CentimetersToPoints(1.5)
            .LeftMargin = CentimetersToPoints(2)
            .RightMargin = CentimetersToPoints(1.5)
Помогите)
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
11.07.2019, 12:51
Ответы с готовыми решениями:

OLE и Word portable
Здравствуйте. Если на компьютере установлен стандартный MS Word, то программа работает с документами. Но если установлен только Word...

Ole excel и word
Здравствуйте, проблема такая: при использование ole для word и excel при использование word и excel не закрывается excel(висит в диспетчера...

с++ Ole word печать
Дайте пожалуйста такую штуку отправка на печать файла borland c++ builder файл открыт где то видел функцию отправки на печать на...

15
Модератор
 Аватар для D1973
9908 / 6445 / 2455
Регистрация: 21.01.2014
Сообщений: 27,363
Записей в блоге: 3
11.07.2019, 13:10
Within_t, вот что сказано по этому поводу на сайте мелкомягких:
Application.CentimetersToPoints method (Word)

Converts a measurement from centimeters to points (1 cm = 28.35 points). Returns the converted measurement as a Single.
Вот отсюда и танцевать надо...
C++
1
vVarDoc.OlePropertyGet("PageSetup").OlePropertySet("TopMargin", 56.7);
Получите верхний отступ 2 сантиметра, как Вам и надо.
1
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33371 / 21497 / 8234
Регистрация: 22.10.2011
Сообщений: 36,893
Записей в блоге: 12
11.07.2019, 13:43
Цитата Сообщение от D1973 Посмотреть сообщение
Вот отсюда и танцевать надо...
Начало поста хорошее. Окончание - никудышное. Это что получается, если мне надо ввести количество сантиметров в поле на форме, и потом передать это в Word - мне надо остановиться, посчитать количество точек, пересобрать программу и потом продолжить? Вообще-то в доках написано, в чем проблема. Строго требуется параметр типа Single на входе, а ТС передает Integer. Вот так:
C++
1
vVarDoc.OlePropertyGet("PageSetup").OlePropertySet("TopMargin",vVarApp.OleFunction("CentimetersToPoints",2.0));
все нормально отрабатывает, никаких ошибок не наблюдается.
2
Модератор
 Аватар для D1973
9908 / 6445 / 2455
Регистрация: 21.01.2014
Сообщений: 27,363
Записей в блоге: 3
11.07.2019, 15:36
Цитата Сообщение от volvo Посмотреть сообщение
Это что получается...мне надо остановиться, посчитать количество точек, пересобрать программу и потом продолжить?
Ну, не надо утрировать... Никто не мешает объявить константой значение 28.35 и прекрасно передавать формулой типа
C++
1
2
3
const Single pps = 28.35;
...
vVarDoc.OlePropertyGet("PageSetup").OlePropertySet("TopMargin", pps * StrToFloatDef(Edit1->Text, 1.0));
Даже меньше букв печатать

Добавлено через 3 минуты

Не по теме:

Цитата Сообщение от volvo Посмотреть сообщение
vVarDoc.OlePropertyGet("PageSetup").OleP ropertySet("TopMargin",vVarApp.OleFuncti on("CentimetersToPoints",2.0));
Это что получается, если мне надо не 2, а 3 сантиметра, я должен вместо 2.0 написать 3.0, пересобрать программу и потом продолжить?


0
 Аватар для Within_t
34 / 21 / 11
Регистрация: 20.10.2013
Сообщений: 577
11.07.2019, 16:55  [ТС]
Цитата Сообщение от D1973 Посмотреть сообщение
const Single pps = 28.35; ... vVarDoc.OlePropertyGet("PageSetup").OleP ropertySet("TopMargin", pps * StrToFloatDef(Edit1->Text, 1.0));
не знаю может нужно что то еще добавлять, но не работает сразу кидает меня в библиотеку sysvari.h (ее я тоже добавил)

C++
1
2
прокатил такой код
vVarDoc.OlePropertyGet("PageSetup").OlePropertySet("TopMargin",113.4);
volvo, я посмотрел тот сайт, но я так и не разобрался куда впихнуть тип Single (((
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33371 / 21497 / 8234
Регистрация: 22.10.2011
Сообщений: 36,893
Записей в блоге: 12
11.07.2019, 17:11
но не работает
А у меня - работает (XE4 + Office XP, все ёлочные гирлянды, вышедшие позже, идут лесом). И кому я должен верить, своим глазам или не информативному сообщению о том, что кого-то куда-то кидает?

Добавлено через 2 минуты
Никто не мешает объявить константой значение 28.35 и прекрасно передавать формулой
Мне - мешает. Здравый смысл. Если есть метод - его надо использовать. На все констант не напасешься.
0
 Аватар для Within_t
34 / 21 / 11
Регистрация: 20.10.2013
Сообщений: 577
11.07.2019, 17:30  [ТС]
volvo, когда я использую

C++
1
2
3
const Single pps = 28.35;
...
vVarDoc.OlePropertyGet("PageSetup").OlePropertySet("TopMargin", pps * StrToFloatDef(Edit1->Text, 1.0));
мне открывается


подключил эту библиотеку, но я не понимаю что дальше делать...
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33371 / 21497 / 8234
Регистрация: 22.10.2011
Сообщений: 36,893
Записей в блоге: 12
11.07.2019, 19:45
Within_t, я вообще-то про свой код говорил, этот я даже проверять не стану, потому что так никогда не писал, и начинать не хочу.
0
 Аватар для Within_t
34 / 21 / 11
Регистрация: 20.10.2013
Сообщений: 577
11.07.2019, 20:00  [ТС]
))) ну ваш код у меня не работает, вылетает ошибка (даже не пишет какая), может дело в обработчиках


изначально я писал так
C++
1
vVarDoc.OlePropertyGet("PageSetup").OlePropertySet("TopMargin",vVarApp.OleFunction("CentimetersToPoints",(int)2));

поэтому воспользовался
C++
1
vVarDoc.OlePropertyGet("PageSetup").OlePropertySet("TopMargin",113.4);
0
Модератор
 Аватар для D1973
9908 / 6445 / 2455
Регистрация: 21.01.2014
Сообщений: 27,363
Записей в блоге: 3
12.07.2019, 04:43
Цитата Сообщение от volvo Посмотреть сообщение
vVarDoc.OlePropertyGet("PageSetup").OleP ropertySet("TopMargin",vVarApp.OleFuncti on("CentimetersToPoints",2.0));
Очень интересно знать почему, но этот код и у меня не сработал (XE6, XE8, XE 10.2) ...



минимальный пример, чтобы не быть голословным...

Default.rar

Цитата Сообщение от Within_t Посмотреть сообщение
мне открывается
тут выражение надо явно приводить к типу Single...
C++
1
vVarDoc.OlePropertyGet("PageSetup").OlePropertySet("TopMargin", static_cast<Single>(pps * StrToFloatDef(Edit1->Text, 1.0)));
0
 Аватар для Within_t
34 / 21 / 11
Регистрация: 20.10.2013
Сообщений: 577
12.07.2019, 05:56  [ТС]
D1973, у меня этот метод не отработал, про static cast,х отя сделал как у вас. Я грешу на версию xe2

Если перейти на более новую то возможно не будет работать потом программа, )
0
Модератор
 Аватар для D1973
9908 / 6445 / 2455
Регистрация: 21.01.2014
Сообщений: 27,363
Записей в блоге: 3
12.07.2019, 06:15
Within_t, Вы пример приложенный запускали? Что говорит?
0
 Аватар для Within_t
34 / 21 / 11
Регистрация: 20.10.2013
Сообщений: 577
12.07.2019, 06:49  [ТС]
У меня просто вылетает вылетает "неопознанная ошибка" и все)
0
Модератор
 Аватар для D1973
9908 / 6445 / 2455
Регистрация: 21.01.2014
Сообщений: 27,363
Записей в блоге: 3
12.07.2019, 07:08
Это при нажатии на кнопку "Не работает", если Вы про мой минимальный проект говорите... А при нажатии на кнопку "Работает" что происходит?
0
 Аватар для Within_t
34 / 21 / 11
Регистрация: 20.10.2013
Сообщений: 577
12.07.2019, 13:36  [ТС]
Если нажать "работает", то все норм (верхний отступ)

Если нажать "не работает", то
0
0 / 0 / 0
Регистрация: 07.11.2017
Сообщений: 21
17.11.2020, 18:48
А как в итоге использовать CentimetersToPoints?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
17.11.2020, 18:48
Помогаю со студенческими работами здесь

Ole Word, управление печатью
Добрый день. Подскажите правильный формат команды дабы можно было управлять печатью с помощью OLE. Я делал так: int Bounds =...

Редактирование шаблона OLE-Word
Здесь классно написано как создать с нуля отчёт в Word: ...

Работа с OLE сервером Word
Добрый день) У меня есть проблемка, которую ни как не могу решить: Мне нужно каким-то образом удалить интервалы между абзацами. А...

Работа с Word Ole-сервером...
Начал работать с Ole-сервером, но возникли 2 проблемки: 1. Как создать документ, используя стандартный шаблон - normal.dot, но при этом...

OLE Automation пару вопросов по Word
Есть у меня парочка вопросов насчет Word. Как можно сделать так, чтобы изменять размер каждого столба в отдельности, знаю только как...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru