|
|
|
Открытие экселя из 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 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=38111552&tid=2038723]: |
0ms |
get settings: |
8ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
165ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
83ms |
get tp. blocked users: |
1ms |
| others: | 227ms |
| total: | 517ms |

| 0 / 0 |
