Перейти из форума на сайт.Реклама на Ru.Board

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаФотогалереяГазетаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация


  nanoCAD 5.0. Умное рабочее проектирование. Поддерживает формат *.dwg

  Система IP-видеонаблюдения "Линия". Скачать демо-версию для 16 камер.





Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Visual Basic.NET

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки

Открыть новую тему     Написать ответ в эту тему

Nuck



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Народ, кто знает как в VB7 создается объект. Скажем в VB6 я делал так:  
appExcel = GetObject(, "Excel.Application")
А тут зараза не хочет он это хавать, хотя вроде все подвизал, может кто знает в чем тут собака то?

Всего записей: 359 | Зарегистр. 29-10-2001 | Отправлено: 18:03 20-01-2003
Guderian



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Во-первых, то что ты делаешь это не создание экземпляра экселя, а получение текущего активного. Т.е. если в этот момент эксель не был запущен, будет вываливаться с эксепшеном в противном случае твой пример работает так как надо работать.
 
Во-вторых, имхо, лучший способ - через раннее связывание. Первым делом, добавляешь к проекту референс на excel.exe, что отразится на появлении трех новых неймспейсов. Excel, Microsoft.Office.Core и VBIDE. А дальше все просто. Из примера, думаю, все будет понятно.
 

Код:
 
Dim excel As Excel._Application
excel = New Excel.ApplicationClass()
excel.Visible = True
 

 
Скорость выше, IntelliSense в VS работает и т.д.
 
Если уж очень надо создавать через позднее связывание, то надо использовать не GetObject, а CreateObject, т.е.

Код:
 
Dim excel As Object
excel = CreateObject("Excel.Application")
excel.Visible = True
 

Всего записей: 382 | Зарегистр. 07-05-2002 | Отправлено: 10:14 21-01-2003
Nuck



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Спасибо за ответ. но дело в том, что мне надо открывать уже существующий док. в экселе и не на показ, а закадром. Скажем раньше я это делал так:
проверка на уже существующий открытый док.
Dim appExcel as Excel.Application
Dim wbExcel as Excel.Workbook
Dim wshExcel as Excel.WorkSheet
 
Set  appExcel=GetObject(,"Excel.Application")
 
открытие дока.
 
Set wbExcel=appExcel.Workbooks.open(App.Path & ".\excel.xls")
 
и наконец активирование
 
Set wshExcel = wbExcel.AkriveSheet
 
ну а далее работа со строками по принципу:
 
wshExcel.Cells(n,m) ит.д. и т.п.
 
Так вот, я ему тоже самое написал в VB7, а он морду ворочит
 
Не мог бы ты поподробнее рассписать как это должно выглядеть под vb7. Задача опрасить колоки в excel в один массив.
Спасибго

Всего записей: 359 | Зарегистр. 29-10-2001 | Отправлено: 14:07 21-01-2003
Guderian



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
GetObject у тебя работает только в том случае, если запущен excel. Причем, не обязательно он у тебя будет виден как приложение, скорее всего com-сервер экселя продолжал крутиться. Забыл сделать Set .. = Nothing и гитлер капут. Так что пользовать надо CreateObject. Вкратце же оно будет выглядеть так:

Код:
 
Dim excel As Object
excel = CreateObject("Excel.Application")
excel.Workbooks.Open("e:\Книга1.xls")
excel.Visible = False
 
Dim column As Object
column = excel.ActiveSheet.Columns("B")
column.Select()
excel.Selection.Interior.ColorIndex = 6
 

 
Но лучше, как я и говорил, через раннее связывание. Особенно, если используешь VS7.

Всего записей: 382 | Зарегистр. 07-05-2002 | Отправлено: 17:39 21-01-2003
Elvin Archer



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
А как создать Excel файл в С++?
То же через CreateObject?
 
Добавлено
Имеется в виду Borland C++ Builder 6.0
Sorry...

Всего записей: 31 | Зарегистр. 04-02-2003 | Отправлено: 11:30 21-03-2003
Guderian



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Elvin Archer
Можно через CreateObject, но есть подозрение, что в cbb может быть закладка servers как в delphi с наличествующими там ExcelApplication, ExcelWorkbook. Тогда это несколько упростит задачу.

Всего записей: 382 | Зарегистр. 07-05-2002 | Отправлено: 11:42 21-03-2003
Elvin Archer



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Guderian Сенкс за посдказку!
Закладки Servers нет,  но зато есть Office2k и там ужо все есть...
Буду думать теперь дальше...
Али подмогнешь?

Всего записей: 31 | Зарегистр. 04-02-2003 | Отправлено: 13:15 21-03-2003
Guderian



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Elvin Archer

Цитата:
Али подмогнешь?

Смотря чем, если советом, то помогу, чем смогу, я для этого тут и ошиваюсь. А ежели написать за тебя что-то, то увольте

Всего записей: 382 | Зарегистр. 07-05-2002 | Отправлено: 16:41 21-03-2003
Elvin Archer



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Guderian
Конечно, советом!
Делать надо самому - иначе есть риск ничего не понять, но...
По разделу Office2k в хелпе нет совсем ничего...
Вот и думаю - что и как делать. Так что нужен совет.
Вообще суть задачи - надо взять данные из текстового файла с разделителями и  
экспортировать в экселевский файл.
Если с первой частью проблем не вижу, то со второй - темный лес...

Всего записей: 31 | Зарегистр. 04-02-2003 | Отправлено: 12:05 24-03-2003
Guderian



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ищи в офисных папках файл VBAXL*.CHM (где * зависит от версии). Там искомая документация. Вообще, исходный файл сильно напоминает формат cvs, который Excel'ем легко переваривается. Так что если особых наворотов не надо, так будет гораздо проще. Если же надо навернуть, то в целом алгоритм выглядит следующим образом:
- Создал или загрузил книгу (через Workbooks.Add или Workbooks.Open, ActiveWorkbook и т.д.)
- создал или выбрал лист (Worksheet("имя").Activate, ActiveSheet, Worksheets.Add и т.д.)
- рассовываешь что надо по ячейкам. Самый банальный способ, например, Range("B5").Value = "что-то там". Если надо сразу много ячеек заполнить, а скорость критична, то это уже другая тема.

Всего записей: 382 | Зарегистр. 07-05-2002 | Отправлено: 12:33 24-03-2003
Elvin Archer



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Guderian
Понял!
Но вот еще какая беда вылазит - при запуске с использованием .Add или .Open  
выскакивает сообщение "Класс не зарегистрирован", подскажи - это что за зверь?
И как с ним бороться?

Всего записей: 31 | Зарегистр. 04-02-2003 | Отправлено: 15:08 24-03-2003
Guderian



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Код показывай.

Всего записей: 382 | Зарегистр. 07-05-2002 | Отправлено: 17:11 24-03-2003
Elvin Archer



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Усе...
Кажись сделал...

Всего записей: 31 | Зарегистр. 04-02-2003 | Отправлено: 05:40 03-04-2003
Открыть новую тему     Написать ответ в эту тему

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Visual Basic.NET

Имя:
Пароль:
Сообщение

Для вставки имени, кликните на нем.

Опции сообщенияДобавить свою подпись
Подписаться на получение ответов по e-mail
Добавить тему в личные закладки
Разрешить смайлики?
Запретить коды


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.Board
© Ru.Board 2000-2011