По системе раскидано куча excell файлов с vbs скриптов внутри каждого. Там простой скрипт: по нажатию на кнопку, берётся список файлов из определённой папки и запихивается в дроп-лист определённой клетки. Проблема в том, что поменялся путь/адрес доя папки. Что бы скрипт работал, нужно открывать редактор в экселе и менять переменную
Есть ли возможность как-то автоматически пройтись по всем экселевским файлам, и при условии что внутри Y скрипт, внести в него изменения (в коде), ну или заменить его на другой (наверное как вариант удалить внутренний и импортировать BAS файл)
Как такое можно осуществить? На чём? Знаю Python, но не могу подобрать нужной библиотеки для этого. Всё что нашел, не позволяет VBS редактировать
Это действительно - выход. Но что делать со старыми файлами, где нет такого листа?
Получилось запустить питон из VBS. Осталось подобрать библиотеку, и прикрутить передачу параметров из VBS в скрипт питона. Ну и с синтаксисом питона покопаться в доках
Андрей VG, не подскажите ли бесплатную библиотеку по работе с xls файлами? Мне по сути то требуется - экспорт в XML или CSV. Конечно, хотелось бы сразу в нормальном виде. Но можно и потом XML/CSV переделать.
Может есть волшебный способ из VBScript запускать скрипты на питоне?
Я в экселе использую именнованные ячейки с конкретной целью - не переписывать скрипты, в случае изменения верстки экселевского файла (поменялось положение ячейки с B1 на J1 - лезь в код). Не использовать именованные ячейки, это как книгу на 96 полос верстать, или дипломную работу в ворде, не используя стили.
Мне требуется вывести данные из таблицы, количество строк в которой неизвестно, но известно что она начинается с ячейки CustomerName.
На сервере можно запустить шел/JScript/VBscript Они запускаются модулем серверной программы. Которая в скрипт еще и внутренние переменные данные передаёт.
Нельзя на сервер использовать Excel.Application, нужно через какуюнибудь библиотеку читать xls файл Видимо через ACE.OLEDB мне никак не получится получить номер строки нужной ячейки. Значение ячейки не уникально
Может посоветуете какую библиотеку для чтения xls без экселя?
'Читаем данные из XLS файла
Dim connStr, objConn, getNames
connStr = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & inputFile & ";Extended Properties=""Excel 12.0 xml;HDR=No;IMEX=2;"";"
Set objConn = CreateObject("ADODB.Connection")
'Open Connection
objConn.open connStr
'Define recordset and SQL query
'тут мы через SQL запрос вытаскиваем данные из ИМЕННЫХ ячеек экселевского файла. Всё это в массив
Set rs = objConn.execute("SELECT * FROM JobNamber,CustomerName,CutTools")
'присваиваем значения переменным из массива
DO WHILE NOT rs.EOF
JobNamber = rs.Fields(0)
CustomerName = rs.Fields(1)
CutTools = rs.Fields(2)
rs.MoveNext
Loop
'Close connection XLS and release objects
objConn.Close
Set rs = Nothing
Set objConn = Nothing
Собственно, если я делаю запрос
Код
Set rsRow = objConn.execute("SELECT * FROM CustomerName")
Как мне в rsRow получить номер строки этой ячейки а не данные из неё?
Использую VBscript для чтения XLS файла на сервере без использования Excel используя библиотеку ACE.OLEDB Как узнать номер строки или номер столбца выбранной ячейки? Я правильно понимаю, ACE.OLEDB позволяет читать xls только через SQL запросы?
'Получение данных из базы данных
Dim cmd As ADODB.Command 'переменная в которой будет запрос
Set cmd = New ADODB.Command
Dim rec As ADODB.Recordset 'переменная в которой будет результат запроса
Set rec = New ADODB.Recordset
Dim test As String
Set cmd.ActiveConnection = oConn 'указываем соединение из примера выше
cmd.CommandText = "SELECT * FROM tools WHERE IDCUT= 'A1014'" 'собственно, запрос
cmd.CommandType = adCmdText
cmd.Execute
rec.Open cmd
With rec
test = .Fields("HPrint").Value
test1 = .Fields("Vsheet").Value
End With
Не подскажите, нужно ли как-то закрывать соединение с БД? У меня же к БД будут подключаться и другие пользователи с запросами.
И как в запрос вставить переменную? Т.е. вместо A1014 подставить переменную CutTools
' Собственно, попробовать подключиться к БД:
Dim oConn As Object
Set oConn = New ADODB.Connection
oConn.Open "DRIVER={MySQL ODBC 3.51 Driver};" & _
"SERVER=localhost;" & _
"DATABASE=pp_cut;" & _
"UID=root;" & _
"PASSWORD=;" & _
"PORT:3306;" & _
"charset=cp1251;" & _
"Option=3;"
'Получение данных из базы данных
Dim cmd As ADODB.Command 'переменная в которой будет запрос
Set cmd = New ADODB.Command
Dim rec As ADODB.Recordset 'переменная в которой будет результат запроса
Set rec = New ADODB.Recordset
Dim test As String
Set cmd.ActiveConnection = oConn 'указываем соединение
cmd.CommandText = "SELECT HDist FROM tools WHERE IDCUT= 'A1014'" 'собственно, запрос
cmd.CommandType = adCmdText
Set rec.ActiveConnection = oConn
rec.Open cmd
oConn.Close
Брал из примера
Собственно, вот в чём вопрос: У меня порядка 8 столбцов в таблице. По запросу нужно найти строку в столбце IDCUT = некой переменной. Далее из результата (у нас же выходит одна строка) нужно столбцы в переменные записать. Например переменная test = колонке 'HPrint', test1 = Vsheet
Sub SQLQuery_1()
Dim varConn As String
Dim varSQL As String
Range("A1").CurrentRegion.ClearContents
varConn = "ODBC;DBQ=\\Server-esko\ae_base\BD_CutTools.mdb;Driver={Driver do Microsoft Access (*.mdb)}"
varSQL = "SELECT HCountItem FROM cut_tools WHERE cut_name='A141'"
With ActiveSheet.QueryTables.Add(Connection:=varConn, Destination:=Cells(1, 1))
.FieldNames = False
.CommandText = varSQL
.Name = "Query-39008"
.Refresh BackgroundQuery:=False
End With
End Sub
Использую VBA скрипт в Excel для вставки в ячейку таблицы Excel данных по SQL запросу из БД Access (файл mdb). Вот сам скрипт. Он работает:
Код
Sub SQLQuery_1()
Dim varConn As String
Dim varSQL As String
Range("A1").CurrentRegion.ClearContents
varConn = "ODBC;DBQ=\\Server-esko\ae_base\BD_CutTools.mdb;Driver={Driver do Microsoft Access (*.mdb)}"
varSQL = "SELECT HCountItem FROM cut_tools WHERE cut_name='A141'"
With ActiveSheet.QueryTables.Add(Connection:=varConn, Destination:=Cells(1, 1))
.CommandText = varSQL
.Name = "Query-39008"
.Refresh BackgroundQuery:=False
End With
End Sub
Проблема в том, что в Excel вставляется помимо результата SQL запроса, еще и название столбца(ов) Access. Как сделать что бы не вставлялись названия столбцов?
Помогли с решением на другом форуме. Выкладываю. Вдруг кому-то пригодится.
Код
i = Range("FirstID").Row 'возвращаем номер строки первой ячейки в таблице дизайнов
With CreateObject("scripting.dictionary")
.comparemode = vbTextCompare 'не различать регистр
Do
.Item(Cells(i, 2) & vbTab & Cells(i, 3)) = Cells(i, 1)
i = i + 1
Loop Until Cells(i, 2) = "" 'пока не будет пустой ячейки с именем файла
For Each x In .keys
Set FILE = xml.createElement("File")
FILE.setAttribute "ID", .Item(x)
FILE.Text = Split(x, vbTab)(0) ' название файла
FILE.setAttribute "Angle", Split(x, vbTab)(1) ' угол поворота
objRoot.appendChild FILE
Next
End With
Экспортирую её в XML. Последовательно дважды формируется XML. Сначала все строки в определенном формате без угла поворота, только название файла, потом второй блок XML где нужно и название файла, и угол поворота. НО! во втором блоке нужны значения строк без дублей (если название файла и угол одной строки совпадает с другой, то объединить) . Файл приложил.