Добыча данных из xls-файла

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
anian
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 116
Зарегистрирован: 02.10.2002 (Ср) 12:05
Откуда: /dev/null

Добыча данных из xls-файла

Сообщение anian » 30.07.2003 (Ср) 13:48

Пытаюсь прочитать значение ячейки из xls_файла, но возникает така проблема:

Dim xl As Object
Set xl = CreateObject("Excel.Application")

xl.Workbooks.Open App.Path + "\DATA\p.xls"

xl.Worksheets.Select (1)

MsgBox xl.Worksheet.Cells(1, 1).Value Тута выдается ошибка, мол нет такого свойства или метода

xl.Workbooks.Close

Подскажите, чиво тут не так? Лишнее че аль чего не хватает?
Трез-вы-ми мы не сда-дим-сииии!!! Ураааааа!!!

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Сообщение RayShade » 30.07.2003 (Ср) 15:08

MsgBox xl.Activesheet.Cells(1, 1).Value

bonch
Новичок
Новичок
 
Сообщения: 44
Зарегистрирован: 17.09.2002 (Вт) 12:24
Откуда: Moldova

Сообщение bonch » 07.08.2003 (Чт) 23:39

to RayShade & All
Не подскажите, где можно посмотреть, какие свойства могут быть у данного Object. Т.е. пример

xl.Я идиот! Убейте меня, кто-нибудь!??.Я идиот! Убейте меня, кто-нибудь!??

Я чёто не въежаю :oops:

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 08.08.2003 (Пт) 3:40

??? :?
Ну дык преимущества раннего связывания кто будет использовать? Я-то использую, ... Dim xl as new excel.application обычнно помогает. А нет - жмём F2.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

N.Y.B.
Новичок
Новичок
 
Сообщения: 29
Зарегистрирован: 05.03.2003 (Ср) 12:51
Откуда: Russia

Вот вот - ранее связывание

Сообщение N.Y.B. » 08.08.2003 (Пт) 6:30

Вот вот - ранее связывание
Т.е. объявляй побольше переменных - т.е. одну под Excele, одну под WorkBook, одну под Sheet
И полихоньку спускайся по этой объектной модели
А структуру этой модели лучше всего просмотреть с справочке от Office
в ней есть раздельчик (если установлен) "Сведения по программированию"
Там и примерчики надыбаешь

N.Y.B.
Новичок
Новичок
 
Сообщения: 29
Зарегистрирован: 05.03.2003 (Ср) 12:51
Откуда: Russia

Сообщение N.Y.B. » 08.08.2003 (Пт) 6:44

