![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
OLE+WORD [D7, WinXP]
AL CAPONE © (2005-03-06 20:19:00)Народ, помогите плиз кто чем сможет. Ситуация такова: имеется 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-файла и на какой компонент формы его можно забросить для корректного отображения.
Все заранее огромное спасибо за помощь !
AloneAli (2005-03-28 11:21:00) [1]
> GuAV © (25.03.05 16:47) [19]
> Дельфовские прототипы ф-циям из dll могу выложить или скинуть.
Скинь на мыло, пожалуйста!
YurikGL (2005-03-28 06:58:00) [2]VoaCo (27.03.05 16:46) [22]
см. http://www.delphimaster.ru/articles/dbtoword/index.html
тока делать все наоборот.
AL CAPONE (2005-03-27 18:00:00) [3]Привет, GuAV !!!
Перепробовал всё и знаешь, в чём оказалось дело: просто при создании этого документа ВОРДА он разок подвис и не сохранился как надо и теперь из него не копируются 2 ячейки из 400 с лишним штук. На остальных же ячейках программа прекрасно работает при помощи
WordApp.ActiveDocument.Tables.Item(1).Cell(i,j).Range.Copy;
OleContainer1.Paste;
Вот только 2 вопроса напросились:
1) при отображении в OleContainer у ячейки обрезается 0.5-1 см. её левого края, хотя в ВОРДЕ отрезки нет, а копируется всё полностью. Размер OleContainer-a тоже больше размера самой ячейки. Так что непонятно, почему это происходит. Может есть какие-нибудь идеи ?
2) случаем не ведаешь, как при работе программы очистить OleContainer для помещения в него другой ячейки ?
Спасибо огромное за помощь !
VoaCo (2005-03-27 16:46:00) [4]Здравствуйте!
Помогите пожалуйста.
У меня вопрос как можно экспортировать таблицу ворд в базу (dbf)
потом читать из базы?
GuAV (2005-03-27 00:11:00) [5]
>2) открыть новый документ ВОРДА;
> 3) вставить всю инфу туда и сохранить документ на
>диске;
> 4) испрользовать OleContainer.LoadFromFile для
> отображения всего документа;
> 5) динамически удалить документ с диска.
Зачем так усложнять ? OleContainer.CreateObject('Word.Application'), False); создаст документ в OleContainer. А ещё проще сразу вставить туда что надо.
>WordApp.ActiveDocument.Tables.Item(1).Cell(1,2).Range.Select;
>WordApp.Selection.Copy;
>OleContainer1.Paste;
Странно, а у меня работает.
Кстати, не проще ли сразу Cell(1,2).Range.Copy; ?
Вообще, см. справку по офису. для ХР - VBAWD10.CHM .
AL CAPONE (2005-03-26 17:11:00) [6]Привет, GuAV !!!
Твоя процедура
var WD, DOC: Variant;
begin
WD := CreateOleObject('Word.Application');
try
Doc := WD.Documents.Open('C:\1.DOC');
Doc.Tables.Item(1).Cell(1,1)
.Range.InlineShapes.Item(0).Range.Copy;
OleContainer1.Paste;
finally
WD.Quit;
end;
end;
работает на все 100, вот только проблема в том, что у меня в ячейке хранятся не только формулы и выражения, они ещё и перемешаны с текстом (в ячейке хранится вопрос и 5 вариантов ответа к нему, вся прога - тестирующая система). Вот такую вот ячейку-бутерброд мне и нужно полностью и корректно отобразить хоть на каком-нибудь элементе формы. HELP !!!
Кстати пробовал сам сделать считывание всей ячейки через
WordApp.ActiveDocument.Tables.Item(1).Cell(1,2).Range.Select;
WordApp.Selection.Copy;
OleContainer1.Paste;
но на 2-й строке выдаётся "Ошибка команды" и прога останавливается.
Подумал, что оптимально будет сделать так :
1) выделить всю ячейку со всем содержимым и скопировать её в буфер;
2) открыть новый документ ВОРДА;
3) вставить всю инфу туда и сохранить документ на диске;
4) испрользовать OleContainer.LoadFromFile для отображения всего документа;
5) динамически удалить документ с диска.
Вот только как это всё организовать и довести до ума, понятия не имею. Может подскажешь. Заранее спасибо и пока !!!
GuAV (2005-03-25 16:47:00) [7]dll это часть mathtype. нужно ставить mathtype.
описание функций есть по ссылке внизу [16] (там длинная анкета но на самом деле достаточно указать что-то похожее на мыло :-) )
Дельфовские прототипы ф-циям из dll могу выложить или скинуть.
AloneAli (2005-03-25 09:04:00) [8]
> GuAV © (25.03.05 02:37) [16]
А ты не мог бы скинуть dll на мыло?
AloneAli (2005-03-25 09:00:00) [9]А не лучше ли использовать поля Word'а???
ИМХО, это намного проще, чем связываться с Equation или с MathType.
К тому же (точно незнаю), но мне кажется поля более корректно отображаются, чем формулы.
GuAV (2005-03-25 02:37:00) [10]MathType SDK - описание функций mathtype и формата mathtype и equation editor.
Функции позволяют форматировать, преобразовывать и экспортировать формулы из макросов Word'а и из внешних приложений. функции доступны только для mathype (не для equation).
Например, такой код заменяет @1 на X, а @2 на Zed в формуле в буфере обмена. В этом случае кроме буфера обмена исходная формула и результат могли бы быть также в переменной или в файле.
var MTResult: Integer;
begin
MTResult := MTInitAPI(mtinitLAUNCH_NOW, -1);
MTCheck(MTResult);
try
MTResult := MTEquationOnClipboard;
MTCheck(MTResult);
MTResult := MTXFormReset;
MTCheck(MTResult);
MTResult := MTXFormSetPrefs(mtxfmPREF_EXISTING, nil);
MTCheck(MTResult);
MTResult := MTXFormAddVarSub(mtxfmSUBST_ALL, mtxfmVAR_SUB_PLAIN_TEXT,
'@1', Length('@1'), mtxfmVAR_SUB_PLAIN_TEXT,
'X', Length('X'), mtxfmSTYLE_VARIABLE);
MTCheck(MTResult);
MTResult := MTXFormAddVarSub(mtxfmSUBST_ALL, mtxfmVAR_SUB_PLAIN_TEXT,
'@2', Length('@2'), mtxfmVAR_SUB_PLAIN_TEXT,
'Zed', Length('Zed'), mtxfmSTYLE_VARIABLE);
MTCheck(MTResult);
MTResult := MTXFormEqn(mtxfmCLIPBOARD, mtxfmTEXT, '',
0, mtxfmCLIPBOARD, mtxfmTEXT, '', 0, '', nil);
MTCheck(MTResult);
OleContainer1.Paste;
finally
MTTermAPI;
end;
end;
Описание формата в SDK - и для mathtype и для equation. пока не пытался исползовать.
http://dessci.com/en/reference/sdk/
GuAV (2005-03-25 02:36:00) [11]Этот код вставляет первый графич объект (в т.ч. формулу) в ячейке 1,1 в OleContainer.
Формула копируется в буфер обмена, оттуда вставляется в OleContainer.
var WD, DOC: Variant;
begin
WD := CreateOleObject('Word.Application');
try
Doc := WD.Documents.Open('C:\1.DOC');
Doc.Tables.Item(1).Cell(1,1)
.Range.InlineShapes.Item(0).Range.Copy;
OleContainer1.Paste;
finally
WD.Quit;
end;
end;
AL CAPONE (2005-03-24 17:56:00) [12]1) Что именно у тебя получилось с SDK и для чего нужна ваще эта прога ?
2) через буфер обмена (.InlineShapes.Item(0).Range.Copy) - это процедура какого элемента Дельфы, опиши пожалуйста поподробнее, а то я в этом полный лох.
Заранее спасибо !
GuAV (2005-03-22 00:28:00) [13]2 GanibalLector © (19.03.05 22:04) [10]
Я не говорил что я такое делал - я говорил только что кое что с этим SDK получилось.
Про взять объект из ячейки - через буфер обмена (.InlineShapes.Item(0).Range.Copy).
В MathType SDK есть ф-ция ExportEquations (сохраняет формулы в файлы), так вот она тоже работает через буфер обмена... и mathtype SDK поможет только если есть mathtype.
Кроме буфера обмена способов наверное нет, кроме разве что самому читать из Word документа.
GanibalLector (2005-03-21 19:52:00) [14]Это читал?
http://www.delphimaster.ru/cgi-bin/forum.pl?id=1110228903&n=8
AL CAPONE (2005-03-21 19:35:00) [15]Народ, а если серьёзно, то может мне кто-нибудь помочь с этим или нет ??? Обращение к Microsoft Equation - это что, поясните, кто знает, с чем это блюдо едят ;))
GanibalLector (2005-03-19 22:04:00) [16]2 YurikGL © (19.03.05 18:01) [9]
Это сложно.Только великий гуру GuAV делал такое ;)
YurikGL (2005-03-19 18:01:00) [17]
> Помогите сделать корректное отображение математических формул
> из заданной ячейки в таблице ВОРДА на компонент формы. Вроде
>
> народ говорил, что это возможно в OleContainer, но он отображает
> тока весь документ сразу, а нужна 1 ячейка
Попробуй цепляться не к документу Ворд а к Microsoft Equation...
AL CAPONE (2005-03-19 17:47:00) [18]Помогите сделать корректное отображение математических формулиз заданной ячейки в таблице ВОРДА на компонент формы. Вроде
народ говорил, что это возможно в OleContainer, но он отображает тока весь документ сразу, а нужна 1 ячейка
AL CAPONE (2005-03-14 15:45:00) [19]Спасибо огромное за помощь! Со всем этим разобрался и привёл в рабочий вид. Осталось ещё одно : необходимо считать ячейку ВОРДА с математическими выражениями и формулами и закинуть её на форму. Ты не подскажешь, на какой компонент её можно закинуть для корректного отображения. Вроде народ говорил об OleContainer-е, но он отображает тока весь документ, а мне нужна одна заданная ячейка. Спасибо !
GanibalLector (2005-03-11 02:58:00) [20]Выйти без изменений :
Doc1.Close(0);
WordApp.Quit;