![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Загрузка потока в Excel [D7, WinXP]
Dmitrich © (2005-08-31 19:19:00)Уважаемые, мастера, подскажите можно ли текст файла Excel из переменной типа AnsiString или потока запустить в Excel-е не сохраняя его на компьютер?
Dmitrich (2005-09-19 16:43:00) [1]Да, Внук, я почти во всём разобрался. Я тоже решил использовать OleContainer, внутри приложения! Это даже лучше чем открывать файлы отдельно. Теперь борюсь с Toolbars, т. к. он их кидает куда попало и тяжело скрыть без последствий! Но задача почти решена!!!
Внук (2005-09-19 12:36:00) [2]У меня ситуация похожая - надо из BLOB-полей БД Oracle доставать хранящиеся там документы Excel и открывать их пользователю. Создание промежуточных файлов на диске нежелательно по соображениям защиты информации.
Сделал так. Есть компонент TOleContainer, у него метод LoadFromStream. В качестве аргумента принимается TStream, или, разумеется, его наследник. К базе доступ осуществляется через DOA, в его составе есть класс TLOBLocator. Это наследник TStream, у которого, среди прочего, перекрыт метод Read. Если для InterBase такого класса нету, можно его реализовать самому.
В TOleContainer Excel работает в режиме ограниченной функцицональности, но я добился всего, что было нужно. Можно пользователю предоставить возможность открывать из TOleContainer полнофункциональный Excel в отдельном процессе - смотри свойства AllowActiveDoc, AllowInPlace, AutoActivate.
В итоге считывание документа из базы сводится к строчке вроде
FOleContainer.LoadFromStream(DataStream),
где DataStream - TLobLocator из DOA, "нацеленный" предварительно на нужную запись и нужное поле. И никаких промежуточных файлов.
Внук (2005-09-16 15:56:00) [3]Могу, только прошу подождать до следующей недели - очень занят...
Dmitrich (2005-09-12 20:40:00) [4]Внук, можешь по подробней?
Внук (2005-09-01 08:46:00) [5]Можно через TOleContainer.
Fay (2005-08-31 20:31:00) [6]2 Dmitrich (31.08.05 19:51) [2]
Никак.
Dmitrich (2005-08-31 19:51:00) [7]Есть БД в которой хранятся Excel файлы. И при необходимости их нужно открывать. На данный момент это у меня реализовывается следующим образом:
...
var
BlobF:AnsiString;
...
BlobF:=Form1.IBQuery1.Fields[2].AsString;
// BlobF сохраняется на жестком диске
ShellExecute(application.MainForm.Handle,pchar('open'),pchar('DOC.xls'+fileStr),nil,pchar('DOCS.xls '),sw_shownormal);
Нужно это сделать без сохранения на ЖД
Fay (2005-08-31 19:21:00) [8]2 Dmitrich (31.08.05 19:19)
перефразируй вопрос