|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] CMD/BAT - Скрипт, который считывает количество данных из разных таблиц Excel |
|
CMD/BAT - [решено] CMD/BAT - Скрипт, который считывает количество данных из разных таблиц Excel
|
Пользователь Сообщения: 72 |
Профиль | Отправить 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 |
Пользователь Сообщения: 72
|
Профиль | Отправить PM | Цитировать Цитата Iska:
|
|
Отправлено: 14:43, 20-04-2018 | #11 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата romfus:
Цитата romfus:
Откройте командную строку. Напишите в ней cscript.exe //nologo, добавьте пробел. Перетащите туда же скрипт из Проводника, добавьте ещё пробел. Теперь перетащите туда же из Проводника папку, в которой находятся файлы, которые требуется обработать. Нажмите Enter. Если увидите сообщение вида «ADODB.Properties: Не удается найти указанный поставщик. Вероятно, он установлен неправильно» и у Вас x64 ОС — пишете не просто cscript.exe, а %SystemRoot%\SysWOW64\cscript.exe и т.д. |
||
Отправлено: 14:54, 20-04-2018 | #12 |
Пользователь Сообщения: 72
|
Профиль | Отправить PM | Цитировать Цитата Iska:
R34ROMANOVSKIY4 C:\Users\Alexander.Romanovski>cscript.exe //nologo C:\Users\Alexander.Romanovski\Des ktop\0001.vbs D:\IVC\Operators\Printer\20.04.2018 Закрепить в самом скрипте? чтобы при запуске сразу выводилось окно с просьбой ввести индекс? |
|
Отправлено: 15:01, 20-04-2018 | #13 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать |
Отправлено: 15:08, 20-04-2018 | #14 |
Пользователь Сообщения: 72
|
Профиль | Отправить PM | Цитировать Цитата Iska:
|
|
Отправлено: 15:17, 20-04-2018 | #15 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата romfus:
Попробуйте задать такую строку в ярлыке: "%comspec%" /c"C:\Windows\System32\cscript.exe //nologo "C:\Users\Alexander.Romanovski\Desktop\0001.vbs" "D:\IVC\Operators\Printer\20.04.2018" & pause" romfus, общий принцип и вид вывода — это то, что Вам требовалось? Более ничего менять/настраивать не надо? |
|
Отправлено: 15:43, 20-04-2018 | #16 |
Пользователь Сообщения: 72
|
Профиль | Отправить PM | Цитировать Все отлично. Спасибо!
|
Отправлено: 18:54, 20-04-2018 | #17 |
Ветеран Сообщения: 2708
|
Профиль | Отправить PM | Цитировать romfus, Я, наверное, лезу не в своё дело, но постановку задачи я переосмыслил.
Я написал vbs-скрипт, который объединит в одну все Ваши таблицы,
inName = "Z:\Soft_In" With WScript.Arguments If .Count <> 0 Then inName = .Item(0) End With Set FSO = CreateObject("Scripting.FileSystemObject") On Error Resume Next Set nDir = FSO.GetFolder(inName) If Err.Number <> 0 Then MsgBox inName + vbCrLf + Err.Description WScript.Quit 1 End If On Error GoTo 0 Tit = Array("num", "indexto", "region", "area", "city", "adres", "adresat", "mass", "value", "payment", "comment") NTit = UBound(Tit) - LBound(Tit) inExt = "xls" Rng1 = "A1" Rng2 = "B1" Set AllFiles = nDir.Files With CreateObject("Excel.Application") .Visible = True .Workbooks.Add CN = .Range(Rng1).Offset(0, NTit).Address .Range(Rng1 + ":" + CN).Value = Tit Cont = .Range(Rng2) ii = 0 For Each iFile In AllFiles If LCase(inExt) = LCase(FSO.GetExtensionName(iFile)) Then .Workbooks.Open (iFile) i = 0 If .Range(Rng2) = Cont Then Do If Trim(.Range(Rng2).Offset(i + 1, 0)) = "" Then Exit Do i = i + 1 Loop R0 = .Range(Rng1).Offset(1, 0).Address RN = .Range(Rng1).Offset(i, NTit).Address Mas = .Range(R0 + ":" + RN) End If .ActiveWorkbook.Close .Range(R0 + ":" + RN).Offset(ii, 0).NumberFormat = "@" .Range(R0 + ":" + RN).Offset(ii, 0) = Mas ii = ii + i End If Next R0 = .Range(Rng2).Offset(1, 0).Address RN = .Range(Rng2).Offset(ii, 0).Address RF = .Range(Rng2).Offset(ii + 1, 0).Address .ActiveWindow.SplitRow = 1 .ActiveWindow.FreezePanes = True .Columns("A:A").EntireColumn.AutoFit .Range(Rng2).AutoFilter .Range(RF).FormulaLocal = "=ПРОМЕЖУТОЧНЫЕ.ИТОГИ(3;" + R0 + ":" + RN + ")" .Rows(CStr(.Range(Rng2).Row)).Insert (xlDown) .Range(Rng2).FormulaLocal = "=" + .Range(RF).Offset(1, 0).Address End With Что плохо в этом решении: конечно, сборка отработает медленнее. Я не знаю, сколько строк получится в итоговой таблице. Что хорошо: после сборки при необходимости выборки нескольких индексов этот процесс быстр и удобен. Плюс, имеем полную инфу по каждому адресату. Можем выбирать сразу несколько индексов и подсчитывать их количество. Можем выбрать инфу и по другому полю. Обрабатываемую папку можно указать явно, например, как сейчас: inName = "Z:\Soft_In" (пропишИте своё!). Однако, если при запуске скрипта папку указать в аргументе, то возьмётся не явное описание из текста скрипта, а то, что в аргументе. Как следствие, на этот скрипт можно создать, например, на рабочем столе значок, и затягивать на него из проводника нужную папку . |
------- Последний раз редактировалось megaloman, 21-04-2018 в 16:16. Отправлено: 15:56, 21-04-2018 | #18 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
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 |
|