С наступающим Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++ Builder
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.52/52: Рейтинг темы: голосов - 52, средняя оценка - 4.52
гость
0 / 0 / 17
Регистрация: 17.04.2015
1

Управление Word-м из С++ Builder 6

03.12.2006, 18:57. Просмотров 9353. Ответов 8
Метки нет (Все метки)

Дали задание в институте научиться управлять MS Word из С++ BUILDER 6 с использованием COM технологии. Может у кого есть примеры по созданию такой программы.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.12.2006, 18:57
Ответы с готовыми решениями:

Управление Excel из С++ Builder 6
Друзья спаите, помогите!!! Нужно написать метод записи строки в ячейку Exsel. ...

Управление Web-страницей из C++ Builder
Доброго всем времени суток !!! Если кто-то знает, подскажите, пожалуйста,...

Управление роутером средствами C++ Builder
Необходимо создать программу, которая будет управлять роутером (я использую...

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

Работа с Word в C++Builder v6.0
- Здравствуйте Завсегдатаи! Обращаюсь к Вам с вот таким вопросом: Подскажите...

8
mik-a-el
Администратор
72757 / 42048 / 241
Регистрация: 10.04.2006
Сообщений: 12,777
04.12.2006, 16:44 2
Находите библитотеку типов ворда - ее и использовать.
0
stuper
0 / 0 / 0
Регистрация: 19.03.2007
Сообщений: 5
28.03.2007, 19:49 3
Дали задание в институте научиться управлять MS Word из С++ BUILDER 6 с использованием COM технологии. Может у кого есть примеры по созданию такой программы.


А мне дали задание написать программу снятия и установки кодовой защиты для документов MS Word. У меня такие вопросы:
Что понимать под кодовой защитой (установка пароля на открытие и (или) на запись; или же шифрование документа по криптоалгоритму)? (препод в отпуске спросить не у кого?)
Что со всем этим делать (идей полно, а начать не могу). Потому что они расплывчатые.
И еще более конкретный вопрос:
Свойство FileName диалога OpenDialog (для выбора файла) хранит путь и имя файла в Ansi String.
Функция StgIsStorageFile(wсhar_t *) для определения является ли файл структурированным хранилищем (коим является Word-документ) требует параметр типа wсhar_t *. Что надо сделать и как, чтобы передать имя выбранного файла с помощью диалога в эту функцию.
Следующее не помогло:
C++
1
2
3
4
5
        void *uk;
        wchar_t *wh;
        uk=(void*)(&S);
        wh=(wchar_t*)uk;
        LONG l = StgIsStorageFile(wh);
какой бы я файл не выбирал функция возвращает одно и тоже значение (File not found).
0
Pricolist
сам себе админ и инженер
1344 / 79 / 11
Регистрация: 07.09.2006
Сообщений: 1,571
28.03.2007, 21:33 4
если файл не найден, то проблема может крыться в неправельном адресе файла
0
stuper
0 / 0 / 0
Регистрация: 19.03.2007
Сообщений: 5
30.03.2007, 00:34 5
Отвечаю на свой вопрос, может кому тоже пригодиться.
C++
1
2
3
4
5
6
7
8
9
10
    //выбрать файл
        OpenDialog1->Execute();
        S=OpenDialog1->FileName;
    //Проверка - является ли указанный файл структурированным хранилищем.
        int bufsize; //размер, который будет занимать строка wchar_t
        wchar_t *wh; // это понятно указатель
        str=&S;
        bufsize=str->WideCharBufSize(); //собственно сам метод из //AnsiString для определения размера массива после преобразования
         wh=new wchar_t [bufsize]; //выделение памяти под этот массив
         wh=str->WideChar(wh,bufsize);//само преобразование.
Вобщем, просто так эти типы друг к другу не приводятся.
0
stuper
0 / 0 / 0
Регистрация: 19.03.2007
Сообщений: 5
05.04.2007, 22:01 6
Находите библитотеку типов ворда - ее и использовать.
Пробую работать с этой библиотекой, но вот что получается (точнее не получается):

кинул на форму один WordApplication и один WordDocument из вкладки Office2k. В соответстующих местах появились необходимые заголовки и объявления.
С помощью такого кода
C++
1
2
3
4
5
6
7
8
9
// TWordApplication *MSWord;
// TWordDocument *WordDoc;
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
  MSWord->set_Visible(true);
  MSWord->Dialogs->Item(wdDialogFileOpen)->Show();
  WordDoc->ConnectTo(MSWord->ActiveDocument);
}
надеялся вызвать word, выбрать любой документ, сделав его активным.
Далее с ним надо проделать следующие манипуляции - задать пароль на открытие и закрыть. Но до этого не дошло, потому что на этапе компиляции выскакивают следующие ошибки:
[C++ Error] Unit1.cpp(23): E2015 Ambiguity between 'wdDialogFileOpen' and 'Word_2k::wdDialogFileOpen'
[C++ Error] Unit1.cpp(23): E2285 Could not find a match for 'Word_2k:ialogs::Item(WdWordDialog)'
Код брал из примера Русской справки по Builder Архангельского. Почему он у меня не работает и что надо сделать чтобы заработал?
0
stuper
0 / 0 / 0
Регистрация: 19.03.2007
Сообщений: 5
09.04.2007, 00:59 7
1.Ответьте пожалуйста, всегда ли загруженный Ворд с помощью Connect(), если с ним разрывать связь пользуясь Disconnect() при закрытии программы написанной в Builder6 будет закрываться.
Можно ли каким-нибудь образом оставить его (Ворд) работающим при закрытии моей проги.
Использую компоненты TWordApplication и TWordDocument. Свойства AutoConnect, AutoQuit = false.

