создать файл Excel с помощью API

Программирование на Visual Basic for Applications
Calvin
Постоялец
Постоялец
 
Сообщения: 409
Зарегистрирован: 21.01.2003 (Вт) 12:13
Откуда: Sebastopol

создать файл Excel с помощью API

Сообщение Calvin » 09.11.2009 (Пн) 20:05

Здраствуйте, уважаемые!
Как создать файл Excel с помощью API? Я пробовал с помощью API функции CreateFile, но что-то с аргументами не могу разобраться, поэтому не получается...
-Whose the motocycle, is this? -It`s a chopper, baby! -Whose chopper is this? -Zed`s! -Who is Zed? -Zed`s dead, baby, Zed`s dead! :-D

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Re: создать файл Excel с помощью API

Сообщение ANDLL » 09.11.2009 (Пн) 20:50

CreateObject("Excel.Application")
И далее... Вот такой вот API.
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

Calvin
Постоялец
Постоялец
 
Сообщения: 409
Зарегистрирован: 21.01.2003 (Вт) 12:13
Откуда: Sebastopol

Re: создать файл Excel с помощью API

Сообщение Calvin » 10.11.2009 (Вт) 9:50

Это не API-шная функция.
-Whose the motocycle, is this? -It`s a chopper, baby! -Whose chopper is this? -Zed`s! -Who is Zed? -Zed`s dead, baby, Zed`s dead! :-D

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: создать файл Excel с помощью API

Сообщение alibek » 10.11.2009 (Вт) 9:53

Это API-шная функция.
Lasciate ogni speranza, voi ch'entrate.

Calvin
Постоялец
Постоялец
 
Сообщения: 409
Зарегистрирован: 21.01.2003 (Вт) 12:13
Откуда: Sebastopol

Re: создать файл Excel с помощью API

Сообщение Calvin » 10.11.2009 (Вт) 10:00

Извиняюсь....Ща буду разбираться
-Whose the motocycle, is this? -It`s a chopper, baby! -Whose chopper is this? -Zed`s! -Who is Zed? -Zed`s dead, baby, Zed`s dead! :-D

Calvin
Постоялец
Постоялец
 
Сообщения: 409
Зарегистрирован: 21.01.2003 (Вт) 12:13
Откуда: Sebastopol

Re: создать файл Excel с помощью API

Сообщение Calvin » 10.11.2009 (Вт) 12:20

Вот создал файл Excel
Код: Выделить всё
Dim xlApp As Object
Dim xlBook As Excel.Workbook

Set xlApp = CreateObject("excel.application")
Set xlBook = xlApp.Workbooks.Add
xlBook.SaveAs "C:\TEST.xls"
xlApp.Quit
Set xlApp = Nothing

вроде все нормально, но когда захожу в этот файл то выдает следующее Действительный формат открываемого файла ("TEST.xls") отличается от указываемого его расширением имени файла. Перед открытием данного файла убедитесь, что он не поврежден и получен из надежного источника. Открыть этот файл сейчас?
Вообщем я так понял, что создается файл другого формата, а программно присваивается расширение .xls.


ЗЫ а у меня вопрос, почему для этой API функции нет объявления в разделе объявлений?
-Whose the motocycle, is this? -It`s a chopper, baby! -Whose chopper is this? -Zed`s! -Who is Zed? -Zed`s dead, baby, Zed`s dead! :-D

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Re: создать файл Excel с помощью API

Сообщение ANDLL » 10.11.2009 (Вт) 12:44

А должно быть?
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

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

Re: создать файл Excel с помощью API

Сообщение Денис » 10.11.2009 (Вт) 12:49

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

Calvin
Постоялец
Постоялец
 
Сообщения: 409
Зарегистрирован: 21.01.2003 (Вт) 12:13
Откуда: Sebastopol

Re: создать файл Excel с помощью API

Сообщение Calvin » 10.11.2009 (Вт) 15:31

Денис, в этой ссылке я ничего нового не нашел.... выше я поместил пример и задал вопрос, почему создается файл не того типа? Меня интересует что не так.
А на счет
ЗЫ а у меня вопрос, почему для этой API функции нет объявления в разделе объявлений?

то обычно если это API функция, то в разделе объявлений она объявляется например вот так:
Код: Выделить всё
Private Declare Function CreateDirectory Lib "kernel32.dll" Alias "CreateDirectoryA" (ByVal lpPathName As String, lpSecurityAttributes As SECURITY_ATTRIBUTES) As Long
-Whose the motocycle, is this? -It`s a chopper, baby! -Whose chopper is this? -Zed`s! -Who is Zed? -Zed`s dead, baby, Zed`s dead! :-D

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

Re: создать файл Excel с помощью API

Сообщение Antonariy » 10.11.2009 (Вт) 15:36

Потому что CreateObject это таки не совсем апи, а обертка для CoCreateInstance (если не вру) и объявлена она на уровне движка, в VBE6.DLL.
Лучший способ понять что-то самому — объяснить это другому.

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

Re: создать файл Excel с помощью API

Сообщение Денис » 10.11.2009 (Вт) 16:51

