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

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

Ответить
Настройки темы
Любой язык - [решено] Скрипт, который открывает и закрывает в назначенное время файл Excel

Старожил


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

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


Всем привет!
Не могли бы написать скрипт, который будет открывать в назначенное время файл Excel, а через десять минут после открытия закрывать.
Например, в коде перечислить определенные даты и время, в которые надо открыть файл.

28.12.20 12:30
28.12.20 19:45
30.12.20 2:35
30.12.20 5:10
02.01.21 14:00
02.01.21 16:32
04.01.21 19:30
04.01.21 21:10

C:\Users\Администратор\Desktop\Новая папка\Лист Excel.xlsx

Отправлено: 20:24, 27-12-2020

 

Старожил


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

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


Цитата Iska:
закрытие — здесь лишнее. Последнее должно быть предоставлено макросу. »
Согласен. Открытие за скриптом, все остальное - макросом

Отправлено: 05:09, 04-01-2021 | #11



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

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


(*.*)


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

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


Цитата v79italya:
Про планировщик знаю, но хотел бы скриптом это проделывать. »
Объясните, почему вы хотите странного.То есть вы бы хотели, чтобы скрипт всегда висел запущенный и проверял заданное вами время каждые N минут? А если скрипт зависнет или пользователь закроет, что тогда?

Я вот не представляю, как будет работать вариант запуска по времени от DJ Mogarych. В смысле, я представляю, что надо в нем допиливать ради вашей странной хотелки.

-------
Канал Windows 11, etc | Чат @winsiders

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

Отправлено: 09:58, 04-01-2021 | #12


Аватара для DJ Mogarych

fascinating rhythm


Moderator


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

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


Ну, по идее, скрипт в этом варианте надо запускать в планировщике каждую минуту.
А вообще, конечно, в скрипт нужно перенести всё то, что делает макрос, чтобы решение было не таким костыльным.

-------
Powershell 7.x | Powershell 5.1 | ffmpeg (docs)

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

Отправлено: 10:12, 04-01-2021 | #13


(*.*)


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

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


Цитата DJ Mogarych:
о идее, скрипт в этом варианте надо запускать в планировщике каждую минуту. »
Ну вот и получается, что если все равно через планировщик, то проще создать задание с триггерами на запуск в конкретное время, чем гонять ежеминутно :)

-------
Канал Windows 11, etc | Чат @winsiders

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

Отправлено: 11:58, 04-01-2021 | #14


Старожил


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

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


Цитата Vadikan:
вы бы хотели, чтобы скрипт всегда висел запущенный и проверял заданное вами время каждые N минут? »
Да, пусть висит. Что он много памяти жрет? У меня в трее все время значек блютуз висит, а я ни разу не сокрушался.
Цитата Vadikan:
А если скрипт зависнет или пользователь закроет, что тогда? »
Пусть тоже в трее какой нибудь значок висит. Нет значка - значит закрылся скрипт, покраснел значок - значит завис.
Цитата DJ Mogarych:
скрипт в этом варианте надо запускать в планировщике каждую минуту.
А вообще, конечно, в скрипт нужно перенести всё то, что делает макрос »
Можно запускать каждые десять минут и отслеживать ближайшую точку времени - если до нее меньше десяти минут, то запустить открытие файла.
Мне в скрипт переносить всю работу макроса не надо. Причина: не разбираюсь в скриптах и ничего без помощи не смогу сделать. К тому же в файле может быть запрос Power Query, который обновляет макрос и сохраняет изменения.
Как то так

Отправлено: 17:39, 04-01-2021 | #15


Ветеран


Contributor


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

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


v79italya,
Вариант решения (сохраните код в файл.vbs), как Вы поставили задачу
Код: Выделить весь код
FileXlsm = "C:\Users\Администратор\Desktop\Новая папка\Лист Excel.xlsm"
FileSpis = "C:\Users\Администратор\Desktop\Новая папка\Лист Excel.xlsm.txt"
WaitSek = 600               'Подождать перед закрытием Excel (сек)
LoopSek = 60                'Цикл повтора опроса расписания (сек)
IfSek = 59                  'Точность сравнения текущего времени и времени задания (сек)

If ReadSpis(FileSpis, MasSpis) = 0 Then WScript.Quit    'Exit Sub

Do
    For Each D In MasSpis
        If IsDate(D) Then
            If Abs(DateDiff("s", Now, D)) <= IfSek Then

		Set xls = CreateObject("Excel.Application")
		xls.Visible = True  ' False
                xls.Workbooks.Open (FileXlsm)
                
                WScript.Sleep (WaitSek * 1000)
                
                xls.ActiveWorkbook.Save

                xls.ActiveWorkbook.Close
