Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: OLE+WORD  (Прочитано 19551 раз)
0 Пользователей и 1 Гость смотрят эту тему.
AL CAPONE
Гость
« : 06-03-2005 17:12 » 

Народ, помогите пожалуйста кто чем сможет. Ситуация такова: имеется doc-файл с таблицей из 3-х столбцов и 400 строк, в 1-м столбце номера от 1 до 400 соответственно, во 2-м столбце вопрос и 5 вариантов ответа к нему, в 3-м столбце правильные ответы (сложность в том, что правильных ответов на 1 вопрос может быть несколько, и они хранятся в WORD в виде , например, 1 2 или 3 5). Теперь вопросы :
1) как предварительно из этого файла считать правильные ответы в таблицу Paradox 7.0 следующего вида :
номер вопроса / ответ1/ ответ2/ ответ3/ ответ4/ ответ5 ,
где номер вопроса берётся из 1-го столбца DOC-файла, а дальше , если у заданного вопроса среди правильных ответов есть, например ответ 4, то нужно в базу поставить единицу в столбец ответ4, иначе в базу нужно поставить 0;
2) как с помощью OLE-технологий произвести считывание вопроса с заданным номером из такого DOC-файла и на какой компонент формы его можно
забросить для корректного отображения.
Все заранее огромное спасибо за помощь !
Записан
DanZer
Гость
« Ответ #1 : 10-03-2005 01:53 » 

Работа с Word есть в справке и примерах OLE-автоматизации. В Delphi 6 - точно. В крайнем случае можно посмотреть http://delphiworld.by.ru/base/delphi_and_excel_ole_automation.html?extract=1110419158
1) Номер вопроса и ответы считываются в цикле, в том же цикле можно сразу обрабатывать считанное и писать в таблицу Paradox.
2) Отобразить лучше в StringGrid.
Мне сейчас как раз надо заняться изучением OLE automation вплотную, так что могу заодно и это поразбирать.
Записан
Серж
Гость
« Ответ #2 : 10-03-2005 08:54 » 

По поводу работы с MSWord

Var MsWord,doc,tbl:variant;
       CurDir,NumStr:string;
       i:integer;
…………………
try
 // Если Word уже запущен
 MsWord := GetActiveOleObject('Word.Application');
 MsWord.Visible := True;
 // Взять ссылку на запущенный OLE объект
 except
  try
  // Word не запущен, запустить
   MsWord := CreateOleObject('Word.Application');
  // Создать ссылку на зарегистрированный OLE объект
   MsWord.Visible := True;
  except
    ShowMessage('Не могу запустить Microsoft Word');
    Exit;
   end;
end;

// Открыть документ
CurDir:=ExtractFileDir(Application.ExeName);
MSWord.ChangeFileOpenDirectory(CurDir);
try
 Doc:=MSWord.Documents.Open('1.doc');
except
 ShowMessage('Нет файла 1.doc');
 MsWord.Quit;
 Exit;
end;
try
  Tbl:=Doc.Tables.Item(1);
 except
  ShowMessage('Ошибка в файле 1.doc, нет таблицы');
  MsWord.Quit;
  Exit;
 end;


 for i:=1 to 400 do
 begin
  try
   numstr:= Tbl.Cell(1,i).Range.Text;
  except
   ShowMessage('Ошибка чтения таблицы!');
   MsWord.Quit;
   Exit;
 И т.д.
 end;

Все интерфейсы описаны в справке по бейсику, доступному из Helpa MS Word,
меню Сервис-Макрос-Редактор Visual Basic. Легкий способ программирования -
записать макрос, а потом посмотреть его текст на бейсике.
« Последнее редактирование: 20-12-2007 20:42 от Алексей1153++ » Записан
AL CAPONE
Гость
« Ответ #3 : 10-03-2005 13:25 » 