Calvin писал(а):Денис, в этой ссылке я ничего нового не нашел.

Значит плохо искали. Посмотрите, там ниже идут примеры. У меня они отрабатывают на ура.

Посмотрите примечания к примерам. Когда вы создаете объект, сначала вы должны подключить к проекту объектную модель экселя. Вы это сделали? Если сделали, то какую именно? (их может быть несколько, если Вы жонглировали дистрибутивами офиса)

И вообще, когда я вижу подобные фразы: "в этой ссылке я ничего нового не нашел" у меня закрадывается впечатление, что сказавший это не удосужился внимательно перечитать статью.
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

Calvin
Постоялец
Постоялец
 
Сообщения: 409
Зарегистрирован: 21.01.2003 (Вт) 12:13
Откуда: Sebastopol

Re: создать файл Excel с помощью API

Сообщение Calvin » 10.11.2009 (Вт) 17:28

Пример там такой
Код: Выделить всё
Sub TestExcel()
    Dim xlApp As Microsoft.Office.Interop.Excel.Application
    Dim xlBook As Microsoft.Office.Interop.Excel.Workbook
    Dim xlSheet As Microsoft.Office.Interop.Excel.Worksheet

    xlApp = CType(CreateObject("Excel.Application"), _
                Microsoft.Office.Interop.Excel.Application)
    xlBook = CType(xlApp.Workbooks.Add, _
                Microsoft.Office.Interop.Excel.Workbook)
    xlSheet = CType(xlBook.Worksheets(1), _
                Microsoft.Office.Interop.Excel.Worksheet)

    ' The following statement puts text in the second row of the sheet.
    xlSheet.Cells(2, 2) = "This is column B row 2"
    ' The following statement shows the sheet.
    xlSheet.Application.Visible = True
    ' The following statement saves the sheet to the C:\Test.xls directory.
    xlSheet.SaveAs("C:\Test.xls")
    ' Optionally, you can call xlApp.Quit to close the workbook.
End Sub

у меня подключен reference - Microsoft Excel 12.0 Object Library
Но при объявлении Dim xlApp As Microsoft.Office.Interop.Excel.Application - такой класс не распознается.
А впечатление это видимо ошибочное, просто хочу разобраться...
-Whose the motocycle, is this? -It`s a chopper, baby! -Whose chopper is this? -Zed`s! -Who is Zed? -Zed`s dead, baby, Zed`s dead! :-D

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

Re: создать файл Excel с помощью API

Сообщение Antonariy » 10.11.2009 (Вт) 17:51

Потому что пример для VB.NET. Нужно из объявления убрать Microsoft.Office.Interop.
Лучший способ понять что-то самому — объяснить это другому.

Calvin
Постоялец
Постоялец
 
Сообщения: 409
Зарегистрирован: 21.01.2003 (Вт) 12:13
Откуда: Sebastopol

Re: создать файл Excel с помощью API

Сообщение Calvin » 10.11.2009 (Вт) 18:24

Я понял в чем проблема. Вообщем последний пример в конечном итоге создал Excel файл. У меня всеми этими способами создавался файл, но он создавался в формати 2007 Экселя, хоть я и указывал с каким расширением. Вот если сразу создать Test.xlsx, то такого вопроса при открытии не будет. Дело в том, что не у всех пользователей 2007 офис.
Как все-таки создать xls в моем случае, а не xlsx?

ЗЫ У меня-то с самого начала файл получилось создать, просто при открытии выдавалось предупреждение, поэтому складывается впечатление, что мне все объясняют, а я типа совсем ничего не понимаю.
-Whose the motocycle, is this? -It`s a chopper, baby! -Whose chopper is this? -Zed`s! -Who is Zed? -Zed`s dead, baby, Zed`s dead! :-D

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

Re: создать файл Excel с помощью API

Сообщение Antonariy » 10.11.2009 (Вт) 18:31

Calvin писал(а):Как все-таки создать xls в моем случае, а не xlsx?
Изучить параметры SaveAs и выбрать нужный формат сохранения.
Лучший способ понять что-то самому — объяснить это другому.

Calvin
Постоялец
Постоялец
 
Сообщения: 409
Зарегистрирован: 21.01.2003 (Вт) 12:13
Откуда: Sebastopol

Re: создать файл Excel с помощью API

Сообщение Calvin » 10.11.2009 (Вт) 18:37

спасибо
-Whose the motocycle, is this? -It`s a chopper, baby! -Whose chopper is this? -Zed`s! -Who is Zed? -Zed`s dead, baby, Zed`s dead! :-D

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Re: создать файл Excel с помощью API

Сообщение ANDLL » 10.11.2009 (Вт) 21:23

Antonariy писал(а):Потому что CreateObject это таки не совсем апи, а обертка для CoCreateInstance (если не вру) и объявлена она на уровне движка, в VBE6.DLL.

Tt. Шо за херня?
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

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

Re: создать файл Excel с помощью API

Сообщение Antonariy » 11.11.2009 (Ср) 0:57

