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

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

Код: 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
vbs & excel - а если на сервере не стоит офис?
    #33558191
Дмит
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Однажды обращался (только через DAO) так:
Set rsRst = myDB.OpenRecordset("select distinct * from `TABS`")
где TABS имя диапазона на листе.
...
Рейтинг: 0 / 0
vbs & excel - а если на сервере не стоит офис?
    #33558351
Фотография k-nike
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. Если там не стоит Office, как же ты запустишь там VBA?

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

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

Там есть естественно ODBC - а ODBC, это вроде один из инструментов ADO
...
Рейтинг: 0 / 0
vbs & excel - а если на сервере не стоит офис?
    #33558448
zodchiy_gigas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ДмитОднажды обращался (только через DAO) так:
Set rsRst = myDB.OpenRecordset("select distinct * from `TABS`")
где TABS имя диапазона на листе.
а к определенной ячейке как?
...
Рейтинг: 0 / 0
vbs & excel - а если на сервере не стоит офис?
    #33558467
Дмит
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот кусок старого кода:
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
vbs & excel - а если на сервере не стоит офис?
    #33558546
zodchiy_gigas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: 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
vbs & excel - а если на сервере не стоит офис?
    #33558595
zodchiy_gigas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: 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
vbs & excel - а если на сервере не стоит офис?
    #33558742
Код: 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
vbs & excel - а если на сервере не стоит офис?
    #33559052
zodchiy_gigas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
спасибо получилось, снимаю пред вами шляпу, но вот как проапдейтить запись?

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

не проходит :(
...
Рейтинг: 0 / 0
vbs & excel - а если на сервере не стоит офис?
    #34214762
AndrF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
11 сообщений из 11, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / vbs & excel - а если на сервере не стоит офис?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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