![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как экспортировать текст вместе с графикой из MS Word [D6, Win95/98, Win2k, WinXP]
Chudaks © (2005-01-27 08:58:00)Господа Мастера Делфи подскажите как можно экспортировать текст вместе с графикой из MS Word не нарушив при этом структуру текста. Если существует такая компонента подскажите где можно будет ее взять.
Shirson (2005-01-28 09:22:00) [1]
var
H1,H49163:Thandle;
MS1,MS49163:TMemoryStream;
B1,B49163:pByte;
L1,L49163:longint;
msWord:Variant;
begin
MsWord:=CreateOleObject('Word.Application');
MsWord.Documents.Open(FileName:='My_doc.doc');
clipboard.clear;
MsWord.ActiveDocument.Range(d1,d2).copy; //Это копирование куска текста из Ворда в клипборд. Если тебе нужен весь текст сразу, замени Range (хелп по ворду смотри)
adoquery1.close;
adoquery1.sql.text:='insert into MS_DOC_TABLE (Doc,RawText) values(:Doc,:RawText)';
ClipBoard.Open;
MS1:=TMemoryStream.create;
MS49163:=TMemoryStream.create;
H1:=Clipboard.GetAsHandle(1); //содержимое клипборда в формате голого текста (если ненужно - выкинь)
H49163:=Clipboard.GetAsHandle(49163); //содержимое клипборда в формате ворда (MSW2000, хотя, 97 тоже пашет)
B1:=GlobalLock(H1); // Если не знаешь что это, просто скопируй - объяснять долго :)
B49163:=GlobalLock(H49163);
L1:=globalsize(H1); // Размеры буферов для голого текста
L49163:=globalsize(H49163); // и для вордовского формата
MS1.writebuffer(B1^,L1); // запись инфы из буферов в потоки. соотвественно
MS49163.writebuffer(B49163^,L49163);
adoquery1.Parameters.ParamByName('Doc').LoadFromStream(MS49163,ftBlob); //Пишем в поле в вордовском формате. Поле типа image (у меня MSSQL 8.0)
adoquery1.Parameters.ParamByName('RawText').LoadFromStream(MS1,ftString); //Пишем в поле в текстовом формате
Clipboard.close;
adoquery1.ExecSQL;
MS1.Free;
MS49163.Free;
GlobalUnlock(H1);
GlobalUnlock(H49163);
End;
Всё.
Выгребать еще проще:
TBlobField(adoquery1.FieldByName('doc')).SaveToFile('FromDB.doc');
P.S. Если же тебе вообще нужно хранилище для вордовских файлов, всмысле as is - пиши в базу через потоки. Так всё что угодно можно писать, хоть ворд, хоть автокад, хоть своп-файлы.
Создаёшь поток, грузишь в него файл и зашвыриваешь в базу.
Приведенный вариант нужен, если есть надобность засовывать документ не цельным кусоком, а по частям или с предобработкой.
ЮЮ (2005-01-28 06:10:00) [2]Ты об импорте сначала полумай, а то наэкспортируешь, а что потом будешь делать с экспортным товаром? Допустим тебе это удалось. Дальше что собираешься использовать? Если, например, опять же MS Word, то, естестественно, достаточно сохранить Word-овскую часть буфера обмена. Если же, например, TRichEdit, то сначала убедись, что перенеся даже с помощью буфера обмена из MS Word в TRichEdit получишь в последнем именно то, что скопировал в Word-е :)
MakedoneZ (2005-01-27 19:01:00) [3]OLE
Chudaks (2005-01-27 18:13:00) [4]Пишется такая программа:
1) экспортируются вопросы и ответы (графика и текст)из MS WORD
2) каждый вопрос, ответ записывается в отдельно в БД
Arm79 (2005-01-27 11:50:00) [5]делается достаточно просто. текст и картинки, набранные (вставленные) в Ворде сохрани в файл, который потом и вставишь в БД в поле BLOB.
ЮЮ (2005-01-27 11:43:00) [6]в базу данных можно сохранить, а дальше что с этим текстом делать собираешься? Сохраняй весь файл, просматривать/редактировать будешь опять же в MS Word
chudaks (2005-01-27 11:41:00) [7]Задача такая необходимо программно экспортировать текст с графикой в базу данных.
ЮЮ (2005-01-27 09:49:00) [8]>экспортировать ... из MS Word
Копируй нужное в буфер обмена. Экспорт состоялся. Теперь, пожалуй, проблемо в импорте :)
Александр Иванов (2005-01-27 09:40:00) [9]Экспортировать куда?