CoCreateInstance? Функция такая, ага. Апи. А шо, нэ?
Лучший способ понять что-то самому — объяснить это другому.

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Re: создать файл Excel с помощью API

Сообщение ANDLL » 11.11.2009 (Ср) 1:26

Я про "не совсем API"
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

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

Re: создать файл Excel с помощью API

Сообщение Antonariy » 11.11.2009 (Ср) 9:52

VBE6.DLL — ActiveX, CreateObject является методом global-класса VBA. Это если судить только по object browser'y, сквозь oleview на нее не смотрел.
Лучший способ понять что-то самому — объяснить это другому.

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

Re: создать файл Excel с помощью API

Сообщение iGrok » 11.11.2009 (Ср) 10:23

Antonariy писал(а):VBE6.DLL — ActiveX, CreateObject является методом global-класса VBA. Это если судить только по object browser'y, сквозь oleview на нее не смотрел.

Я думаю, что речь о другом.

С чего это вдруг CreateObject "не совсем" относится к "Application Programming Interface"?
Может, "не совсем WinAPI"? Ну так в заголовке темы вообще не было сказано, на чьи API опираться.. )
label:
cli
jmp label

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Re: создать файл Excel с помощью API

Сообщение ANDLL » 11.11.2009 (Ср) 10:48

Ну скорее проблема немного шире.
API здесь это в том числе и xlBook.Zzzz.Zzzzz.Zzzz
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

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

Re: создать файл Excel с помощью API

Сообщение Antonariy » 11.11.2009 (Ср) 11:12

Ну кагбэ изначально шла речь именно о WinAPI, Private Declare Function и все такое, и почему среди них нет CreateObject… Но если вы хотите про API вообще, то мы можем поговорить об этом :)
Лучший способ понять что-то самому — объяснить это другому.

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Re: создать файл Excel с помощью API

Сообщение ANDLL » 11.11.2009 (Ср) 12:41

Ну кагбэ изначально шла речь именно о WinAPI
О нем речь шла лишь у тебя.
И опа опа, опять никакой связи между WinAPI и declare не существует.
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

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

Re: создать файл Excel с помощью API

Сообщение Antonariy » 11.11.2009 (Ср) 12:59

О нем шла речь у автора (без приставки Win), о чем я намекнул ссылкой. И отвечал в рамках авторского понимания сути вещей, чтобы до него дошло. В каких облаках витают остальные участники и с каких позиций им не видно связей, меня не колышет.
Лучший способ понять что-то самому — объяснить это другому.

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Re: создать файл Excel с помощью API

Сообщение ANDLL » 11.11.2009 (Ср) 13:11

Угу. Херь спросили - херь ответили.
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

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

Re: создать файл Excel с помощью API

Сообщение Antonariy » 11.11.2009 (Ср) 13:48

И херь в комментариях. Как это типично…
Лучший способ понять что-то самому — объяснить это другому.

Calvin
Постоялец
Постоялец
 
Сообщения: 409
Зарегистрирован: 21.01.2003 (Вт) 12:13
Откуда: Sebastopol

Re: создать файл Excel с помощью API

Сообщение Calvin » 11.11.2009 (Ср) 15:26

Если честно, то изначально хотелось узнать по WinApi. Я думаю что особого ума не надо было понять это. Просто если нехрен ответить, то только херь в голову и приходит....
-Whose the motocycle, is this? -It`s a chopper, baby! -Whose chopper is this? -Zed`s! -Who is Zed? -Zed`s dead, baby, Zed`s dead! :-D

Alec
Бывалый
Бывалый
 
Сообщения: 275
Зарегистрирован: 31.08.2008 (Вс) 0:15
Откуда: Ростов-на-Дону

Re: создать файл Excel с помощью API

Сообщение Alec » 11.11.2009 (Ср) 15:46

По-моему, тебя понесло не туда...
Что есть файл xls? Это файл определенного формата, обрабатываемый программой Excel (ну и другими программами, поддерживающими этот формат).
WinApi позволяет создать файл, его наполнение уже на твоей совести. Т.е., если ты знаешь внутренности формата Excel - флаг тебе в руки.
Другой способ, через CreateObject позволяет создать нужный тебе файл средствами самого Excel. WinApi здесь совершенно не причем (если не считать тех функций, которые использует CreateObject и Excel.exe со своими библиотеками).
Нужно определиться, что ты хочешь получить в итоге. Программу, которая создает файл xls БЕЗ использования Excel (т.е. универсальную, работающую на системе без установленного Excel) или программу, работающую в "тандеме" с Excel? Второе, естественно, требует наличие Excel в системе.
От этого и плясать.
Иногда лучше вовремя остановиться...
И начать заново!

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

Re: создать файл Excel с помощью API

Сообщение SLIM » 12.11.2009 (Чт) 23:44

А точно CoCreateInstance?
Вообще интересно что внутри обретки при
1. CreateObject
2. dim objFoo as new ClassName
3. dim objFoo as ClassName
Set objFoo = new ClassName
Пишите жизнь на чистовик.....переписать не удастся.....


Вернуться в VBA

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

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

    TopList