перенос в excel

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
twist
Начинающий
Начинающий
 
Сообщения: 5
Зарегистрирован: 02.04.2010 (Пт) 9:33

перенос в excel

Сообщение twist » 08.04.2010 (Чт) 11:50

здравствуйте! появилась проблема.прошу помощи только неругайтесь что вопрос тупой или простой или еще что, сам найти ответ не смог поэтому решил задать вопрос на вашем форуме.вобщем вот код для примера
Private Sub Command1_Click()
Open "c:\1.xls" For Append As #1
Print #1, "привет"
Close #1
End Sub
вопрос в том как указать в этом коде адрес ячейки в которую нужно записать и вообще возможно ли это в данном коде. т.е.:Print #1,'адрес ячейки' 'значение переменной или поля текстбокс' Как то так... вобщем.подскажите. заранее спасибо.

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Re: перенос в excel

Сообщение Денис » 08.04.2010 (Чт) 12:32

twist писал(а):Open "c:\1.xls" For Append As #1


Не-не-не. Это так не делается.

Это делается через CreateObject("Excel.Application")

Код: Выделить всё
Option Explicit

Private Sub Command1_Click()

Dim C1 As Object
Dim W1 As Object
Dim S1 As Object

Set C1 = CreateObject("Excel.Application")

Set W1 = C1.Workbooks.Open("D:\temp\1.xls")

Set S1 = W1.Worksheets(1)

S1.Cells(1, 1) = "Привет!"

Set S1 = Nothing
W1.Close 1

Set W1 = Nothing
Set C1 = Nothing

End Sub
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

twist
Начинающий
Начинающий
 
Сообщения: 5
Зарегистрирован: 02.04.2010 (Пт) 9:33

Re: перенос в excel

Сообщение twist » 08.04.2010 (Чт) 13:13

Денис! просто гигантское спасибо! все получилось!

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Re: перенос в excel

Сообщение Денис » 08.04.2010 (Чт) 13:47

twist писал(а):Денис! просто гигантское спасибо! все получилось!


Заметьте, этот код будет работать на машинах, где установлен Excel. Если надо сделать подобное на машине без Excel, то все намного интереснее становится.
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

SLIM
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1840
Зарегистрирован: 04.04.2008 (Пт) 18:21
Откуда: Краснодар

Re: перенос в excel

Сообщение SLIM » 08.04.2010 (Чт) 21:03

ага ага...нужно знать спецификацию файла, а она ой какая не маленькая :)
Пишите жизнь на чистовик.....переписать не удастся.....

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: перенос в excel

Сообщение Хакер » 08.04.2010 (Чт) 21:05

То, что она не маленькая, фигня, по сравнению с тем, что она закрытая.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

SLIM
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1840
Зарегистрирован: 04.04.2008 (Пт) 18:21
Откуда: Краснодар

Re: перенос в excel

Сообщение SLIM » 08.04.2010 (Чт) 22:39

MS открыли спецификацию.
Иначе не появилось бы всяких Open Office
Пишите жизнь на чистовик.....переписать не удастся.....

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: перенос в excel

Сообщение iGrok » 09.04.2010 (Пт) 0:44

Слим, не забывай, что есть реверс-инжиниринг.. )
label:
cli
jmp label

SLIM
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1840
Зарегистрирован: 04.04.2008 (Пт) 18:21
Откуда: Краснодар

Re: перенос в excel

Сообщение SLIM » 09.04.2010 (Пт) 6:28

Представляю сколько нужно инжинирить для разбора спецификации Excel. Один человек потратит лет 7 работы.

UPD:
Да, нашел, она у меня была, эта спецификация PDF-ный файл 350 страниц
Пишите жизнь на чистовик.....переписать не удастся.....

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Re: перенос в excel

Сообщение Денис » 09.04.2010 (Пт) 9:19

ЕМНИП, OpenOffice разрабатывают дольше семи лет, и все эти годы это красноглазое поделие не могло правильно читать файлы офиса, что явно указывает на реверс-инженеринг, причем далеко неполный.
После этого (я повторяюсь, ЕМНИП), МС делает свои открытые форматы *.???х и с широкого барского плеча открывает спецификации никому уже не нужных бинарных форматов.
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

