Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Страницы: 1
RSS
VBscript как узнать номер строки или номер столбца выбранной ячейки используя ACE.OLEDB и SQL запрос?
 
Использую VBscript  для чтения XLS файла на сервере без использования Excel используя библиотеку ACE.OLEDB
Как узнать номер строки или номер столбца выбранной ячейки?
Я правильно понимаю, ACE.OLEDB позволяет читать xls только через SQL запросы?
 
Доброе время суток
Цитата
Alex_Dom написал:
выбранной ячейки
Что это. Детализируйте.
 
Вот пример.
Код
'Читаем данные из 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 получить номер строки этой ячейки а не данные из неё?

 
Цитата
Alex_Dom написал:
этой ячейки
Какой этой? Чем отличается этой от выбранной? Если вы про
Цитата
Alex_Dom написал:
rs.MoveNext
, то добавьте переменную счётчик числа просмотренных строк - будете знать какая строка. Но вот вопрос, а если вы задали SQL запрос
Код
SELECT * FROM CustomerName Order By FirstName
то какой будет смысл для вас в номере строки? Нет в SQL понятий номера строки, есть стоящий за каждой строкой смысл - первичный ключ.
 
Alex_Dom, Смотрите что в комментариях ,
Цитата
'Читаем данные из XLS файла
- это означает что читаем именно данные, а не условные адреса. Следовательно через ADO никак. Ну или , если известны листы, то после того как получили значение именованной ячейки, делать еще один запрос, но на весь лист типа SELECT * FROM [Лист1$] и искать в RS перебором значение по всем полям, в надежде что оно уникальное. Индекс цикла покажет номер строки.
Хот я я не гарантирую что нет трюка который позволит получить адрес диапазона.
Изменено: БМВ - 9 сен 2019 12:17:39
По вопросам из тем форума, личку не читаю.
 
Эх...
В VBA всё было проще
Код
i = Range("CustomerName").Row
Нельзя на сервер использовать Excel.Application, нужно через какуюнибудь библиотеку читать xls файл
Видимо через ACE.OLEDB мне никак не получится получить номер строки нужной ячейки.
Значение ячейки не уникально :(

Может посоветуете какую библиотеку для чтения xls без экселя?
 
Цитата
Alex_Dom написал:
i = Range("CustomerName").Row
А какой смысл в этом номере строки - ну получили, а дальше то что?
Цитата
Alex_Dom написал:
нужно через какуюнибудь библиотеку читать xls файл
Поставьте Python, например, и нужные библиотеки, да работайте.
 
Я в экселе использую именнованные ячейки с конкретной целью - не переписывать скрипты, в случае изменения верстки экселевского файла (поменялось положение ячейки с B1 на J1 - лезь в код).
Не использовать именованные ячейки, это как книгу на 96 полос верстать, или дипломную работу в ворде, не используя стили.

Мне требуется вывести данные из таблицы, количество строк в которой неизвестно, но известно что она начинается с ячейки CustomerName.

На сервере можно запустить шел/JScript/VBscript
Они запускаются модулем серверной программы. Которая в скрипт еще и внутренние переменные данные передаёт.
 
Цитата
Alex_Dom написал:
Я в экселе использую именнованные ячейки с конкретной целью - не переписывать скрипты, в случае изменения верстки экселевского файла (поменялось положение ячейки с B1 на J1 - лезь в код).
Тогда вынужден вас огорчить. SQL движок Provider=Microsoft.ACE.OLEDB.12.0 работает только с нормализованными таблицами данных (впрочем, все движки SQL исходят из такой структуры данных). Поэтому никакой абсолютной адресации в рамках строк/столбцов рабочего листа его средствами вы не получите.
 
Андрей VG, не подскажите ли бесплатную библиотеку по работе с xls файлами?
Мне по сути то требуется - экспорт в XML или CSV. Конечно, хотелось бы сразу в нормальном виде. Но можно и потом XML/CSV переделать.

Может есть волшебный способ из VBScript запускать скрипты на питоне?
Изменено: Alex_Dom - 9 сен 2019 14:06:41
 
Alex_Dom, Сделайте лист (скрытый) с формулами которые ссылаются на диапазон именованный и выдают номер строки, номер столбца, количество строк , количество столбцов … и берите его от туда, раз уж так хочется использовать имя. Это может быть тоже именованный диапазон с набором параметров
Name,Row,Column,Rows,Columns .
JobNamber, =Row(JobNamber), =COLUMN(JobNamber), =ROWS(JobNamber), =columns(JobNamber)
...
Изменения элементарны и простым запросом все значения  или то что интересует можно получить тем же SQL запросом.
По вопросам из тем форума, личку не читаю.
 
Это действительно - выход.
Но что делать со старыми файлами, где нет такого листа?

Получилось запустить питон из VBS. Осталось подобрать библиотеку, и прикрутить передачу параметров из VBS в скрипт питона.
Ну и с синтаксисом питона покопаться в доках
 
Ну есть еще PowerShell
https://www.powershellgallery.com/packages/PSExcel/1.0.2
По вопросам из тем форума, личку не читаю.
Страницы: 1
Читают тему (гостей: 2)
Наверх