Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

OLE+WORD [D7, WinXP]


Страницы:   1 2

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;


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо