Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] CMD/BAT - Скрипт, который считывает количество данных из разных таблиц Excel

Ответить
Настройки темы
CMD/BAT - [решено] CMD/BAT - Скрипт, который считывает количество данных из разных таблиц Excel

Пользователь


Сообщения: 72
Благодарности: 0

Профиль | Отправить PM | Цитировать


Добрый день. Вот такая задачка. Имеются несколько десятков excel файлов с разными именами 34S_1 - 999999_19.04.2018_14.xls, 34S_400000 - 400138_19.04.2018_1.xls, 34S_400139 - 404622_19.04.2018_9.xls например. В каждой из этих таблиц имеются данные ( индекса городов ) Можно ли сделать так чтобы при запуске скрипта выводилось сообщение - Введите индекс и после ввода индекса выводилось количество данных с этим индексом со всех xls файлов? Думаю имена файлов xls неважно? Достаточно просто с:/путь/*.xls указать

Отправлено: 14:04, 19-04-2018

 

Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Цитата romfus:
Думаю имена файлов xls неважно? Достаточно просто с:/путь/*.xls указать »
То есть, подразумевается, что мы перебираем все Рабочие книги в указанном каталоге, так?

Цитата romfus:
Имеются несколько десяткой excel файлов »
Упакуйте несколько образцов файлов в архив и приложите к сообщению, либо выложите на обменник/Яндекс.Диск.

Цитата romfus:
выводилось количество данных с этим индексом »
Что подразумевается под «количеством данных»?

Отправлено: 14:08, 19-04-2018 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Пользователь


Сообщения: 72
Благодарности: 0

Профиль | Отправить PM | Цитировать


Вложения
Тип файла: xls 34S_1 - 999999_30.03.2018_71.xls
(83.0 Kb, 4 просмотров)

Вот пример одного файла, структура у них у всех одинакова. Так да, перебираем все рабочие книги. Посмотрите пример файла, думаете поймете о чем я. В файле много индексов. вводим один индекс и скрипт считывает сколько раз этот индекс повторился в книге и выдает количество

Отправлено: 14:15, 19-04-2018 | #3


Пользователь


Сообщения: 72
Благодарности: 0

Профиль | Отправить PM | Цитировать


Вложения
Тип файла: xls 34S_400000 - 400138_30.03.2018_1.xls
(79.5 Kb, 2 просмотров)

вот 2 файл для примера

Отправлено: 14:23, 19-04-2018 | #4


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Цитата romfus:
Вот пример одного файла, »
Ну, почему, почему всегда одно и то же, одно и то же. Вам так сложно упаковать несколько разных файлов в архив и выложить?


Цитата romfus:
повторился в книге »
Вы хотели сказать «в книгах»?

Ну, вот как-то так я себе это представляю (на WSH):
Скрытый текст
Код: Выделить весь код
Option Explicit

Const adOpenStatic     = 3
Const adLockOptimistic = 3
Const adCmdText        = 1


Dim strSourceFolder
Dim strPostCode

Dim objFSO
Dim objFile

Dim objConnection
Dim objCatalog
Dim objTable
Dim objRecordset

Dim intTotalOccuped


If WScript.Arguments.Count = 1 Then
	strSourceFolder = WScript.Arguments.Item(0)
	
	Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
	
	If objFSO.FolderExists(strSourceFolder) Then
		strPostCode = "123456"
		strPostCode = InputBox("Введите почтовый индекс:", "Введите почтовый индекс", strPostCode)
		
		Set objConnection = WScript.CreateObject("ADODB.Connection")
		Set objRecordset  = WScript.CreateObject("ADODB.Recordset")
		Set objCatalog    = WScript.CreateObject("ADOX.Catalog")
		
		WScript.Echo "Почтовый индекс [" & strPostCode & "] встречается в:"
		WScript.Echo "------------------------------------------------------------------"
		
		intTotalOccuped = 0
		
		For Each objFile In objFSO.GetFolder(strSourceFolder).Files
			If StrComp(objFSO.GetExtensionName(objFile.Name), "xls", vbTextCompare) = 0 Then
				WScript.Echo "[" & objFile.Path & "]"
				
				With objConnection
					.Provider = "Microsoft.Jet.OLEDB.4.0"
					.Properties.Item("Extended Properties").Value = "Excel 8.0;HDR=Yes;IMEX=1"
					.Open objFile.Path
					
					objCatalog.ActiveConnection = objConnection
					
					For Each objTable In objCatalog.Tables
						If StrComp(objTable.Type, "TABLE", vbTextCompare) = 0 Then
							With objRecordset
								.Open "SELECT indexto FROM [" & objTable.Name & "] WHERE indexto = '" & strPostCode & "'", objConnection, adOpenStatic, adLockOptimistic, adCmdText
								intTotalOccuped = intTotalOccuped + .RecordCount
								WScript.Echo vbTab & "[" & objTable.Name & "] - " & .RecordCount & " раз(а)"
								.Close
							End With
						End If
					Next
					
					objCatalog.ActiveConnection = Nothing
					
					.Close
				End With
			End If
		Next
		
		WScript.Echo "------------------------------------------------------------------"
		WScript.Echo "Всего " & intTotalOccuped & " раз(а)"
		
		Set objCatalog    = Nothing
		Set objRecordset  = Nothing
		Set objConnection = Nothing
	Else
		WScript.Echo "Source folder [" & strSourceFolder & "] not found."
		WScript.Quit 2
	End If
Else
	WScript.Echo "Usage: cscript.exe //nologo """ & WScript.ScriptFullName & """ <Source folder>"
	WScript.Quit 1
End If

WScript.Quit 0


Путь к целевому каталогу указывается аргументом скрипта. Скорректируйте строку подключения под Ваш драйвер OLEDB. В случае x64 ОС и x86 версии драйвера (как, например, в моём примере) используйте x86-версию исполнителя cscript.exe из каталога %SystemRoot%\SysWOW64.

Последний раз редактировалось Iska, 20-04-2018 в 06:24. Причина: В связи с выкладыванием второго файла претензии сняты.

Это сообщение посчитали полезным следующие участники:

Отправлено: 16:04, 19-04-2018 | #5


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Поправил недоработку в предыдущем сообщении, оставшуюся от отладки (не везде заменил прямой константный путь на переменную strSourceFolder).

Отправлено: 06:26, 20-04-2018 | #6


Пользователь


Сообщения: 72
Благодарности: 0

Профиль | Отправить PM | Цитировать


Спасибо. Что-то у меня cscript не запускается.

Отправлено: 14:20, 20-04-2018 | #7


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Цитата romfus:
Что-то у меня cscript не запускается. »
Продемонстрируйте.

Отправлено: 14:23, 20-04-2018 | #8


Пользователь


Сообщения: 72
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата Iska:
Продемонстрируйте. »
Iska, я скорее всего неправильно понял что-то. При запуске скрипта выдает Echo "Usage: cscript.exe //nologo """ & WScript.ScriptFullName & """ <Source folder>"

Отправлено: 14:29, 20-04-2018 | #9


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Цитата romfus:
выдает Echo "Usage: cscript.exe //nologo """ & WScript.ScriptFullName & """ <Source folder>" »
В сказки не верю. Покажите скриншот.

Цитата romfus:
При запуске скрипта »
Опишите/продемонстрируйте, как Вы его запускаете.

Отправлено: 14:38, 20-04-2018 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] CMD/BAT - Скрипт, который считывает количество данных из разных таблиц Excel

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
MySQL - Join таблиц из разных БД Okot Программирование и базы данных 2 25-01-2018 01:37
CMD/BAT - [решено] Как определить количество установленной памяти в ХР с помошью .cmd .bat? xaosxaos Скриптовые языки администрирования Windows 17 28-03-2017 23:57
2003/XP/2000 - Печать таблиц из Excel в альбомном формате ReakT Microsoft Office (Word, Excel, Outlook и т.д.) 3 22-07-2015 11:10
2010 - [решено] Импорт данных таблиц excel в документе word sov44 Microsoft Office (Word, Excel, Outlook и т.д.) 3 22-04-2015 08:20
MySQL как выбрать 3 значения из разных таблиц? benya Вебмастеру 5 28-07-2005 17:02




 
Переход