SLIM
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1840
Зарегистрирован: 04.04.2008 (Пт) 18:21
Откуда: Краснодар

Re: перенос в excel

Сообщение SLIM » 09.04.2010 (Пт) 18:50

Ну почему же.
Вот у меня спецификация (общая) на Excel 98-2007. С учетом того, что на фирме до сих пор юзают 2003-й, вполне неплохо.
Денис писал(а):OpenOffice разрабатывают дольше семи лет

Помоему тоже. Как-то читал об этом.
Денис писал(а):и все эти годы это красноглазое поделие не могло правильно читать файлы офиса

Ну не скажи. Не всегда уж так плохо. Для общих задач хватало. Но функционал урезанный. Я вот недавно столкнулся с тем что OO не умеет юзать сводные таблицы.
Пишите жизнь на чистовик.....переписать не удастся.....

qwertyhp
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 156
Зарегистрирован: 07.10.2009 (Ср) 15:02
Откуда: Москва

Re: перенос в excel

Сообщение qwertyhp » 11.04.2010 (Вс) 12:53

Денис, присоединяюсь к автору вопроса - огромное спасибо, мне тоже пригодилось.
Писать в файл, не открывая - это здорово.
Смог сделать S1.Cells(1, 2).Font.Size, S1.Cells(1, 1).ColumnWidth, S1.Cells(1, 2).EntireColumn.AutoFit, - а вот с цветами и рамками не получается... для них требуется обязательное выделение области (т.е. надо открывать файл) - или я чего-то не понимаю?
Просто, если существует возможность монтировать файл(ы) (например, отчёты), НЕ открывая их - это лучший вариант для работы.
Пятачок Forever! :)

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: перенос в excel

Сообщение iGrok » 11.04.2010 (Вс) 13:38

qwertyhp писал(а):Просто, если существует возможность монтировать файл(ы) (например, отчёты), НЕ открывая их - это лучший вариант для работы.

Пять баллов. Сам-то понял, что написал?

Войти в дверь, не открывая её.
Достать огурец из банки, не открывая её.
Найти вирус в компьютере не включая его.

Как-то так, да?
label:
cli
jmp label

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Re: перенос в excel

Сообщение Денис » 11.04.2010 (Вс) 16:57

iGrok писал(а):Сам-то понял, что написал?


Я потихоньку осваиваю телепатию, читая блог нашего гуру телепатии, и мне сейчас кажется, что qwertyhp имел ввиду, что удобно писать в xls файл, просто загружая в память объект excel, но не показывая ничего на экране.

qwertyhp писал(а):а вот с цветами и рамками не получается... для них требуется обязательное выделение области (т.е. надо открывать файл) - или я чего-то не понимаю?


Сделайте все в Excel, макросами, даже запишите их, потом посмотрите код, выберите все, что нужно и копипастьте себе. В моем примере, я тоже сначала набрал код в Excel VBA, пользуясь удобными интерфейсами, а потом перенес в vb.
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

qwertyhp
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 156
Зарегистрирован: 07.10.2009 (Ср) 15:02
Откуда: Москва

Re: перенос в excel

Сообщение qwertyhp » 11.04.2010 (Вс) 23:03

Денис совершенно прав - отчёты монтируются автоматом на основе данных, читаемых из ЗАКРЫТЫХ файлов - но во время монтажа происходит мелькание, экран плющит и колбасит, и смотрится это несколько... непрофессионально исполняемым, что ли.
Хочется достичь совершенства ))))) :roll: :roll: :roll:
Поэтому хочу не только читать - но и писать в закрытый файл, и форматировать его, не открывая.
В основном со всем разобрался. Для рамок Borders(xlEdgeTop) и т.п. надо писать Borders(3) и т.п., .LineStyle = 0, .Weight = 2 - это ясно. Непонятно только - как сделать в клеточку диапазон ячеек (типа "A1:F6"). Получается только по одной ячейке заключать в квадратик. А вот интервал (в сеточку) - никак.
(Если кому нужны результаты моих изысканий - выложу).
"...Достать огурец из банки, не открывая её." Точно. Как освою методу - буду по ней ходить в прод.маги.)))))
Пятачок Forever! :)

