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

Компьютерный форум 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

 

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


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

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


Изображения
Тип файла: jpg Безымянный.jpg
(334.5 Kb, 4 просмотров)

Цитата Iska:
Опишите/продемонстрируйте, как Вы его запускаете. »
Я ваш код скопировал в текстовый файл сохранил как vbs и при запуске такая ошибка. Видимо я что-то опустил. Я просто в wsh не силен. Что-то видимо нужно где-то еще дополнительно указать, чего я не сделал как я понял

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



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

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


Ветеран


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

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


Цитата romfus:
Я ваш код скопировал в текстовый файл сохранил как vbs »
Здесь правильно.

Цитата romfus:
и при запуске такая ошибка. »
Это сообщение о том, как следует осуществлять запуск скрипта правильно.

Откройте командную строку. Напишите в ней cscript.exe //nologo, добавьте пробел. Перетащите туда же скрипт из Проводника, добавьте ещё пробел. Теперь перетащите туда же из Проводника папку, в которой находятся файлы, которые требуется обработать. Нажмите Enter.

Если увидите сообщение вида «ADODB.Properties: Не удается найти указанный поставщик. Вероятно, он установлен неправильно» и у Вас x64 ОС — пишете не просто cscript.exe, а %SystemRoot%\SysWOW64\cscript.exe и т.д.
Это сообщение посчитали полезным следующие участники:

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


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


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

Профиль | Отправить 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
Благодарности: 8086

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


romfus, Вы хотите сказать, что каталог с файлами всегда будет один и тот же? Создайте ярлык вида:
Код: Выделить весь код
C:\Windows\System32\cscript.exe //nologo "C:\Users\Alexander.Romanovski\Desktop\0001.vbs" "D:\IVC\Operators\Printer\20.04.2018"
Это сообщение посчитали полезным следующие участники:

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


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


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

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


Цитата Iska:
C:\Windows\System32\cscript.exe //nologo "C:\Users\Alexander.Romanovski\Desktop\0001.vbs" "D:\IVC\Operators\Printer\20.04.2018" »
а если созданный ярлык при запуске закрывается сразу? То есть появляется окно ввести индекс после ввода все счиытвает и моментально закрывается

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


Ветеран


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

Профиль | Отправить 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"
Если требуются какие-либо манипуляции с окном — тогда так:
Код: Выделить весь код
"%comspec%" /k"C:\Windows\System32\cscript.exe //nologo "C:\Users\Alexander.Romanovski\Desktop\0001.vbs" "D:\IVC\Operators\Printer\20.04.2018""
romfus, общий принцип и вид вывода — это то, что Вам требовалось? Более ничего менять/настраивать не надо?
Это сообщение посчитали полезным следующие участники:

Отправлено: 15:43, 20-04-2018 | #16


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


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

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


Все отлично. Спасибо!

Отправлено: 18:54, 20-04-2018 | #17


Ветеран


Contributor


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

Профиль | Отправить 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



Компьютерный форум 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




 
Переход