'                xls.Quit

		Set WMI = GetObject("winMgmts:").ExecQuery("SELECT * From Win32_Process WHERE Name='Excel.exe'")
		For Each P In WMI
    			P.Terminate()
		Next
                Exit For

            End If
        End If
    Next
            
    NDate = 0
    For Each D In MasSpis
        If IsDate(D) Then If DateDiff("s", Now, D) > 0 Then NDate = NDate + 1
    Next
            
    If NDate = 0 Then NDate = ReadSpis(FileSpis, MasSpis)
    If NDate > 0 Then WScript.Sleep (LoopSek * 1000)
Loop While NDate > 0

'=========================================================

Function ReadSpis(FileSpis, MasSpis)
    ReadSpis = 0
    With CreateObject("Scripting.FileSystemObject")
        On Error Resume Next
        Set fIn = .OpenTextFile(FileSpis, 1, False)
    
        Err.Number = 0
        MasSpis = Split(fIn.ReadAll, vbCrLf)
        fIn.Close
            
        If Err.Number = 0 Then
            For Each D In MasSpis
                If IsDate(D) Then If DateDiff("s", Now, D) > 0 Then ReadSpis = ReadSpis + 1
            Next
        End If
    
        On Error GoTo 0
    End With
    If ReadSpis = 0 Then MsgBox "Не удалось прочесть актуальные данные" + vbCrLf + FileSpis + vbCrLf + "Скрипт завершается"
End Function
Как это работает:
В текстовом файле есть расписание запуска Excel, например
Код: Выделить весь код
04.01.21 22:17
04.01.21 21:22
04.01.21 21:24
05.01.21 14:02
В скрипте надо указать путь к этому файлу и к запускаемому Excel-файлу. Кстати, если у Вас в Excel-файле есть макрос, не может быть у него расширение .xlsx, как Вы указали в своём вопросе.
При запуске скрипта прочитывается файл с расписанием и пока это расписание не исчерпается, этот файл перепрочитываться не будет.
Скрипт будет висеть запущенным, с заданным интервалом анализировать расписание, запускать Excel во время, близкое к расписанию с заданной погрешностью, ждёт указанное время, затем сохраняет файл, закрывает его, прекращает работу Excel.
При исчерпании расписания скрипт попытается заново прочесть файл с расписанием, если файл обновлен и в нём присутствуют времена исполнения больше текущего, скрипт продолжит работу, иначе его работа будет завершена.

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 06-01-2021 в 18:43.

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

Отправлено: 14:31, 05-01-2021 | #16


Старожил


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

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


megaloman, большое спасибо!
Попробую завтра, при свободном времени, опробовать. По описанию, я так понял, Вы в коде все предусмотрели. Без регулярного перечитывания.Даже вывод сообщений на случай ошибочных данных или завершения работы скрипта. Еще и сохранение изменений в файле. Спасибо!

Отправлено: 20:16, 05-01-2021 | #17


Старожил


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

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


megaloman, все работает!
Поначалу не мог запустить на windows 10. Не мог создать файл с расширением .vbs
Установил Notepad+, но он сохранял текстовый файл в .vb. Я еще не сразу понял и часа два возился с .vb-файлом. Потом уже в сети скачал готовый скрипт.vbs и заменил код.
Все круто! Единственное, если открыт еще файл Excel и он активный, то может закрыть вместо нужного активный. Еще реагирует на кириллицу в пути.
А так скрипт просто супер! Спасибо большое!

Отправлено: 17:00, 06-01-2021 | #18


Ветеран


Contributor


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

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


Вложения
Тип файла: zip я210105.zip
(1.1 Kb, 2 просмотров)

Цитата v79italya:
если открыт еще файл Excel и он активный, то может закрыть вместо нужного активный »
Не вместо, а вместе. Попробуйте вместо красного куска просто
Код: Выделить весь код
                xls.Quit
У меня такой вариант не всегда корректно отрабатывает.
Цитата v79italya:
Еще реагирует на кириллицу в пути. »
Скрипт должен быть сохранен в 1251 кодировке (Например, стандартный Notepad). На всякий случай, прикрепляю заархивированный скрипт в правильной кодировке.

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.

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

Отправлено: 18:55, 06-01-2021 | #19


Старожил


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

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


megaloman, попробую завтра опробовать
Спасибо!

Отправлено: 17:53, 07-01-2021 | #20



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - Bat файл, который запускает, завершает и перезапускает приложение через время. rom1798 Скриптовые языки администрирования Windows 1 31-08-2020 10:50
CMD/BAT - [решено] bat- файл, который проверил бы время изменения файла servad Скриптовые языки администрирования Windows 7 30-08-2019 12:01
CMD/BAT - [решено] CMD/BAT - Скрипт, который считывает количество данных из разных таблиц Excel romfus Скриптовые языки администрирования Windows 17 21-04-2018 15:56
CMD/BAT - Помогите написать скрипт, который отправляет наа фтп только 1 файл Sasssssssha Скриптовые языки администрирования Windows 2 13-05-2016 06:50
putty как заставить крон запускать скрипт в назначенное время? E-mail Вебмастеру 3 30-09-2005 14:46




 
Переход