2. Где-то прочитал, что вызов любого свойства или метода TWordApplication автоматически вызывает метод Connect(). По опыту понял, что это действительно так. Еще один момент - при добавлении на форму компонента TWordApplication в классе формы появляется описание соответствующего указателя. Но по тексту программы ни где память для него не выделяется явным образом. В связи с этим догадка №1 - " при вызове метода Connect() выделяется память и с ней связывается указатель".

3. Логично было бы предположить, что метод Disconnect() должен был бы эту память освобождать.
Делаем дисконнект, оставляя работающим сервер. Но почему при повторном вызове Connect(), даже если ConnectKind=ckNewInstance приложение связывается с уже запущенным сервером Word.
А если применить к указателя метод Free(), то при повторном вызове Connect() связаться с сервером уже не может. Как же так выделяя память раньше он не может выделить теперь?

Пожалуйста поясните логику работы этих методов и посоветуйте как сделать так чтобы из приложения запустив Ворд, далее он не закрывался при закрытии проги.
0
stuper
0 / 0 / 0
Регистрация: 19.03.2007
Сообщений: 5
18.05.2007, 13:38 8
надеялся вызвать word
C этим я справился, уже не помню как, извините.
У меня теперь другой вопрос. Надеюсь, что на него я получу ответ раньше чем сам найду.
Ладно по сути.
У меня есть форма, на ней поле . В него вводится пароль. Есть кнопка Button. при нажатии на которую берется введеный в поле пароль и передается в открытый документ Word. И сразу же это изменение сохраняется. Так я устанавливаю пароль на документ.
Вот код
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
void __fastcall TPassword::SetPas_ButtonClick(TObject *Sender)
{
    if(N)
      {
          int bufsize;
          AnsiString s=Password_Edit->Text;
          bufsize=s.WideCharBufSize();
          wchar_t *wh=new wchar_t [bufsize];
          AnsiString s1(WordDoc->FullName);
          if(Application->MessageBox(s1.c_str(), "подтверждение пароля", MB_YESNO)==IDYES)
            {
                wh=s.WideChar(wh,bufsize);
                WordDoc->set_Password(wh);
                WordDoc->Save();
            }
          else
            {
              delete wh;
              return;
            }
          delete wh;
      }
}
Если же сразу заглянуть в меню сервис\параметры на вкладку безопасность в Worde.
Мы это изменение будем лицезреть.
Мы можем ввести в поле другой пароль, нажать SetPas_Button и снова увидеть измененный пароль.
Но вот горе, я не могу найти способ как таким же нажатием на UnsetPas_Button (другая кнопка для снятия пароля) снять этот пароль. Пытался оставлять пустую строку и снова нажимать на SetPas_Button - это не приводит к изменениям, пароль какой был на документе такой и остается. Пытался делать так:
C++
1
2
wh=L"";  
WordDoc->set_Password(wh);
Ничего не помогает. Посоветуйте что можно еще сделать.
0
andru
0 / 0 / 0
Регистрация: 30.03.2013
Сообщений: 4
09.06.2007, 13:01 9
Народ, кто-нибудь знает, как объекты Equation в JPG перевести???
0
09.06.2007, 13:01
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.06.2007, 13:01

Word и Excel в C++ Builder
Всем привет! Заранее скажу, что только начинаю изучать С++ и поэтому буду рад...

Открытие документа Word в Builder
подскажите пожалуйста как открить файл word при нажатии кнопки в builder...

C++Builder Вывод Form1 в Word
можно ли поместить в вордовский документ вывод (Form1) с С++?


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru