Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.06.2015, 23:09   #11
Mat Bourn
Форумчанин
 
Регистрация: 13.04.2015
Сообщений: 140
По умолчанию

Написал код на DELPHI.
Цель: 1. запустить приложение Word;
2. вставить туда уже заранее созданную таблицу;
3. затем добавить в нее необходимые данные;
4. Сохранить с расширением .xps;
5. Запустить программно 1.xps.

Код:
var Word: variant;
var FilePath: string;
begin

  FilePath:= 'C:\Rasp.rtf';
  Word:=CreateOleObject('Word.Application');
  Word.Visible:=Visible;
  Word.Documents.Open(FilePath);
  Word.ActiveDocument.SaveAs('D:\123.xps');

end;
Почему то выбивает ошибку не найден файл ? Если Rasp.rtf расположить на диске С то все работает: FilePath:= 'C:\Rasp.rtf';
1.xps не открывается - пишет "Средству просмотра XPS не удается открыть этот документ" ?

Последний раз редактировалось Mat Bourn; 09.06.2015 в 01:12.
Mat Bourn вне форума Ответить с цитированием
Старый 09.06.2015, 08:34   #12
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Почему то выбивает ошибку не найден файл ? Если Rasp.rtf расположить на диске С то все работает: FilePath:= 'C:\Rasp.rtf';
1.xps не открывается - пишет "Средству просмотра XPS не удается открыть этот документ" ?
Чет ниче не понятно... Указан один файл, а говорится о другом...
Поясни подробнее.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 09.06.2015, 13:32   #13
Mat Bourn
Форумчанин
 
Регистрация: 13.04.2015
Сообщений: 140
По умолчанию

Подробнее... Переменной FilePath указан путь 'C:\Rasp.rtf'; Если изменить путь, указать в папку где находиться программа, выбивает ошибку "не найден файл" ('Rasp.rtf'). Да это уже не столь важно. Решил пойти вашему совету:

Цитата:
Ставишь XPS или другой подобный виртуальный принтер и получаешь результат.
Код с++:

Код:
Variant Word,Table,Cell,Document;
AnsiString FilePath;
FilePath = "C:\\Rasp.rtf";
Word = CreateOleObject("Word.Application");    // открываю Word.
Word.OlePropertySet("Visible", true);   // делаю видимость документа.
// И чтобы не создавать новый лист, например (Word.OlePropertyGet("Documents").OleProcedure("Add"); ) открываю уже созданный на диске С:\ документ формата rtf, уже с готовой отформатированной таблицей.
Word.OlePropertyGet("Documents").OleFunction("Open", WideString(FilePath));

Все работает, таблица отображается. Далее пока непалучается сделать. ( нужно еще добавить в некоторые строки какие то данные. Затем сохранить в документ в формате xps и запустить его для печати программно ).

На Delphi делал - файл сохранялся. Но при ручном открытии он открывался и выбивал ошибку: Средству просмотра XPS не удается открыть этот документ.
Mat Bourn вне форума Ответить с цитированием
Старый 09.06.2015, 13:54   #14
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

А с какого перепугу xps?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 09.06.2015, 16:39   #15
Mat Bourn
Форумчанин
 
Регистрация: 13.04.2015
Сообщений: 140
По умолчанию

Все. Сдаюсь. Сил больше нет. Не могу добавить в cell данные ?
Mat Bourn вне форума Ответить с цитированием
Старый 09.06.2015, 19:29   #16
Mat Bourn
Форумчанин
 
Регистрация: 13.04.2015
Сообщений: 140
По умолчанию

Вообще можно добавлять данные в уже созданную таблицу? Сколько примеров просмотрел. Все только для начало создают таблицы, а затем выполняют какие либо действия.

Последний раз редактировалось Mat Bourn; 09.06.2015 в 21:14.
Mat Bourn вне форума Ответить с цитированием
Старый 09.06.2015, 22:24   #17
Mat Bourn
Форумчанин
 
Регистрация: 13.04.2015
Сообщений: 140
По умолчанию

Это код создает новую таблицу и добавляет данные:

Код:
Variant Word,Document,Table,Cell;
int RowCount,ColCount;

Word = CreateOleObject("Word.Application");
Word.OlePropertySet("Visible", true);

Word.OlePropertyGet("Documents").OleProcedure("Add");
Document = Word.OlePropertyGet("Documents").OleFunction("Item", 1);

Table = Document.OlePropertyGet("Tables").OleFunction("Add", Document.OleFunction("Range", 0, 0), 5, 5);
Cell = Table.OleFunction("Cell", 1, 1);
Cell.OlePropertyGet("Range").OleProcedure("InsertAfter", WideString("Да") + WideString("-") + WideString("бл"));

Cell = Table.OleFunction("Cell", 2, 1);
Cell.OlePropertyGet("Range").OleProcedure("InsertAfter", WideString("Да") + WideString("-") + WideString("бл"));


Cell = Table.OleFunction("Cell", 3, 1);
Cell.OlePropertyGet("Range").OleProcedure("InsertAfter", WideString("Да") + WideString("-") + WideString("бл"));
Как добавить в ячейку готовой таблицы: текст, цифру, хоть что нибудь ?

Последний раз редактировалось Mat Bourn; 10.06.2015 в 00:04.
Mat Bourn вне форума Ответить с цитированием
Старый 10.06.2015, 14:30   #18
Mat Bourn
Форумчанин
 
Регистрация: 13.04.2015
Сообщений: 140
По умолчанию

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

Код с++

Код:
Variant vApp,vDocs, vDoc, vBookmarks, vBookmark, vSelection, vRange;
AnsiString FilePath,str;

FilePath = "C:\\Rasp.rtf";
vApp = CreateOleObject("Word.Application");
vApp.OlePropertySet("Visible", true);
vDocs = vApp.OlePropertyGet("Documents");
vDocs.OleFunction("Add", WideString(FilePath));
vDoc = vDocs.OleFunction("Item",1);
vDoc.OleProcedure("Activate");
vBookmarks = vDoc.OlePropertyGet("Bookmarks");
vBookmark = vBookmarks.OleFunction("Item", WideString("zakla"));  // имя закладки
vBookmark.OleProcedure("Select");
vSelection = vApp.OlePropertyGet("Selection");
vSelection.OlePropertySet("Text", WideString("Козлов Андрей"));  // вставляемый текст
vRange = vDoc.OleFunction("Range", 0, 0);
vRange.OleProcedure(_T("Select"));
На всякий случай библиотеки:
Код:
#include <OleServer.hpp>
#include <ComObj.hpp>
#include <utilcls.h>
Mat Bourn вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужна помощь в С++ Builder Антон1994 C++ Builder 0 03.11.2014 22:20
нужна помощь в Builder Your_Night_Wish Помощь студентам 2 10.11.2009 23:55
Нужна помощь по C++ Builder. Sket4 Помощь студентам 4 03.05.2009 21:21
Как пользоваться компонентом PrintDialog? Bill Gates Общие вопросы Delphi 1 30.12.2007 20:15
Нужна помощь c компонентом TCart Alar Компоненты Delphi 0 30.10.2006 00:36