Спасибо всем за помощь. Сделал корректное считываение из WORD в PARADOX. Вот только некоторые глюки наметились :
1) И при использовании WordApp.ActiveDocument.Close($00000000,EmptyParam,EmptyParam) и при WordApp.Quit выдаётся Invalid Variant Operation, а приложение остаётся висеть в списке системных процессов. Може кто знает, как это лечится ?
2) При считывании математических выражений и формул выдаются сплошные "прямоугольнички". Может кто знает, на какой компонент формы их закидывать можно. Вроде народ говорил об OleContainer, но при кидании информации на OleContainer.Caption всё равно ничего не происходит. Помогите кто знает, в чём дело ?
Записан
AL CAPONE
Гость
« Ответ #4 : 19-03-2005 14:54 » 

Помогите сделать корректное отображение математических формул из заданной ячейки в таблице ВОРДА на компонент формы. Вроде народ говорил, что это возможно в OleContainer, но он отображает тока весь документ сразу, а нужна 1 ячейка
Записан
Серж
Гость
« Ответ #5 : 21-03-2005 08:22 » 

Нужно сделать Selection на конкретную ячейку в Ворде, затем с помощью Selection.Copy положить данные в ClipBoard, а затем стандартным образом с помощью GetClipBoardData забрать данные из ClipBoarda.
Записан
AL CAPONE
Гость
« Ответ #6 : 21-03-2005 16:32 » 

Здарова, Серж ! Не пойми меня неправильно, но я в этой тематике полный ЛОХ. Поясни пожалуйста свои процедуры с помощью конкретного синтаксиса, хоть как-нибудь на примере что-ли. И кстати твой метод позволит вывести формулы на форму Делфи или нет, если да, то на каокй компонент. Заранее спасибо за помощь !!!  Улыбаюсь
Записан
Серж
Гость
« Ответ #7 : 22-03-2005 16:29 » 

AL_CAPONE!  Как положить в ClipBoard:
 (см. начало в моем предыдущем ответе)
 Tbl.Cell(i,j).Range.Select;
 MsWord.Selection.Copy;
 После этого у тебя в ClipBoarde картинка, если в ячейке формула или текст, если там текст.
 Далее с помощью GetClipBoardData забираешь текст или картинку и кладешь туда, где это возможно,
 например на Image.
 На дельфи это можно сделать как-то так:
 Image1.Picture.LoadFromClipbordFormat(какие-то параметры, не помню), думаю, разберешься.
 Успехов!
Записан
AL CAPONE
Гость
« Ответ #8 : 25-03-2005 14:14 » 

Здаров, СЕРЖ !!!
Я уже чего только не пробовал, всё равно зараза ничего не работает: при использовании Image1.Picture.LoadFromClipbordFormat процедура требует 3 хитрых параметра, причём совершенно непонятно, какой из них за что отвечает. Пробовал ставить параметры наугад, но выдаётся Unsupported Clipboard Format. Попробуй эту процедуру у себя ещё, и если заработает, напиши мне. Заранее благодарен. Пока !
Записан
Серж
Гость
« Ответ #9 : 28-03-2005 10:38 » 

Al_Capone! Ну попробуй так (у меня работает):

uses Clpbrd;

 var Clipboard:TClipboard;
 begin
  Clipboard:=TClipboard.Create;
  Image1.Picture.Assign(Clipboard);
  Clipboard.Free;
 end;
Записан
Серж
Гость
« Ответ #10 : 28-03-2005 10:44 » 

Al_Capone!
Проверь еще, что в Clipboarde перед этим действительно лежит картинка.
(Clipboard.HasFormat).
Если там ничего нет, то тоже получишь Unsupported Format.
Записан
AL CAPONE
Гость
« Ответ #11 : 29-03-2005 19:37 » 

Всё сделал, теперь всё работает, отображается вся ячейка с формулами и текстом, правда только обрезается её левый край где-то на полсантиметра, поэтому пришлось передвинуть отступ слева правее по ячейке. А так всё круто. ОГРОМНОЕ СПАСИБО ВСЕМ, КТО ПРИНИМАЛ УЧАСТИЕ В ЭТОЙ ПЕРЕПИСКЕ И ПОМОГАЛ МНЕ С ДАННОЙ ПРОБЛЕМОЙ !!!  Отлично Отлично Отлично
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines