Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / vbs & excel - а если на сервере не стоит офис? / 11 сообщений из 11, страница 1 из 1
21.02.2006, 12:45:07
    #33558050
zodchiy_gigas
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
vbs & excel - а если на сервере не стоит офис?
Возникла необходимость выводить отчеты, брать шаблон (там уже нарисована шапка, логотипы), добавлять туда данные и отдавать файл пользователю.

как это я сделал:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
  conntobase = "dsn=DSN;"
Set FsoObj = CreateObject("Scripting.FileSystemObject")
tempfile = Server.MapPath(".") & "\xls\1.xls"
usefile = Server.MapPath(".") & "\xls\"&date&".xls"
Set FileName = FsoObj.GetFile(tempfile)
FileName.Copy usefile

Set objXL=Server.CreateObject("Excel.Application")
Set objWBook=objXL.WorkBooks.Open(usefile)

Set objWSheet=objWBook.WorkSheets( 1 )

		dim arrayquery
		q = request.QueryString()
		arrayquery = split(q, "&")
		i =  1 
		ixl =  7  // c какой строки начинаем добавлять записи
		for each akey in arrayquery
		
				if instr( 1 , akey, "akey")= 1  then
				
Set conn = Server.CreateObject("ADODB.Recordset")
conn.ActiveConnection = conntobase
conn.Source = "SELECT  CONCAT(CONCAT(convert (billdprt, SQL_VARCHAR), '/'), convert(bill, SQL_VARCHAR)) as zakaznarad WHERE "&akey
conn.CursorLocation =  2 
conn.LockType =  1 
conn.Open()
objWSheet.Range("A"&ixl+i).Value = conn("zakaznarad")
conn.close
set conn = nothing
i = i +  1 

		next
		