Кстати, если вдруг надумал читать из Excel'я, потом обсчитывать на VB, потом назат посылать в Excel, то сразу предупреждаю - Excel - такая сволочь по этому поводу.
Конечно, представление данных в таблицах - дело грамотное
Но я тоже так вначале подумал, написал туеву хучу кода на VB (обсчитывал статистику, используя свои собственные и Excel'левские функции)
Но потом понял, что людям такую тормозную прогу показывать НИЗЯ и перешел на простые текстовые файлы

Ну, дерзай

Ели чего надо, намыливай

aaf
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 190
Зарегистрирован: 08.02.2002 (Пт) 13:48
Откуда: Russia

Сообщение aaf » 09.08.2003 (Сб) 7:15

Сорри что вмешиваюсь, но не могу промолчать.
RayShade писал(а):MsgBox xl.Activesheet.Cells(1, 1).Value

По поводу Activesheet - сам наступил на такие грабли (соответственно вам не советую): у меня выводился отчет таким макаром, минуты полторы где то отрабатывал - так вот, если юзер запускал в этот момент другой файл просто для просмотра, то возникали глюки... Нехорошие... Проблема возникала не очень часто, так что я с этим возится шибко не стал, но: ИМХО надо сразу конкретизировать с чем работает твоя программа.
Вечный LAmer

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Сообщение Sebas » 09.08.2003 (Сб) 11:31

aaf писал(а):Сорри что вмешиваюсь, но не могу промолчать.
RayShade писал(а):MsgBox xl.Activesheet.Cells(1, 1).Value

По поводу Activesheet - сам наступил на такие грабли (соответственно вам не советую): у меня выводился отчет таким макаром, минуты полторы где то отрабатывал - так вот, если юзер запускал в этот момент другой файл просто для просмотра, то возникали глюки... Нехорошие... Проблема возникала не очень часто, так что я с этим возится шибко не стал, но: ИМХО надо сразу конкретизировать с чем работает твоя программа.


А я скажу тебе - почему глюки.
Ты каждый раз дёргал
xl.Activesheet.
есстесно, каждый раз(при каждом обращении) ты определял текущий лист. Надо создать свой объект и с ним работать

Set MyShit=xl.Activesheet

With MyShit
.....
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru

next
Обычный пользователь
Обычный пользователь
 
Сообщения: 59
Зарегистрирован: 26.03.2002 (Вт) 23:01

Сообщение next » 09.08.2003 (Сб) 15:28

Был вопрос как узнать xl.Я идиот! Убейте меня, кто-нибудь!Я идиот! Убейте меня, кто-нибудь!.Я идиот! Убейте меня, кто-нибудь!
Если что-то надо сделать в Excel то
Dim x as Object
Set x = createobject ("excel.application")
with x
'Потом заходишь в Excel вкладка Сервис - Записать макрос
'Делаешь то что нужно
' Сервис - Записать макрос Play макрос (последний) - кнопка Изменить
' Копируешь код в VB через буфер
' У каждой функции ставишь точку
' Пример
.ActiveWorkbook.SaveAs "..."
end with

Георгий
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 126
Зарегистрирован: 08.08.2003 (Пт) 15:08
Откуда: Россия

Сообщение Георгий » 11.08.2003 (Пн) 7:52

Можно так сделать?

Dim xl As Excel.Application
Dim wb As Excel.Workbook
Dim ws As Excel.Worksheet

Set xl = CreateObject("Excel.Application")
Set wb = xl.Workbooks.Open App.Path + "\DATA\p.xls"
Set ws = wb.Worksheets.item(1)

MsgBox Cstr(ws.Cells(1, 1).Value)

wb.Close

ws =Nothing
wb =Nothing
xl =Nothing

Что не верно?
Origin - это что?

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 11.08.2003 (Пн) 8:33

Во-первых, можно не использовать item. Во-вторых, последние три команды через Set.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Георгий
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 126
Зарегистрирован: 08.08.2003 (Пт) 15:08
Откуда: Россия

Сообщение Георгий » 11.08.2003 (Пн) 8:45

С этим ясно...

Другой вопрос:

Обязательно создавать:
Set xl = CreateObject("Excel.Application")

Есть мой код запущен в Excel ? Можно сделать так:

Set wb = Excel.Workbooks.Open App.Path + "\DATA\p.xls" :?:

З.Ы.: В подавляющем большинстве примеров есть создание...
Origin - это что?

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 11.08.2003 (Пн) 8:53

Что значит "мой код запущен в excel?" В смысле, это макрос экселевский, в файле xls хранимый? Тады не нужно объект создавать. Потому что если макрос может быть выполнен, значит всё уже создано. :D И вообще, довольно странно создавать эксель из экселя, можно один экселем обойтись. Проперть application там почти у каждого объекта есть, если не вообще у каждого...
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Георгий
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 126
Зарегистрирован: 08.08.2003 (Пт) 15:08
Откуда: Россия

Сообщение Георгий » 11.08.2003 (Пн) 8:58

Вопрос я задал потому, что в примерах для Excel :!: Создается объект ... (не во всех, но во многих)
Origin - это что?

Георгий
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 126
Зарегистрирован: 08.08.2003 (Пт) 15:08
Откуда: Россия

Сообщение Георгий » 11.08.2003 (Пн) 9:01

Если я создаю экземпляр объекта, то "Set = Nothing" удаляет его? (освобождает память)
Origin - это что?

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 11.08.2003 (Пн) 9:05

Так эти примеры для использования из VB. Тогда конечно.
Команда set = nothing - это обнуление данного конкретного указателя на объект. Само по себе этоо не приведёт к закрытию экселя, нужно предварительно сделать xl.quit. А вообще, была тут дискуссия по поводу обнуления указателей, называлась как-то вроде "чистота кода - уничтожение объектов", поиск не работает, поэтому ищи вручную...
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

N.Y.B.
Новичок
Новичок
 
Сообщения: 29
Зарегистрирован: 05.03.2003 (Ср) 12:51
Откуда: Russia

Set ... = Nothing

Сообщение N.Y.B. » 11.08.2003 (Пн) 10:31

Set ... = Nothing освобождает на объект ссылку. Если на этот объект больще ссылок нет, объект автоматом удаляестя.

skim
Начинающий
Начинающий
 
Сообщения: 1
Зарегистрирован: 14.08.2003 (Чт) 10:15

Сообщение skim » 14.08.2003 (Чт) 14:17

Народ, а у меня вопросик соответственно топику. Может, конечно, надо не в этом форуме, но всё же. :)
А как извлекать данные из Ексель при помощи SQL-запросов?
Я знаю, что надо обращаться к Range. Но ведь тогда нужно задавать конкретную область. И ещё. Как извлечь определённые колонки? Подскажите, плиз, если кто знает.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот и гости: 4

    TopList