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

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

Как экспортировать текст вместе с графикой из 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]

Экспортировать куда?


Наверх

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