Set objWSheet=Nothing
objWBook.Close True
Set objWBook=Nothing
objXL.Quit
Set objXL=Nothing
Set s = Server.CreateObject("ADODB.Stream")
s.Open
s.Type =  1 
s.LoadFromFile(usefile
		response.AddHeader "Content-Disposition", "attachment; filename="&usefile
		Response.ContentType = "application/vnd.ms-excel"
     	Response.BinaryWrite s.Read
        Response.Flush
s.Close
Set s = Nothing
все работает, все в ажуре.
но тут отказалось что на сервере не стоит офис и нет возможности его туда поставить, я слышал что к нему (к файлу Excel) можно обратиться через ADO, полазил по нету, почитал, решил опробовать:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Dim XLS
XLS = Server.MapPath(".") & "xls/1.xls"
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="& XLS & ";Extended Properties=""Excel 8.0;HDR=Yes;IMEX=1""" 

Conn.Execute "select * from [str1$]" \\ Лист под названием str1 - работает
Conn.Execute "select * from [str1$:a9]" \\ не работает
Conn.Execute "select [a9] from [str1$]" \\ не работает
Conn.Execute "select [$a9] from [str1$]" \\ не работает

Conn.Close
set conn = nothing

есть ли возможность как в первом варианте обратится к файлу excel, если не стоит офис на сервере? если нет то как работать с excel через ADO?
...
Рейтинг: 0 / 0
21.02.2006, 13:23:48
    #33558191
Дмит
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
vbs & excel - а если на сервере не стоит офис?
Однажды обращался (только через DAO) так:
Set rsRst = myDB.OpenRecordset("select distinct * from `TABS`")
где TABS имя диапазона на листе.
...
Рейтинг: 0 / 0
21.02.2006, 14:03:44
    #33558351
k-nike
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
vbs & excel - а если на сервере не стоит офис?
1. Если там не стоит Office, как же ты запустишь там VBA?

2. Если собираешься писать приложение не на VBA, то "Прежде чем применять технологию ADO, на компьютере должна быть инсталлирована библиотек ADO. Она инсталлируется вместе с Microsoft Office..." - цитата из одной книжки.
А так как Office ставить нельзя, то можно попробовать драйвер IBProvider . Есть бесплатная версия и есть примеры на русском языке. Я его испльзую для доступа к БД InterBase.
...
Рейтинг: 0 / 0
21.02.2006, 14:26:22
    #33558422
zodchiy_gigas
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
vbs & excel - а если на сервере не стоит офис?
k-nike1. Если там не стоит Office, как же ты запустишь там VBA?

2. Если собираешься писать приложение не на VBA, то "Прежде чем применять технологию ADO, на компьютере должна быть инсталлирована библиотек ADO. Она инсталлируется вместе с Microsoft Office..." - цитата из одной книжки.
А так как Office ставить нельзя, то можно попробовать драйвер IBProvider . Есть бесплатная версия и есть примеры на русском языке. Я его испльзую для доступа к БД InterBase.

Там есть естественно ODBC - а ODBC, это вроде один из инструментов ADO
...
Рейтинг: 0 / 0
21.02.2006, 14:34:20
    #33558448
zodchiy_gigas
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
vbs & excel - а если на сервере не стоит офис?
ДмитОднажды обращался (только через DAO) так:
Set rsRst = myDB.OpenRecordset("select distinct * from `TABS`")
где TABS имя диапазона на листе.
а к определенной ячейке как?
...
Рейтинг: 0 / 0
21.02.2006, 14:39:31
    #33558467
Дмит
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
vbs & excel - а если на сервере не стоит офис?
Вот кусок старого кода:
Set rsRst = myDB.OpenRecordset("select distinct * from `TABS`")
Do While Not rsRst.EOF
If Len(rsRst.Fields(0)) > 0 Then Combo.AddItem rsRst.Fields(0)
rsRst.MoveNext
Loop
rsRst.Close
Set rsRst = Nothing
Может быть поможет.
...
Рейтинг: 0 / 0
21.02.2006, 14:56:49
    #33558546
zodchiy_gigas
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
vbs & excel - а если на сервере не стоит офис?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
Dim SourceXLS
SourceXLS = Server.MapPath(".") & "\1.xls"
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="& SourceXLS & ";Extended Properties=""Excel 8.0;HDR=Yes;IMEX=1""" 

Conn.Execute "select 'a9' from [str1$]"
Conn.Close
set conn = nothing

работает... т.е. ошибок нет

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
Dim SourceXLS
SourceXLS = Server.MapPath(".") & "\1.xls"
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="& SourceXLS & ";Extended Properties=""Excel 8.0;HDR=Yes;IMEX=1""" 
Conn.Execute "select 'a9' from [str1$]"

response.write conn("a9")

Conn.Close
set conn = nothing

ошибка:
Недопустимое число аргументов или присвоение значения свойства: 'Conn'

значит как-то подругому ячеки надо перебирать.
...
Рейтинг: 0 / 0
21.02.2006, 15:14:53
    #33558595
zodchiy_gigas
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
vbs & excel - а если на сервере не стоит офис?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
Dim SourceXLS
SourceXLS = Server.MapPath(".") & "\1.xls"
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="& SourceXLS & ";Extended Properties=""Excel 8.0;HDR=Yes;IMEX=1""" 

Conn.Execute "select * from [str1$a9:a10]" 
Conn.Close
set conn = nothing
выбирает, но как обратится к результату выборки?
...
Рейтинг: 0 / 0
21.02.2006, 15:54:11
    #33558742
vbs & excel - а если на сервере не стоит офис?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
    Const adOpenStatic =  3 

    Dim cnn
    Dim rst
    
    Set cnn = Server.CreateObject("ADODB.Connection")
    Set rst = Server.CreateObject("ADODB.Recordset")

    cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
      "Data Source=C:\Book1.xls;" & _
      "Extended Properties=""Excel 8.0;"""
    
    rst.Open "SELECT * FROM [Sheet1$A1:B10]", cnn, adOpenStatic
    
    Do Until rst.EOF
        Debug.Print rst.Fields( 0 ), rst.Fields( 1 )
        rst.MoveNext
    Loop
...
Рейтинг: 0 / 0
21.02.2006, 17:20:57
    #33559052
zodchiy_gigas
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
vbs & excel - а если на сервере не стоит офис?
спасибо получилось, снимаю пред вами шляпу, но вот как проапдейтить запись?

UPDATE [str1$] SET [B9:B10] = 'some'
UPDATE [str1$] SET [B9] = 'some'
UPDATE [str1$B9:B10] SET [str1$B9:B10] = 'some'

не проходит :(
...
Рейтинг: 0 / 0
21.12.2006, 01:08:11
    #34214762
AndrF
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
vbs & excel - а если на сервере не стоит офис?
zodchiy_gigas
Код: plaintext
1.
2.
Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="& SourceXLS & ";Extended Properties=""Excel 8.0;HDR=Yes;IMEX=1""" 
Conn.Execute "select * from [str1$a9:a10]" 
выбирает, но как обратится к результату выборки?

При HDR=Yes;IMEX=1 значения первой строки диапазона рассматриваются как имена полей Recordset-a,
при HDR=No;IMEX=2 - все строки диапазона данные, а имена полей F1, F2, F3...
...
Рейтинг: 0 / 0
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / vbs & excel - а если на сервере не стоит офис? / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]