SLIM
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1840
Зарегистрирован: 04.04.2008 (Пт) 18:21
Откуда: Краснодар

Re: перенос в excel

Сообщение SLIM » 12.04.2010 (Пн) 0:05

Вам же объяснили, чудес не бывает.
Это невероятная ошибка - писать в куда-то что-то не открывая это что-то. Это как писать книгу не в непачатую пачку бумаги.
Когда вы создаете COM-объект Excel, и сама программа запускается (посмотрите в процессах).
После загрузки WorkBook, файлы этой книги переходит в состояние "занят". Попробуйте после открытия книги в программе открыть ее через проводник, и увидите.
Так что все открывается, только этого не видно. Об этом и говорил Денис упоминая о телепатии, Вы просто не хотите видеть открытия, но оно таки произойдет.
qwertyhp писал(а):Просто, если существует возможность монтировать файл(ы) (например, отчёты), НЕ открывая их - это лучший вариант для работы.

Ну это же COM, тут много что можно. OLE позволяет вставлять объекты Excel, например, в Word, или в твою программу. И вообще, вставлять все во все.
Но ты должен понимать, что магии нет, ничего не делается не открывая.
Пишите жизнь на чистовик.....переписать не удастся.....

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Re: перенос в excel

Сообщение Antonariy » 12.04.2010 (Пн) 20:28

SLIM писал(а):И вообще, вставлять все во все.
Ну я бы не был столь категоричен. Скажем, кое-что кое-куда. На самом деле не так уж много ПО поддерживает OLE.
Лучший способ понять что-то самому — объяснить это другому.

SLIM
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1840
Зарегистрирован: 04.04.2008 (Пт) 18:21
Откуда: Краснодар

Re: перенос в excel

Сообщение SLIM » 12.04.2010 (Пн) 21:17

Ты прав конечно.
Я вообще, на самом деле, кроме как от создателей этого самого OLE, ничего путнего не видел.
Пишите жизнь на чистовик.....переписать не удастся.....

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Re: перенос в excel

Сообщение Денис » 13.04.2010 (Вт) 8:02

SLIM писал(а):Ты прав конечно.
Я вообще, на самом деле, кроме как от создателей этого самого OLE, ничего путнего не видел.


А как же 1С? Он регает в системе свой OLE-сервер. Я, правда, сам не пользовался, но батя грит, "малаца, хорошо зделоли".
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Re: перенос в excel

Сообщение Antonariy » 13.04.2010 (Вт) 10:26

Денис писал(а):
SLIM писал(а):Ты прав конечно.
Я вообще, на самом деле, кроме как от создателей этого самого OLE, ничего путнего не видел.


А как же 1С? Он регает в системе свой OLE-сервер. Я, правда, сам не пользовался, но батя грит, "малаца, хорошо зделоли".
Да как всегда, путаница терминов. Не OLE, а COM-сервер.
Лучший способ понять что-то самому — объяснить это другому.

SLIM
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1840
Зарегистрирован: 04.04.2008 (Пт) 18:21
Откуда: Краснодар

Re: перенос в excel

Сообщение SLIM » 13.04.2010 (Вт) 19:38

А что у 1С? COM?
Пишите жизнь на чистовик.....переписать не удастся.....

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Re: перенос в excel

Сообщение Денис » 13.04.2010 (Вт) 20:10

SLIM писал(а):А что у 1С? COM?

COM разума у них. И он рождает чудовищ, да.

[Хакер] :: Мозг Дениса рождают флуд. И если это продолжится, руки Хакера породят предупреждения в сторону Дениса.
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

SLIM
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1840
Зарегистрирован: 04.04.2008 (Пт) 18:21
Откуда: Краснодар

Re: перенос в excel

