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=11104191581) Номер вопроса и ответы считываются в цикле, в том же цикле можно сразу обрабатывать считанное и писать в таблицу 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 » |
|
|
|
|
Записан
|
|
|
|
|