|
|
|
Открытие экселя из TMemoryStream
|
|||
|---|---|---|---|
|
#18+
В общем задача открыть эксельку из потока. Экселька предварительно грузится в проток из базы. Этот код по понятным причинам не работает. Поток можно было бы сохранить во временный файл и от туда его открыть, но хочется сделать так что бы сразу из потока можно было открыть эксельку или создать какой то виртуальный файл. Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2013, 21:50 |
|
||
|
Открытие экселя из TMemoryStream
|
|||
|---|---|---|---|
|
#18+
Я через OLE-контейнер открывал. Там были какие-то нюансы, с ходу по памяти не расскажу, но решаемые. Думаю, с "отдельным" Application-ом тоже вполне возможно, различий не очень много должно быть. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2013, 22:16 |
|
||
|
Открытие экселя из TMemoryStream
|
|||
|---|---|---|---|
|
#18+
Метод Open не будет работать с потоком. как вариант сохраняйте во временный файл и открывайте его, после всего удаляйте. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2013, 22:16 |
|
||
|
Открытие экселя из TMemoryStream
|
|||
|---|---|---|---|
|
#18+
ravtМетод Open не будет работать с потоком. как вариант сохраняйте во временный файл и открывайте его, после всего удаляйте. Поэтому и хочу открывать из потока, что бы не создвать файлы и не удалять их потом. это хорошо что возможно, тогда буду дальше изучать. Хотелось только понять в какую сторону копать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2013, 22:24 |
|
||
|
Открытие экселя из TMemoryStream
|
|||
|---|---|---|---|
|
#18+
ravt> Метод Open не будет работать с потоком. Я вроде на понятно русском сказал, что это у меня точно работало, точно с потоком, точно без файла. Правда, не TExcelApplication, а OleContainer, но не думаю, что это имеет какое-то значение. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2013, 23:49 |
|
||
|
Открытие экселя из TMemoryStream
|
|||
|---|---|---|---|
|
#18+
Jonnik> Хотелось только понять в какую сторону копать. Сравните содержимое потока и обычного файла. В случае OLE были, IIRC, какие-то нюансы, типа "лишнего" заголовка, который нужно было откидывать. В целом, ничего сложного. Посмотрите в книге "Тенцер, Елманова - Технология COM" - возможно, там есть что-то на эту тему. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2013, 23:51 |
|
||
|
Открытие экселя из TMemoryStream
|
|||
|---|---|---|---|
|
#18+
Гаджимурадов РустамJonnik> Хотелось только понять в какую сторону копать. Сравните содержимое потока и обычного файла. В случае OLE были, IIRC, какие-то нюансы, типа "лишнего" заголовка, который нужно было откидывать. В целом, ничего сложного. Посмотрите в книге "Тенцер, Елманова - Технология COM" - возможно, там есть что-то на эту тему. Нашел такую функцию Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Я на верном пути? Только не знаю что с ней толком делать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2013, 01:04 |
|
||
|
Открытие экселя из TMemoryStream
|
|||
|---|---|---|---|
|
#18+
Jonnik> Нашел такую функцию А что она по-Вашему делает? Зачем её искать? Такую простую Вы и сами должны были написать. > Я на верном пути? Ну как. Нулевой шаг сделали, пожалуй. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2013, 03:13 |
|
||
|
Открытие экселя из TMemoryStream
|
|||
|---|---|---|---|
|
#18+
JonnikГаджимурадов РустамJonnik> Хотелось только понять в какую сторону копать. Сравните содержимое потока и обычного файла. В случае OLE были, IIRC, какие-то нюансы, типа "лишнего" заголовка, который нужно было откидывать. В целом, ничего сложного. Посмотрите в книге "Тенцер, Елманова - Технология COM" - возможно, там есть что-то на эту тему. Нашел такую функцию Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Проблема в том что этот вараинт почти работает, но он выдает ошибку "EOleSysError with message %1 already exists" на этой строке aOleContainer.LoadFromStream(DocStream); Поиск в инете ничег оне дал. Многие пишут про эту ошибку, но нигде не нашел решения ее устранения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2013, 23:28 |
|
||
|
Открытие экселя из TMemoryStream
|
|||
|---|---|---|---|
|
#18+
насколько я понимаю, Excel не работает ни с чем, кроме файлов даже из памяти загрузить не может так что имхо без файлов не обойтись ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2013, 00:18 |
|
||
|
Открытие экселя из TMemoryStream
|
|||
|---|---|---|---|
|
#18+
JonnikМногие пишут про эту ошибку, но нигде не нашел решения ее устранения.Значит, плохо искали. Читайте про IStorage, TStreamHeader etc. Всех подробностей без подсматривания в справку я не упомню, но вроде бы без IStorage можно обойтись одним оперированием с TStreamHeader (это и есть тот самый заголовок). Ищите, читайте, пробуйте. Если не получится - дам Вам кусок готового кода из проекта, хотя не уверем, что Вам это поможет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2013, 00:56 |
|
||
|
Открытие экселя из TMemoryStream
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUнасколько я понимаю, Excel не работает ни с чем, кроме файлов даже из памяти загрузить не может так что имхо без файлов не обойтисьExcel умеет, всё что нужно, лишь бы руки откуда нужно росли. В данном случае не надо полагаться на "слышал звон" - тем более, если сам по себе OLE-контейнер может хранить и обрабатывать документ без файла - где-то же он его хранит - значит, в памяти. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2013, 00:58 |
|
||
|
Открытие экселя из TMemoryStream
|
|||
|---|---|---|---|
|
#18+
Гаджимурадов РустамВ данном случае не надо полагаться на "слышал звон" Как называется метод в Excel-е, который позволяет открыть Excel-данные, и не принимает в качестве аргумента FileName ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2013, 09:24 |
|
||
|
Открытие экселя из TMemoryStream
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOU> Как называется метод в Excel-е В каком ещё Excel-e ? Кто такой Excel для Delphi? В Delphi нет такого понятия. Клиника. P.S. LoadFromStream, OpenStream Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2013, 14:03 |
|
||
|
Открытие экселя из TMemoryStream
|
|||
|---|---|---|---|
|
#18+
Jonnik, забей Гаджимурадов Рустам, IExcelApplication/IExcelWorksheets ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2013, 14:45 |
|
||
|
Открытие экселя из TMemoryStream
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOU Jonnik, забейРасписка в собственной профнепригодности. Вот, простейший набросок, только что проверил на пустом проекте - работает почти с любым типом файлов, включая XLS: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. И это, повторюсь, "ломовой" вариант, а не кошерный через CreateObjectFromInfo с CreateInfo.CreateType = ctFromData (дабы не возиться с IStorage и иже с ним). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2013, 19:25 |
|
||
|
Открытие экселя из TMemoryStream
|
|||
|---|---|---|---|
|
#18+
Гаджимурадов Рустам поистине работает что странно ибо ни ExcelApplication, ни ExcelWorksheets не имеются ни чего общего со Stream или IStorage очень странно интересно, как это работает и можно ли применить сию фичу на OleAutomation ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2013, 00:19 |
|
||
|
Открытие экселя из TMemoryStream
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOU> поистине работает. что странно Море удивления, ппц. Когда я говорю, что это возможно - следует голое отрицание, без кода, без собственных попыток, без чтения доки или хотя бы интерфейсов, без ничего вообще. Когда я говорю, что у меня это работало и работает в разных ПО разными способами (в т.ч. без ОЛЕ) - следует ответ "забей, невозможно" и т.д. Когда я даю семпл - следует ответ "о чудо! это работает". Подумайте, всё ли нормально в этой цепочке действий и поведения. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2013, 00:35 |
|
||
|
Открытие экселя из TMemoryStream
|
|||
|---|---|---|---|
|
#18+
Гаджимурадов Рустам Я больше трёх лет работаю с Excel. Взаимодействие с ним происходит по опубликованным интерфейсам. И там нет ни Stream, ни IStorage, к которому сводится OleContainer.LoadFromStream Поэтому я и говорю, что данная работа странна. По каким то внутренним механизмам. Теперь переделай данный код под OleAutomation ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2013, 09:21 |
|
||
|
Открытие экселя из TMemoryStream
|
|||
|---|---|---|---|
|
#18+
Гаджимурадов Рустаму меня это работало и работает в разных ПО разными способами (в т.ч. без ОЛЕ) ...Было бы не плохо, если бы Вы продемонстрировали пример без ОлеКонтейнера ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2013, 10:10 |
|
||
|
Открытие экселя из TMemoryStream
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOU> Я больше трёх лет работаю с Excel. Ну давайте начнём щас меряться пиписьками. Я тоже гораздо больше трёх лет работаю с Excel. Хотя не только с ним, конечно. И? > Взаимодействие с ним происходит по опубликованным интерфейсам. > И там нет ни Stream, ни IStorage, к которому сводится OleContainer.LoadFromStream Наверное, нет. И это логично и правильно, ибо это методы не Excel. Внезапно? > Теперь переделай данный код под OleAutomation Оно мне надо? Я привёл простой пример, показал что это работает и что ты неправ. Дальше уж как-нибудь сам. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2013, 12:52 |
|
||
|
Открытие экселя из TMemoryStream
|
|||
|---|---|---|---|
|
#18+
Човайохоя> Было бы не плохо, если бы Вы продемонстрировали пример без ОлеКонтейнера ОК, вечером постараюсь, как будет свободное время. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2013, 12:52 |
|
||
|
Открытие экселя из TMemoryStream
|
|||
|---|---|---|---|
|
#18+
Гаджимурадов Рустам , у меня наоборот возникает ощущение, что ты тут активно хочешь доказать, что у тебя писька длиннее что странно на фоне непонимания сути COM и OLE в целом - я как и все здесь присутствующие буду рад увидеть код, работающий по OleAutomation ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2013, 14:27 |
|
||
|
Открытие экселя из TMemoryStream
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOU... ты тут активно хочешь доказать, что у тебя писька длиннее...молчи, глупый человек, а то нихрена не увидим :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2013, 14:32 |
|
||
|
Открытие экселя из TMemoryStream
|
|||
|---|---|---|---|
|
#18+
боже, куда ты забрал от нас Гаджимурадова Рустама ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2013, 14:26 |
|
||
|
Открытие экселя из TMemoryStream
|
|||
|---|---|---|---|
|
#18+
Вот, собственно, и пример без ОлеКонтейнера, принцип тот же: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. OleCheck-и, управление хендлами и пр. по вкусу, не в них суть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2013, 15:56 |
|
||
|
Открытие экселя из TMemoryStream
|
|||
|---|---|---|---|
|
#18+
Гаджимурадов Рустам, т.е. если есть библиотека, создающая файл в TStream, его можно не на диск сохранять, а напрямую вбросить в Excel ? И любая разумная версия, скажем от 2000 и выше это умеет ? Здорово. Интересно сделали ли подобную штуку с OpenOffice.org ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2013, 16:00 |
|
||
|
Открытие экселя из TMemoryStream
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUу меня наоборот возникает ощущение, что ты тут активно хочешь доказать, что у тебя писька длиннееЗачем доказывать? Я это итак знаю. А объяснить (а не доказать) я пытаюсь то, что ты некомпетентен и вредишь (при чём очень настойчиво, невзирая ни на что) своими ответами ТСу. Впрочем, я сам виноват, ибо не сразу признал тебя, болезного, не вспомнил, а в профиль не сразу заглянул, иначе не стал бы связываться и пачкаться. SOFT FOR YOUчто странно на фоне непонимания сути COM и OLEМда... Чего только не услышишь... А в чём в данном случае отличие? И в чём вообще может быть отличие, если одно "надстройка" над другим, а OleContainer не делает чего-то "левого" и сверхординарного? Впрочем, я уверен, что у юного падавана обязательно найдутся возражения, как минимум, что "использованы COM-вызовы, а не чистый OLE Automation!" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2013, 16:05 |
|
||
|
Открытие экселя из TMemoryStream
|
|||
|---|---|---|---|
|
#18+
Ariochт.е. если есть библиотека, создающая файл в TStream, его можно не на диск сохранять, а напрямую вбросить в Excel ? И любая разумная версия, скажем от 2000 и выше это умеет ?И не только в Excel, а в Word и почти в любое приложение. "Почти", потому что последний вариант я не проверял, скажем, с каким-нибудь PDF или тем более DJVU может и не сработать. Насчёт версий - это по идее должно работать на всех версиях с 96 по 2003, насчёт 2007 и выше я не уверен, интерфейс-то поддерживается, а вот воспримет ли офис старый формат файлов - ХЗ, не уверен (у кого установлен MSO2007-20010 - проверьте, плиз, заодно и узнаем). AriochИнтересно сделали ли подобную штуку с OpenOffice.orgЯ в нем не силён, это надо у Юрия спрашивать. Но думаю, можно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2013, 16:10 |
|
||
|
Открытие экселя из TMemoryStream
|
|||
|---|---|---|---|
|
#18+
Гаджимурадов Рустам, Код: pascal 1. Яправильно понимаю, что второй параметр тут означает что-то типа "объект по умолчанию" ? Просто XML может грузиться совсем разнымипрограммами, даже Excel XML... Туда можно подставить интерфейс CLASS_ExcelOLEObject или CLASS_ExcelApplication чтобы точно грузилось в Excel ? У IOLEObject вроде нет метода грузиться с IStorage, так что предварительно создавать ExcelApplication и брать от него OLEObject видимо нет смысла ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2013, 16:25 |
|
||
|
Открытие экселя из TMemoryStream
|
|||
|---|---|---|---|
|
#18+
Гаджимурадов Рустам Код: pascal 1. 2. 3. Stream.Write ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2013, 16:33 |
|
||
|
Открытие экселя из TMemoryStream
|
|||
|---|---|---|---|
|
#18+
Гаджимурадов РустамВот, собственно, и пример без ОлеКонтейнера, принцип тот же: Да я ж ещё раз говорю, рад если у тебя длиннее. Тока зачем тебе со мной мериться ? По поводу листинга. Мож я слепой, но я вообще не увидел ни какой связи с OleAutomation и экземпляром ExcelApplication. Что собственно ТС (и другим нормальным людям) нужно. вот так должна выглядеть адекватная функция загрузки: Код: pascal 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2013, 16:36 |
|
||
|
Открытие экселя из TMemoryStream
|
|||
|---|---|---|---|
|
#18+
IStorage судя по всему грузит толькo старый XLS/BIFF файлы... Потому и Excel, что другие форматы не будет брать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2013, 16:39 |
|
||
|
Открытие экселя из TMemoryStream
|
|||
|---|---|---|---|
|
#18+
AriochStream.Write ? не, там правильно Read стоит AriochIStorage судя по всему грузит толькo старый XLS/BIFF файлы... Потому и Excel, что другие форматы не будет брать почему ты так подумал ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2013, 16:44 |
|
||
|
Открытие экселя из TMemoryStream
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOU, Птому что IStorage - это интерфес к OLE Compound Document, частный случай которого старые офисные форматы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2013, 16:55 |
|
||
|
Открытие экселя из TMemoryStream
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOU, а, ну да... уже не с той стороны смотрю, кто кого читает ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2013, 16:56 |
|
||
|
Открытие экселя из TMemoryStream
|
|||
|---|---|---|---|
|
#18+
Arioch> Яправильно понимаю, что второй параметр тут означает что-то типа "объект по умолчанию" ? Нет. > Просто XML может грузиться совсем разнымипрограммами, даже Excel XML... XML-то тут при чём вообще? Когда грузиться будет xlsx - это не будет xml, архив и пр., само приложение об этом не знает. > У IOLEObject вроде нет метода грузиться с IStorage Метода нет, зато есть процедура. К чему все эти вопросы? > так что предварительно создавать ExcelApplication и брать от него OLEObject видимо нет смысла ? Конечно, нет, потому что нужно ровно обратное. Ты вообще понимаешь постановку задачи? Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2013, 18:24 |
|
||
|
Открытие экселя из TMemoryStream
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOU> Тока зачем тебе со мной мериться ? Низачем. Это ты так решил. А я написал, что нет ни желания, ни времени это делать, но тебе ведь невдомёк, как обычно. По сути, ничего кроме переходов на личности и тупняка, перемежающегося флудом, предложить не можешь. > я вообще не увидел ни какой связи с OleAutomation и экземпляром ExcelApplication. Желающий увидеть да увидит. Для тех, кто на бронепоезде - я в комментариях написал аж три варианта перехода к OLEAutomation, на любой вкус. А перламутровые пуговицы - это не ко мне, бисер метать не привык. > Что собственно ТС (и другим нормальным людям) нужно. Ты за себя говори, а не за ТС и тем более за нормальных людей. Задача решена? Решена. OLE-переменная получена? Получена. > вот так должна выглядеть адекватная функция загрузки: Какие проблемы переделать приведённую процедуру в желаемую ("должна" - поржал) функцию? Добавится ровно одна строчка кода. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2013, 18:29 |
|
||
|
Открытие экселя из TMemoryStream
|
|||
|---|---|---|---|
|
#18+
Гаджимурадов Рустам , пока напоминает выкрики выскочки, который где-то в тырнетах нарыл, что у OleContainer есть метод загрузки из Stream и показано, какой к нему хедер заполнить а тем временем процедуры загрузки книги (файла) для какого то конкретного ExcelApplication как не было так и нет ну и к чему этот выпендрёж ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2013, 18:41 |
|
||
|
Открытие экселя из TMemoryStream
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOU> пока напоминает Что это напоминает я уже сказал - "гуру с трёхлетним опытом Excel" не только некомпетентен и неспособен это понять и принять, но ещё и хамит и троллит. На этом всё, по сабжу будет что-то? > а тем временем процедуры загрузки книги (файла) для какого > то конкретного ExcelApplication как не было так и нет Не может не быть того, что приведено. Повторяю - имеющий глаза да увидит, не запихивать же разжёванное в рот сопротивляющимся. Таки проблема с одной строчкой кода, переводящей приведённую процедуру в желаемую функцию? Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2013, 18:47 |
|
||
|
Открытие экселя из TMemoryStream
|
|||
|---|---|---|---|
|
#18+
Гаджимурадов Рустам мог бы сразу написать, что не знаешь как. так было бы честнее к участникам форума ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2013, 18:54 |
|
||
|
Открытие экселя из TMemoryStream
|
|||
|---|---|---|---|
|
#18+
Гы... Это уже даже не смешно, а за гранью. Ну продолжим, посмотрим как дальше будешь вертеться: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. и? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2013, 19:06 |
|
||
|
Открытие экселя из TMemoryStream
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUа тем временем процедуры загрузки книги (файла) для какого то конкретного ExcelApplication как не было так и нет ну и к чему этот выпендрёж ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2013, 19:15 |
|
||
|
Открытие экселя из TMemoryStream
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOU> для какого то конкретного ExcelApplication как не было так и нет А чем последний приведённый вариант не конкретный? Только не надо щас про то, что в имеющийся WorkBook должны добавиться листы из БЛОБ-документа. Так что, действительно, "к чему этот выпендрёж" ? (с) Марш на повышение квалификации. На курсы всякие. Или книжки читать, в крайнем случае. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2013, 19:20 |
|
||
|
Открытие экселя из TMemoryStream
|
|||
|---|---|---|---|
|
#18+
Ааа, я понял, мосье "гуру" настолько "компетентен", что не догадался заменить локальную переменную XLApp из старого кода на входной параметр ExcelApp... Очень показательно, очень. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2013, 19:22 |
|
||
|
Открытие экселя из TMemoryStream
|
|||
|---|---|---|---|
|
#18+
Гаджимурадов Рустам> Просто XML может грузиться совсем разнымипрограммами, даже Excel XML... XML-то тут при чём вообще? Когда грузиться будет xlsx - это не будет xml, архив и пр., само приложение об этом не знает. Не просто XML, а Excel XML. Формат такой. Но поскольку IStorage сделан под классические XLS/DOC и прочие OLE Compound, то и Excel XML и XLSX отпадают. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2013, 19:52 |
|
||
|
Открытие экселя из TMemoryStream
|
|||
|---|---|---|---|
|
#18+
Собственно вопрос был "откуда Винда узнает, что грузить нужно именно Excell, а не например Фотошоп. И ответ - в IStorage будет формат XLS, как подвид OLE Compound. Жаль,что другие форматы так не загрузишь, и видимо никак по другому тоже... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2013, 19:53 |
|
||
|
Открытие экселя из TMemoryStream
|
|||
|---|---|---|---|
|
#18+
Гаджимурадов Рустам твой пример во-первых, не взаимодействует с Excel. Во-вторых, не взаимодействует с конкретным ExcelApplication. В итоге у тебя нет примера без OleContainer-а. А пальцы гнёшь так, как будто сам написал Excel и технологию OleAutomation ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2013, 20:45 |
|
||
|
Открытие экселя из TMemoryStream
|
|||
|---|---|---|---|
|
#18+
я всё понимаю, но удосужится ли великий Гаджимурадов Рустам продемонстрировать не поделку на коленке, а нормальную рабочую функцию ? мои предположения: 1) похоже не получится. скорее всего оле-контейнер открывается по BOM в стриме, и как справедливо заметил Arioch , файлы типа xlsx не откроются, ибо там BOM zip-файла. 2) иначе говоря не Stream цепляется к оле-контейнеру (как необходимо), а наоборот оле-контейнер идентифицируется по стриму 3) скорее всего загрузка из памяти представляет временное сохранение в файл. как по сути уже советовали в 13769439 в итоге Гаджимурадов РустамЗачем доказывать? Я это итак знаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2013, 23:01 |
|
||
|
Открытие экселя из TMemoryStream
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOU> не поделку на коленке, а нормальную рабочую функцию ? Поделки в ближайшем зеркале. А нормальные рабочие функции уже приведены в нескольких вариантах. Додумывание сабжа и условий по ходу предлагаю оставить себе. > 3) скорее всего загрузка из памяти представляет временное сохранение в файл Бред. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2013, 23:15 |
|
||
|
Открытие экселя из TMemoryStream
|
|||
|---|---|---|---|
|
#18+
1) ты не привёл нормальной функции 2) ты тупо скопировал код из TOleContainer.LoadFromStream 3) много выпендриваешься 4) не провёл исследований, доказывающих, что в конечном счёте не происходит загрузки из файла 5) а я это исследование могу провести. но для этого нужен рабочий код, а не твоё собрание букв и знаков препинания, которые ты называешь якобы рабочим кодом. грош цена твоему коду ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2013, 00:10 |
|
||
|
Открытие экселя из TMemoryStream
|
|||
|---|---|---|---|
|
#18+
Нормальность у каждого своя. Мне достаточно того, что задачу автора она решает. Твои критерии меня волнуют мало. Исследования проводить у меня нет ни времени, ни желания, тем более неизвестно для кого. Тебе надо - ты и проводи. Тем более, что исследований чтобы "доказаться отсутствие" - это нонсенс. При работе по сети MSO тоже, к примеру, временный файл (в том или ином виде) создаёт - не считать же теперь, что это вина пользователя. Это внутреннее дело сервера. Ну и насчёт цены кода - не тебе её оценивать. Тем более, что ты вообще никакого кода не привёл. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2013, 00:25 |
|
||
|
Открытие экселя из TMemoryStream
|
|||
|---|---|---|---|
|
#18+
Рустам, забей ты уже на это, само заглохнет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2013, 07:27 |
|
||
|
Открытие экселя из TMemoryStream
|
|||
|---|---|---|---|
|
#18+
Вряд ли оно заглохнет, тем более при таком явно халявном отношении. А возиться с моникерами и пр. у меня щас времени нет, там не на 10 минут работы, тем более при зопарке версий. Как будет момент - постараюсь вариант для всех версий сделать, а для 2003 включительно подходит любой из вышеприведённых. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2013, 09:17 |
|
||
|
Открытие экселя из TMemoryStream
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOU, не называй заголовок BOM'омо. BOM - это специфично Юникодовская хня с очень узкой целью. ЗАголовок, magic bytes, whatever - но только ен byte order mark :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2013, 09:36 |
|
||
|
Открытие экселя из TMemoryStream
|
|||
|---|---|---|---|
|
#18+
Гаджимурадов Рустам, может там быть открытие любого файла, поддерживаемого Экселем ? или только IStorage который OLE Compound Document т.е. DOC/XLS/MSC и некоторый другие аналогичные форматы ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2013, 09:39 |
|
||
|
Открытие экселя из TMemoryStream
|
|||
|---|---|---|---|
|
#18+
Гаджимурадов Рустам по моему тебе сильно не хватает самокритичности я согласен, признать "да, мой метод плохо работает" - может только сильный человек. например нормальный мужик. но ты видимо не из таких ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2013, 09:40 |
|
||
|
Открытие экселя из TMemoryStream
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOU, ей-богу, утомил. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2013, 09:44 |
|
||
|
Открытие экселя из TMemoryStream
|
|||
|---|---|---|---|
|
#18+
Ariochне называй заголовок BOM'омо. принято в последнее время работаю с юникод-файлами, понятие BOM привязалось :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2013, 09:44 |
|
||
|
Открытие экселя из TMemoryStream
|
|||
|---|---|---|---|
|
#18+
wadman ну так и не читай кто заставляет тебя лезть в ветку, в которой ты к тому же не разбираешься ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2013, 09:45 |
|
||
|
Открытие экселя из TMemoryStream
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUкто заставляет тебя лезть в ветку, в которой ты к тому же не разбираешься Толсто троллишь, слабак. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2013, 10:03 |
|
||
|
Открытие экселя из TMemoryStream
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUкто заставляет тебя лезть в ветку, в которой ты к тому же не разбираешься У меня уже попкорн скоро закончится... а как выглядит СЕКРЕТНЫЙ КОД Вашего производства? пока только видно, что троллизм прокачан до 80го уровня... развейте сомнения, Ваш вариант РАБОЧЕГО кода? п.с. компилируемый. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2013, 10:04 |
|
||
|
Открытие экселя из TMemoryStream
|
|||
|---|---|---|---|
|
#18+
wadmanТолсто троллишь, слабак. каждый судит по себе я тебя не троллил Judeразвейте сомнения, Ваш вариант РАБОЧЕГО кода? сохраняешь во временный файл, загружаешь в Excel, обрабатываешь, закрываешь Excel, удаляешь файл ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2013, 10:13 |
|
||
|
Открытие экселя из TMemoryStream
|
|||
|---|---|---|---|
|
#18+
Гаджимурадов РустамКак будет момент - постараюсь вариант для всех версий сделать, а для 2003 включительно подходит любой из вышеприведённых. Будем ждать с нетерпением. А по предыдущему коду вопрос. Нет ли вероятности, что так совпадет, что одновременно будет запускаться еще один экземпляр Экселя (из другой проги или пользователем) и перехватит этот файл раньше ? (теоретически) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2013, 10:38 |
|
||
|
Открытие экселя из TMemoryStream
|
|||
|---|---|---|---|
|
#18+
Дык вроде в предыдущем коде нет файла как такового - даные берутся из TMemoryStream ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2013, 10:58 |
|
||
|
Открытие экселя из TMemoryStream
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUсохраняешь во временный файл ... удаляешь файлили просто CreateFile(..., FILE_ATTRIBUTE_TEMPORARY + FILE_FLAG_DELETE_ON_CLOSE, 0) по идее, такой файл МОЖЕТ вообще не писаться на диск (пребывая в системном кэше), но, говорят, по факту таки пишется ну хотя бы удалять не надо gunsmoker не даст соврать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2013, 11:04 |
|
||
|
Открытие экселя из TMemoryStream
|
|||
|---|---|---|---|
|
#18+
xen2, ЕМНИП такой файл не может открыть ни одна программа кроме твоей. Т.е. для передачи файла в другую програму - не поможет. Всё-таки Windows не Unix и временные файлы элегантно в ней не делаются ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2013, 11:05 |
|
||
|
Открытие экселя из TMemoryStream
|
|||
|---|---|---|---|
|
#18+
Arioch, верно, к сожалению ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2013, 11:31 |
|
||
|
Открытие экселя из TMemoryStream
|
|||
|---|---|---|---|
|
#18+
AriochДык вроде в предыдущем коде нет файла как такового - даные берутся из TMemoryStreamда, но ведь в стриме а точнее в blob-поле файл :\) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2013, 11:57 |
|
||
|
Открытие экселя из TMemoryStream
|
|||
|---|---|---|---|
|
#18+
Човайохоя, там содержимое файла ,без имени и т.д. а что же там должно было быть по вашему ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2013, 12:10 |
|
||
|
Открытие экселя из TMemoryStream
|
|||
|---|---|---|---|
|
#18+
ну да, в файле главное что? правильно, имя! без имени ты просто стрим ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2013, 12:26 |
|
||
|
Открытие экселя из TMemoryStream
|
|||
|---|---|---|---|
|
#18+
ЧовайохояБудем ждать с нетерпением.Там есть какие-то нюансы (глубже не разбирался и причины пока не установил) с наличием одновременно нескольких версий MSO. Правда, проявилось только с Excel (c Word-ом почему-то сработало - удивительно). ЧовайохояА по предыдущему коду вопрос. Нет ли вероятности, что так совпадет, что одновременно будет запускаться еще один экземпляр Экселя (из другой проги или пользователем) и перехватит этот файл раньше ? (теоретически)Не, там же файл не передаётся. Даже если будет запущено одновременно несколько разных версий - всё должно работать (не проверял). Правда, по умолчанию может подхватиться не та версия сервера, которую хотелось бы, но и это можно обойти перебором ROT и выбором нужного сервера. Впрочем, это всё детали реализации, да ещё мало встречаемые на практике, поэтому ими, думаю, вполне можно пренебречь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2013, 18:42 |
|
||
|
Открытие экселя из TMemoryStream
|
|||
|---|---|---|---|
|
#18+
Гаджимурадов РустамНе, там же файл не передаётся. Даже если будет запущено одновременно несколько разных версий - всё должно работать (не проверял). Правда, по умолчанию может подхватиться не та версия сервера, которую хотелось бы, но и это можно обойти перебором ROT и выбором нужного сервера. Впрочем, это всё детали реализации, да ещё мало встречаемые на практике, поэтому ими, думаю, вполне можно пренебречь. Судя по коду, который ты привёл - загружается новый сервер относительно содержимого IStorage в xls чёткий хедер, по которому можно определить Excel-файл. В xlsx же хедер zip поэтому ключевой вопрос здесь - как загрузить данные в конкретный сервер (const ExcelApp: Variant) кстати я посмотрел, действительно данные загруженные таким образом - не привязываются ни к каким временным файлам ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2013, 10:34 |
|
||
|
Открытие экселя из TMemoryStream
|
|||
|---|---|---|---|
|
#18+
Гаджимурадов Рустам , как успехи ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2013, 19:44 |
|
||
|
Открытие экселя из TMemoryStream
|
|||
|---|---|---|---|
|
#18+
Никак, ещё конь не валялся. Будут успехи (или неуспехи) - сообщу. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2013, 19:58 |
|
||
|
Открытие экселя из 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 |
|
||
|
Открытие экселя из TMemoryStream
|
|||
|---|---|---|---|
|
#18+
Доброе утро. Вы простите, случаем не клон? А-то у нас один товарищ есть, почти Ваш тёзка. > Можно поподробнее на счет " или можно делать CreateOleObject, но раньше"? Если я правильно понял о чём Вы - то вызвать CreateOleObject, что создаст экземпляр сервера, в который и "зальётся" документ из потока. Вы лучше опишите Вашу задачу и приведите код. P.S. Бессмертная тема, ей-Богу, даже в личку по поводу неё писали. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2019, 09:17 |
|
||
|
Открытие экселя из TMemoryStream
|
|||
|---|---|---|---|
|
#18+
Гаджимурадов Рустам, да я вроде человек. Про тезку не в курсе. То есть OleLoad "заливает" объект содержащийся в FStorage в первый попавшийся ему экземпляр сервера? Задача: Имеется шаблон XLS который хранится в базе данных. Необходимо для конкретного документа заполнить шаблон значениями и сохранить на диск. Ранее это было реализовано через сохранение шаблона на диск во временный каталог пользователя с последующим FExcelApp:= CreateOleObject('Excel.Application'); FExcelApp.Workbooks.Add(FileNameXLS); Наткнулся на эту тему и захотел переделать. Код ниже не дает желаемого эффекта. после FExcelApp := StreamToExcel(filestream); в FExcelApp экземпляр сервера с пустой книгой. Как заставить OleLoad залить содержимое хранилища в открытый экземпляр сервера? Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2019, 13:01 |
|
||
|
Открытие экселя из TMemoryStream
|
|||
|---|---|---|---|
|
#18+
Владимир Золотарёв> Задача: Имеется шаблон XLS который хранится в базе данных. Владимир Золотарёв> Необходимо для конкретного документа заполнить шаблон значениями Тупо берёте код из приведённого примера и подставляете в него BLOBToExcel(ВашаBLOBStreamПеременная). Всё. Владимир Золотарёв> после FExcelApp := StreamToExcel(filestream); Владимир Золотарёв> в FExcelApp экземпляр сервера с пустой книгой. Значит, Вы что-то сделали неправильно, там должен быть Ваш шаблон. Владимир Золотарёв> Как заставить OleLoad залить содержимое хранилища в открытый экземпляр сервера? В один из нескольких открытых или как? И в уже открытую книгу или создать новую? Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2019, 13:57 |
|
||
|
Открытие экселя из TMemoryStream
|
|||
|---|---|---|---|
|
#18+
Гаджимурадов Рустам Тупо берёте код из приведённого примера и подставляете в него BLOBToExcel(ВашаBLOBStreamПеременная). Всё. Собственно почти так и сделал авторЗначит, Вы что-то сделали неправильно, там должен быть Ваш шаблон. Код: pascal 1. 2. 3. 4. 5. 6. В result пустая книга. Если OleLoad "заливает" объект содержащийся в FStorage в первый попавшийся ему экземпляр сервера то где-то ошибка. Вот понять где не могу. Вроде все верно написано. авторВ один из нескольких открытых или как? И в уже открытую книгу или создать новую? В один конкретный. Который создался через Код: pascal 1. авторИ в уже открытую книгу или создать новую? Это не критично. Книгу можно и до этого создать. Можно в новую, можно в активную. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2019, 14:25 |
|
||
|
Открытие экселя из TMemoryStream
|
|||
|---|---|---|---|
|
#18+
Владимир Золотарёв> Собственно почти так и сделал Если у меня работает, а у Вас нет - значит, не так. > В один конкретный. Который создался через В конкретный - без доп.телодвижений не получится. > Книгу можно и до этого создать. Можно в новую, можно в активную. В уже существующую загрузить шаблон (или книгу) - точно не получится, ибо сам Эксель такого не умеет. Скопировать в том или ином виде - можно, но после. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2019, 15:32 |
|
||
|
Открытие экселя из TMemoryStream
|
|||
|---|---|---|---|
|
#18+
Так на чём Вы остановились? С пом. BLOBToExcel не получилось? А-то НГ на носу, не до Вас будет. :) Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2019, 12:26 |
|
||
|
Открытие экселя из TMemoryStream
|
|||
|---|---|---|---|
|
#18+
Гаджимурадов Рустам, Увы, пока не получилось. Сейчас разбираюсь с IPersistStorage. По сути OleLoad c ним же и работает. После праздников постараюсь сделать тестовый пример с BLOBToExcel, что бы было легче понять чего нет у меня и есть у вас. Спасибо за помощь и с наступающим. ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2019, 18:01 |
|
||
|
Открытие экселя из TMemoryStream
|
|||
|---|---|---|---|
|
#18+
Владимир Золотарёв Увы, пока не получилось. После праздников постараюсь сделать тестовый пример с BLOBToExcel Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. работает ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.12.2019, 13:40 |
|
||
|
|

start [/forum/topic.php?all=1&fid=58&tid=2038723]: |
0ms |
get settings: |
8ms |
get forum list: |
19ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
160ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
128ms |
get tp. blocked users: |
1ms |
| others: | 203ms |
| total: | 536ms |

| 0 / 0 |
