У меня есть книга Excel, в которой используется горячая клавиша, которая запускает командный файл, который запускает Node-скрипт, который обновляет CSV-файл. Технические подробности см. Ниже.
Рабочая книга использует файл CSV в качестве источника данных. Я могу вручную обновить рабочую книгу данными из файла CSV, перейдя на Data > Refresh All > Refresh All
.
Есть ли способ запустить обновление в рабочей книге, если в CSV-файле появились новые данные, или когда пакетный файл заканчивается? Концептуально я спрашиваю, как внешнее событие может вызвать что-то в Excel.
Вот мелкие детали процесса:
При нажатии горячей клавиши в книге Excel она запускает консоль MS («cmd.exe») и передает местоположение запускаемого пакетного файла и значение выбранной ячейки. Причина, по которой пакетный файл запускается таким образом, вероятно, не относится к этому вопросу, но я знаю, что он будет задан, поэтому я объясню: пакетный файл должен находиться в том же каталоге, что и рабочая книга, а это не так. жестко закодированное местоположение. Проблема в том, что при запуске batch-файла / cmd.exe по умолчанию будет работать рабочий каталог C: \ users \ name \ documents. Таким образом, чтобы запустить пакетный файл в том же каталоге, что и рабочая книга, путь к рабочей книге передается в cmd.exe следующим образом: CD [path]
, который затем объединяется в линию с другой командой для запуска пакетного файла со значениемвыбрана ячейка в качестве аргумента, например, так: CD [path] & batch.bat cellValue
Все еще со мной?
Затем пакетный файл запускает скрипт Node, снова с выбранным значением ячейки в качестве аргумента.
Сценарий Node извлекает данные из Интернета и выгружает их в файл CSV.
На данный момент рабочая книга все еще содержит устаревшие данные и нуждается в обновлении. Как это может быть автоматическим?
Я мог бы просто запустить статический таймер в VBA после запуска пакетного файла, который затем запускается ActiveWorkbook.RefreshAll
, но если пакетный файл занимает слишком много времени, возникнут проблемы.