|
|
|
Открытие экселя из TMemoryStream
|
|||
|---|---|---|---|
|
#18+
Гаджимурадов РустамНикак, ещё конь не валялся. Будут успехи (или неуспехи) - сообщу. Коллеги, а какие мысли будут насчёт "продолжения" этой задачи - записать модифицированный документ обратно в TStream? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2015, 09:19 |
|
||
|
Открытие экселя из TMemoryStream
|
|||
|---|---|---|---|
|
#18+
О, какой старый топик подняли. IIRC, с записью обратно никаких проблем не было, работало с любым из приведённых способов (хотя зуб не дам, не помню). Что касается работы с 2007/2010 и зоопарком версий - помню, что в тот раз быстро и в лоб у меня с моникерами не вышло, а в МСДН на сей счёт было слишком много и я забросил. Было бы хорошо, если бы кто-то (Василиск, к примеру) глянул на досуге. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2015, 15:32 |
|
||
|
Открытие экселя из TMemoryStream
|
|||
|---|---|---|---|
|
#18+
Гаджимурадов Рустам, Всё же хотелось бы поиметь живой, работающий пример кода "обратной записи", хотя бы для XLS/XLT. Что касается формата OpenOffice, то пример из этого топика не работает. И вообще, какой букварь посоветуете по этой теме, я всё же специалист в основном по БД, а не системным "штучкам" винды. Хотя жизнь вынудила столкнуться - хранить шаблоны офисных документов в базе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2015, 20:29 |
|
||
|
Открытие экселя из TMemoryStream
|
|||
|---|---|---|---|
|
#18+
Гаджимурадов Рустам, up. интересно. Таки можно ли открыть xls[xmb] из TStream в конкретно заданном ole-сервере, когда этих серверов на машине запущено несколько, без использования временного файла? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2016, 21:28 |
|
||
|
Открытие экселя из TMemoryStream
|
|||
|---|---|---|---|
|
#18+
О, опять апнули. :) Что значит "когда этих серверов на машине запущено несколько"? Это редкая ситуация - может, имелось в виду "установлено"? В любом случае, если я и смогу найти время проверить завтра или на след. выходных через неделю - то только 2003+2007, больше у меня на личных компах/ноутах ничего не установлено. Я подробностей уже не помню, но IIRC старые форматы (<=2003) можно открыть без проблем с помощью перебора ROT . Но если у кого-то есть возможность - было бы неплохо проверить и сообщить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2016, 23:11 |
|
||
|
Открытие экселя из TMemoryStream
|
|||
|---|---|---|---|
|
#18+
Да здравствует воскресенье! :) Быстренько проверил на пустом проекте. В общем, в двух словах: 1. Вышеприведённый код работает для xls при любых* установленных/запущенных версих MSO. Любых* - потому что я проверил только на имеющихся 2003+2007, но привязки к версиям нет, поэтому и с более новыми версиями проблем быть не должно. 2. Если запущено одновременно несколько экземпляров разных версий (как я уже сказал, ситуация чрезвычайно редкая), то код отработает по простому принципу "кто первый встал, того и тапки", т.е. принимающей стороной будет первый запущенный. 3. AFAIU, можно коннектититься и к конкретному экземпляру, но это надо разбираться с ROT, с [не]регистрацией в которой у разных версий есть свои нюансы, коды юзер-сообщений и т.д. Если будет время - гляну; если кто-то разберётся сам - сообщите, самому интересно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.08.2016, 15:45 |
|
||
|
Открытие экселя из TMemoryStream
|
|||
|---|---|---|---|
|
#18+
Вот года три назад разработал ActiveX, который обеспечивает работу в automation c "Structured Storage" /поддержаны все interfaces/ Код: pascal 1. 2. PS: Help ни какого ни прилагаю. Можете легко с dll получить idl. Остальная вся документация приведена на ссылках выше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.08.2016, 16:13 |
|
||
|
Открытие экселя из TMemoryStream
|
|||
|---|---|---|---|
|
#18+
Гаджимурадов РустамЕсли запущено одновременно несколько экземпляров разных версий (как я уже сказал, ситуация чрезвычайно редкая)Для многозадачной ОС, отнюдь, нет. Excel, сам по себе, параллелиться не умеет. Поэтому для организации одновременной обработки екселевских табличек, особенно при наличии пользователя (что на современных персоналках тоже не редкость (: ), приходится запускать несколько отдельных excel.application. Да бы не мешать ни друг-другу ни пользователю. Кстати, почему вы так подчеркиваете именно "разных версий", мне не понятно. Гаджимурадов Рустам..., то код отработает по простому принципу "кто первый встал, того и тапки", т.е. принимающей стороной будет первый запущенный. 3. AFAIU, можно коннектититься и к конкретному экземпляру, но это надо разбираться с ROT, с [не]регистрацией в которой у разных версий есть свои нюансы, коды юзер-сообщений и т.д. Если будет время - гляну; если кто-то разберётся сам - сообщите, самому интересно. В этом-то и есть основной вопрос. С помощью LoadFromStream можно открыть Workbook из потока, но это будет первый попавшийся excel.application. С помощью IDispatch для excel.application можно открыть Workbook в конкретном экземпляре Excel, но только из файла на диске (не из потока). Как совместить эти две полезные особенности? Кстати, ROT тут не поможет. Он лишь для регистрации работающих объектов, а не для работы с ними. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2016, 08:26 |
|
||
|
Открытие экселя из TMemoryStream
|
|||
|---|---|---|---|
|
#18+
EgoрДля многозадачной ОС, отнюдь, нет. Excel, сам по себе, параллелиться не умеет. Поэтому для организации одновременной обработки екселевских табличек ... приходится запускать несколько отдельных excel.application.Многозадачность и параллелизм Вы сюда зря приплели. :) Речь шла не только о наличии нескольких разных версий (а не экземпляров), что уже редкость, а одновременный запуск нескольких экземпляров разных версий и требование работы с конкретным[ой] из них. Что касается параллельной обработки - тут ничего не могу сказать, я таким не занимался, постановка несколько странная, но проблем с фоновыми процессами по идее быть не должно. Кстати, почему вы так подчеркиваете именно "разных версий", мне не понятно. Потому что при работе с одной версией вообще никаких проблем нет. Как совместить эти две полезные особенности? Кстати, ROT тут не поможет. Он лишь для регистрации работающих объектов, а не для работы с ними.Запустить "чистый" экземпляр можно и без файла на диске. А про ROT я говорил в контексте выбора нужной версии (не все и не всегда там регистрируются). В общем, Delphi у меня щас под рукой нет, но у метода есть простор для повышения универсальности и стрессоустойчивости - у кого есть время и желание - дерзайте. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2016, 22:05 |
|
||
|
Открытие экселя из TMemoryStream
|
|||
|---|---|---|---|
|
#18+
ГР, Ok. Давайте попробую по другому. Если активный экземпляр Excel находится, например, в состоянии редактирования пользователем ячейки, то при вызове OleCreateFromFile(GUID_NULL, PWideChar('C:\tmp\tmp.xlsx'), IOle... ) будет получена ошибка RPC_E_SERVERCALL_RETRYLATER = $8001010A. Как этого избежать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2016, 10:51 |
|
||
|
Открытие экселя из TMemoryStream
|
|||
|---|---|---|---|
|
#18+
ГР, Эксперименты с ROT ничего особенного не дали. Но в процессе наткнулся на еще один способ встроить ёксель в свою форму - SetParent. Создал TPanel, создал excel.application, установил Tpanel парентом для аппликайшона. Чуть подшаманил с resize и paint. Все выглядит и функционирует как при Ole embedding, но явно не оно. Т.к. ексель не считает себя встроенным. Кто знает, какие грабли могут всплыть при таком использовании excel? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2016, 22:14 |
|
||
|
Открытие экселя из TMemoryStream
|
|||
|---|---|---|---|
|
#18+
Прошу сильно не пинать - как заставить Excel в примере без ОлеКонтейнера [13792343] не появляться на экране? Просто необходимо загрузить шаблон из БД, вывести в него необходимые данные и только потом отобразить на экране. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2016, 22:04 |
|
||
|
Открытие экселя из TMemoryStream
|
|||
|---|---|---|---|
|
#18+
Cheetos> как заставить Excel ... не появляться на экране? XLAPP.Visible := False, конечно. ОлеКонтейнер и пр. тут не при чём. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2016, 11:19 |
|
||
|
Открытие экселя из TMemoryStream
|
|||
|---|---|---|---|
|
#18+
Гаджимурадов РустамXLAPP.Visible := False, конечно. ОлеКонтейнер и пр. тут не при чём. У меня есть ощущение, что вы слабо разбираетесь в работе с Excel через IOleObject. выражение XLAPP.Visible := False никак не повлияет на отображение листа Excel, открытого через IOleObject. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2016, 11:57 |
|
||
|
Открытие экселя из TMemoryStream
|
|||
|---|---|---|---|
|
#18+
Egoр, авторвыражение XLAPP.Visible := False никак не повлияет на отображение листа Excel, открытого через IOleObject. Можно подумать, что Cheetos что-то говорил про отображение листа :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2016, 12:33 |
|
||
|
Открытие экселя из TMemoryStream
|
|||
|---|---|---|---|
|
#18+
Egoр> У меня есть ощущение, что вы слабо Egoр> разбираетесь в работе с Excel через IOleObject. Возможно, это смотря с кем сравнивать. Получить ссылку на ранее запущенный или вновь созданный экземпляр сервера можно - соответственно, с ним можно делать, всё, что требуется. Egoр> выражение XLAPP.Visible := False никак не повлияет Egoр> на отображение листа Excel, открытого через IOleObject. Я плохо понимаю, что Вы пытались сказать по поводу отображения листа (скрывают обычно окно), но работать оно совершенно точно будет - скорее всего, "моргнёт", но опять же и с этим можно попытаться бороться, пожалуй. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2016, 12:48 |
|
||
|
Открытие экселя из TMemoryStream
|
|||
|---|---|---|---|
|
#18+
makhaon, Я не говорил, что Cheetos говорил про листы. Но он ссылался на работу с Excel через IOleObject. А микрософт в названиях объектов Excel, которые можно использовать с IOleObject, почему-то использует слово "лист". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2016, 12:49 |
|
||
|
Открытие экселя из TMemoryStream
|
|||
|---|---|---|---|
|
#18+
Egoр> А микрософт в названиях объектов Excel, которые можно Egoр> использовать с IOleObject, почему-то использует слово "лист". При чём тут микрософт? Я не очень понял, к чему Вы придираетесь - если к тому, что обращение к свойству или методу Visible будет не напрямую - ну так пусть будет не XLAPP.Visible, а XLAPP.Application.Visible. Делов-то... Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2016, 12:54 |
|
||
|
Открытие экселя из TMemoryStream
|
|||
|---|---|---|---|
|
#18+
Гаджимурадов Рустамили вновь созданный экземпляр сервера можно - соответственно, с ним можно делать, всё, что требуется. Нельзя. Отображение объектов ОЛЕ-сервера excel, встроенных в свое приложение, и отображение собственно приложения excel отличаются кардинальным образом. и свойство Visible от ExcelApplication никак не влияет на встроенные объекты. Гаджимурадов РустамЯ плохо понимаю, что Вы пытались сказать по поводу отображения листаТут я с вами согласен. Вы не понимаете различий между приложением excel и Ole-сервером excel. Однако пытаетесь давать советы в этой области. Которые из-за вашего незнания, к сожалению, вместо конкретных примеров не редко заканчиваются словами типа "можно попытаться бороться". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2016, 13:03 |
|
||
|
Открытие экселя из TMemoryStream
|
|||
|---|---|---|---|
|
#18+
Egoр> Отображение объектов ОЛЕ-сервера excel, встроенных в свое приложение, Но в данном случае ничего подобного нет. Поэтому весь Ваш пафосный спич мимо. > Тут я с вами согласен. Вы не понимаете различий > между приложением excel и Ole-сервером excel. Повторюсь, Вы выдумали себе какую-то ситуацию, применили мои слова к ней и мужественно с ними боретесь. Вас не затруднит, во-первых, вернуться к обсуждаемой ситуации (или хотя бы описать своё "видение" для начала), а во-вторых, немного "снизить тон" ? Спасибо. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2016, 13:25 |
|
||
|
Открытие экселя из TMemoryStream
|
|||
|---|---|---|---|
|
#18+
EgoрГР, Эксперименты с ROT ничего особенного не дали. Но в процессе наткнулся на еще один способ встроить ёксель в свою форму - SetParent. Создал TPanel, создал excel.application, установил Tpanel парентом для аппликайшона. Чуть подшаманил с resize и paint. Все выглядит и функционирует как при Ole embedding, но явно не оно. Т.к. ексель не считает себя встроенным. Кто знает, какие грабли могут всплыть при таком использовании excel?Ооо!!! Помню эти свои эксперименты... Почти 10 лет минуло... Там грабли с меню экселя и тормозами и SetFocus между панелькой с экселем и главным окошком ЕМНИП как-то кривовато обошёлся юзаньем двух способов: - для отображения панелька с экселем - для работы с файлом - какой-то компонент а ля TExcel/ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2016, 22:15 |
|
||
|
Открытие экселя из TMemoryStream
|
|||
|---|---|---|---|
|
#18+
Gator Пардон! Конечно не TExcel! а какойто прямой доступ а ля TXLS ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2016, 22:23 |
|
||
|
Открытие экселя из TMemoryStream
|
|||
|---|---|---|---|
|
#18+
Имхо, эта - самая трэшовая тема в дельфийской ветке. ГР создал интригу, смущающую целые поколения нубов! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2016, 23:47 |
|
||
|
Открытие экселя из TMemoryStream
|
|||
|---|---|---|---|
|
#18+
Не наговаривай, никакой интриги я не создавал. Более того, что просили - дал, с кодом, кто-то даже пользуется, время от времени поднимают. Для каких-то экзотических способов, типа того, что просит Егор, решения нет (или пока нет). Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2016, 03:27 |
|
||
|
Открытие экселя из TMemoryStream
|
|||
|---|---|---|---|
|
#18+
Гаджимурадов Рустам, добрый день. Можно поподробнее на счет " или можно делать CreateOleObject, но раньше"? Создаю экземпляр объекта OLE Automation через CreateOleObject('Excel.Application'). Получаю ссылку на интерфейс IDispatch. Готовлю хранилище по вашему примеру. Я так понимаю после этого надо загрузить хранилище FStorage в созданный объект Excel.Application? Но не понимаю как. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2019, 16:52 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=39350654&tid=2038723]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
175ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
37ms |
get tp. blocked users: |
1ms |
| others: | 240ms |
| total: | 490ms |

| 0 / 0 |