Сообщение SLIM » 13.04.2010 (Вт) 22:44

А вообще, раз уж пошла тема.
Кто мне скажет какой-ниубудь распространенный чистый COM-сервер.
Я пока только OLE встречал.
Пишите жизнь на чистовик.....переписать не удастся.....

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: перенос в excel

Сообщение iGrok » 13.04.2010 (Вт) 23:49

SLIM писал(а):А вообще, раз уж пошла тема.
Кто мне скажет какой-ниубудь распространенный чистый COM-сервер.
Я пока только OLE встречал.

Ну сказали же, у 1С COM-сервер.
А что ты за OLE-серверы встречал?
label:
cli
jmp label

Dmitriy2003
Постоялец
Постоялец
 
Сообщения: 690
Зарегистрирован: 27.05.2003 (Вт) 22:47
Откуда: Deutschland

Re: перенос в excel

Сообщение Dmitriy2003 » 14.04.2010 (Ср) 2:12

MSDN писал(а):At the heart of OLE 2 is the "OLE Component Object Model", or COM. COM defines a standard for how cooperating objects communicate to one another. This includes the details of what an "object" looks like, including how methods are dispatched on an object. COM also defines a base class, from which all COM compatible classes are derived. This base class is IUnknown. Although the IUnknown interface is referred to as a C++ class, COM is not specific to any one language — it can be implemented in C, PASCAL, or any other language that can support the binary layout of a COM object.

OLE refers to all classes derived from IUnknown as "interfaces." This is an important distinction, since an "interface" such as IUnknown carries with it no implementation. It simply defines the protocol by which objects communicate, not the specifics of what those implementations do. This is reasonable for a system that allows for maximum flexibility. It is MFC's job to implement a default behavior for MFC/C++ programs.

Кто-то будет долго чесать репу - пытаясь понять, что есть OLE, а что COM :)

SLIM
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1840
Зарегистрирован: 04.04.2008 (Пт) 18:21
Откуда: Краснодар

Re: перенос в excel

Сообщение SLIM » 14.04.2010 (Ср) 6:26

Да все почти VB-шное -все OLE-шное.
Разве нет? И это не мало?
Пишите жизнь на чистовик.....переписать не удастся.....

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Re: перенос в excel

Сообщение Денис » 14.04.2010 (Ср) 8:04

OLE - это встраиваемые объекты COM. Если у вас на форме торчит лист Excel - это OLE. При этом тот факт, что в момент, когда Вы на своей форме активируете OLE-объект, запускается процесс Excel и отображает на вашей форме весь этот лист - это COM.
Как-то так.
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Re: перенос в excel

Сообщение Antonariy » 14.04.2010 (Ср) 9:58

Короче, OLE — встраиваемые объекты, COM — dll или ActiveX exe (ага, взаимоисключающие параграфы), ActiveX — ocx, при этом технологически они отличаются мало.
OLE — это когда визуальный объект обрабатывается с помощью COM-exe отдельным процессом, ActiveX — когда визуальный объект обрабатывается COM-dll в том же процессе.
Последний раз редактировалось Antonariy 14.04.2010 (Ср) 10:04, всего редактировалось 1 раз.
Лучший способ понять что-то самому — объяснить это другому.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: перенос в excel

Сообщение Хакер » 14.04.2010 (Ср) 10:02

Вообще-то это почти синонимы.

OLE — раннее название технологии. Название отражает принцип всеобщей внедряемости.
COM — более позднее название технологии. Фишка технологии теперь не только во внедряемости, а скорее в разбиении на компоненты.
ActiveX — вообще технология-надстройка над COM. ActiveX = COM + TLB + IDispatch + ПрогИды + Регистрация-сервера-в-реесте + экспорт-DllGetClassObject.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Re: перенос в excel

Сообщение Antonariy » 14.04.2010 (Ср) 10:07

ActiveX = COM+TLB+IDispatch.
Имеется ввиду, что сначала COM-dll были вообще без tlb, даже отдельным файлом?
Лучший способ понять что-то самому — объяснить это другому.

След.

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

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

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

    TopList