Страницы: 1
RSS
Можно ли ADOStream Object превратить в массив?, НА ЛЕТУ
 
Добрый вечер, всем... вопрос, в принципе, в названии темы.
уточню: хотелось бы это сделать без образования промежуточного файла!!??
p.s. знаю только вариант любезно предоставленный EducatedFool на его сайте DownloadFile, после чего открываю книгу и беру нужный диапазон в массив... и убиваю файл... (файл с тем, что есть, прилагается - точку-останова на EndSub - и в окне Locals виден заполненный массив)... - всё как бы работает, но просто очень интересно, если нужен только массив из файла .xls (который находится в и'нет) - то МОЖНО ЛИ его как-то взять, не скачивая сам файл и КАК??
p.p.s сразу оговорюсь - это НЕ база данных - подключение и запрос не наладить, хотя было бы интересно... но, видно, не судьба на данном файле...
(вот такой вопрос мучает не первую неделю - в сети ответа не нашла)
Изменено: JeyCi - 31.10.2015 15:05:06
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
 
В данном случае можно скачать без вспомогательного файла и без ADO прямо в память Excel
для этого вместо: DownloadFile URL$, FileTxt$
достаточно записать: Workbooks.Open URL, ReadOnly:=True
Изменено: ZVI - 26.04.2015 20:49:20
 
Цитата
ZVI написал: достаточно записать: Workbooks.Open URL, ReadOnly:=True
и то, что мне очень понравилось - IE тут вообще не при чём (как, в принципе, и в подходе Игоря) - не люблю способы обращения в и'нет, которые дёргают explorer так, что потом кнопка "сервис-повторное открытие последнего сеанса" не работает - всегда можно что-нибудь потерять - поэтому к IE стараюсь не прикасаться по кодам...
а тут, похоже, вообще прямое обращение... всё открылось и всё взялось - без функции и без лишнего файла на компе!
Спасибо большое - "строка№1" - всегда выглядит намного аккуратнее, чем целый модуль исписанный мной с таким же функционалом...
Вот так выглядит код до End Sub:
Код
Workbooks.Open URL, ReadOnly:=True
Set wb = ActiveWorkbook
     If wb Is Nothing Then Exit Sub
     Set ra = wb.Worksheets(1).UsedRange
     arr = ra.Value  '!!! в окне Locals
     wb.Close False
End Sub
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
 
Можно вообще в одну строку :)
Код
Sub bb()
Dim URL, arr
  'ссылка на файл из соседней темы
URL = "http://www.planetaexcel.ru/bitrix/components/bitrix/forum.interface/show_file.php?fid=136079&action=download"
arr = GetObject(URL, "excel.sheet").Worksheets(1).UsedRange.Value
End Sub
 
всегда знала, что можно выражаться более кратко, чем я :) - одна строка, способная заменить все мои мысли по коду сразу, всегда на вес золота... (даже не знала, как спросить)

p.s. честно говоря, хотела понять этот странный объект ADOStream - как это в Stream'e найти Position от LineSeparator, чтобы брать построчно, SkipLines иногда... чтобы понять много новых слов... как-то эксперименты на textStream проходят, а ADOStrem какой-то аморфный в моём понимании - слить с файла(LoadFromFile), залить в файл(SaveToFile), даже кодировку задать Charset - понятно, а что можно делать, "на лету" распознавая саму структуру информации, пока не нашла... НО предложенные варианты ещё короче, чем я подумала, - всем большое спасибо, а то рук на клавиатуре иногда не хватает... respect!
Изменено: JeyCi - 27.04.2015 10:43:51
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
 
Цитата
Казанский написал: Можно вообще в одну строку :)
Алексей, добрый день.
Но в одну строчку загруженная книга останется в памяти, я бы всё же не жалел лишних строк на её закрытие :)
Код
  Application.ScreenUpdating = False
  With Workbooks.Open(URL, ReadOnly:=True)
    arr = .Sheets(1).UsedRange.Value
    .Close False
  End With
  Application.ScreenUpdating = True
Или в Вашем варианте:
Код
Application.ScreenUpdating = False
With GetObject(URL, "excel.sheet")
  arr = .Worksheets(1).UsedRange.Value
  .Close False
End With
Application.ScreenUpdating = True
Изменено: ZVI - 29.04.2015 05:50:33
 
в "полевых условиях" оба макроса отработали превосходно... только в код 1-й (последнего поста) - внедрить 2-точки 8) в слова ReadOnly:=True ...
Изменено: JeyCi - 28.04.2015 10:49:37
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
 
Цитата
JeyCi написал: только в код 1-й (последнего поста) - внедрить 2-точки
Куда делись? :oops:
Внедрил! :)
Страницы: 1
Наверх