Vbs создать файл excel

Обновлено: 05.07.2024

Я пытаюсь запустить макрос Excel из внешнего файла Excel. В настоящее время я использую".файл vbs " запускается из командной строки, но он продолжает говорить мне, что макрос не может быть найден. Вот сценарий, который я пытаюсь использовать

и вот макрос, к которому я пытаюсь получить доступ:

Я пробовал решения, расположенные в можно ли запустить макрос в Excel из внешних команд? чтобы получить это далеко (и, конечно, изменено), но это не казалось работа. Я продолжаю получать ошибку "Microsoft Office Excel: макрос" макрос.TestMacro ' не найден.

изменить: Excel 2003.

ок, это на самом деле просто. Предполагая, что ваш макрос находится в модуле, а не на одном из листов, вы используете:

для имени файла с пробелами заключите имя файла в кавычки.

Если вы поместили макрос под лист, скажем, sheet1, просто предположим, что sheet1 владеет функцией, что он и делает.

обратите внимание: вам не нужен макрос.нотация testfunction, которую вы использовали.

Я думаю, вы пытаетесь сделать это? (ПРОВЕРЕННЫЕ)

этот код откроет тест файла.xls и запустить макрос TestMacro который в свою очередь будет записывать в текстовый файл TestResult.txt

Я попытался адаптировать код @Siddhart к относительному пути для запуска моего open_form макрос, но, похоже, это не сработало. Это была моя первая попытка. Мое рабочее решение ниже.

редактировать

Я действительно разработал его, на всякий случай, если кто-то хочет запустить пользовательскую форму "похожую" автономное приложение:

проблемы, с которыми я столкнулся:

1 - я не хотел использовать событие Workbook_Open, поскольку excel заблокирован только для чтения. Два - Команда batch ограничена тем, что (насколько мне известно) она не может вызвать макрос.

Я сначала написал макрос для запуска моей пользовательской формы, скрывая приложение:

затем я создал vbs для запуска этого макроса (делать это с относительным путем было сложно):

и я, наконец, сделал пакетный файл для выполнения VBS.

обратите внимание, что я также включил "Set back to visible" в мой Userform_QueryClose :

в любом случае, спасибо за вашу помощь, и я надеюсь, что это поможет, если кому-то он нужен

Я пробовал вышеуказанные методы, но я получил ошибку "макрос не может быть найден". Это окончательный код, который работает!

в моем случае, MyMacro есть Лист1, Лист1 таким образом.MyMacro.

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

Excel 2010, Win 7

Если вы пытаетесь запустить макрос из своей личной книги, это может не сработать, так как открытие файла Excel с помощью VBScript автоматически не открывает ваш личный.Файл xlsb. вам нужно сделать что-то вроде этого:

таким образом, в начале цикла он открывает personals.xlsb и запуск макроса оттуда для всех других книг. Просто подумал, что я должен опубликовать здесь на случай, если кто-то столкнется с этим, как я, но не могу понять, почему макрос все еще не работает.

Hi использовал этот поток для получения решения, тогда я хотел бы поделиться тем, что я сделал, на случай, если кто-то может его использовать.

Я хотел вызвать макрос, который меняет некоторые ячейки и стирает некоторые строки, но мне нужно было более 1500 excels( примерно потратил 3 минуты на каждый файл)

в основном проблемы: - при вызове макроса из vbe я получил ту же проблему, было невозможно вызвать макрос из личного.XLSB, когда сценарий oppened excel не сделал казнить лично.xlsb и не было никакой опции в окне макроса

Небольшой топик-шпаргалка для быстрого написания скриптов для автоматической обработки документов ms office'а. А так же для помощи в преодолении синдрома чистого листа.

Как правильно заметили в недавнем топике, сама работа скрипта может быть и не быстрой, но чаще важнее сам результат, да и объёмы далеко не всегда такие большие. Зато Automation позволяет написать скрипт практически на любом языке. Здесь я выдам заготовки для JavaScript и IronPython, но, надеюсь, в комментариях найдётся место и для других языков (например, на PowerShell).

Чуть-чуть лирики

  • MS Office (если есть документы, то он, видимо, есть/будет установлен)
  • Интерпретатор выбранного языка (для JS, VBS и PowerShell этот пункт не актуален)
  • Ещё раз MS Office для подглядывание за генерацией кода в VBA (в записываемых макросах)

Собственно, код

Имхо, самый разумный вариант — это JScript или VBScript (точнее Windows script host), т.к. интерпретатор уже идёт с операционной системой, и можно раздавать скрипт друзьям/коллегам, не требуя от них никаких дополнительных действий — перетащил xls(x)-файл на скрипт в explorer'е и работа пошла:

Главный недостаток — сложно отлаживаться (только что убил полчаса на цикл for — нумерация с 0 выдавала ошибку о пропущенной точке с запятой).

Но если цель — написать быстро, а JS/VBS известны гораздо хуже родного и знакомого питона, то (IronPython):

Немного полезных фактов

Самая главная подсказка — редактор макросов в Excel. Записываем действие, которое хотим выполнить (View -> Macros -> Record macro. , имя значения не имеет), открываем его код (View -> Macros -> View macros. ) и делаем по образу и подобию. Сама запись макроса — просто набор действий, которые хочется автоматизировать. Например, вставить или изменить какое-то значение, поменять цвет/шрифт и т.п. Запись макроса лучше производить в отдельном документе, во избежание.

Для лучшей ориентации в мире объектов объектном мире Excel — система классов (тоже самое, но для Office 2010).


Необходимо преобразовать его в формат xls. Просомтрел всю документацию по VBScript, но ничего толкового не нашел.
Также половину интернета перерыл Причем необходимо, сделать так, чтобы строки в каждом блоке стали столбцами, возможно ли такое?
Пожалуйста помогите, кто чем может. Буду очень благодарен.

2 Ответ от tankist 2011-04-28 12:30:42 (изменено: tankist, 2011-04-28 12:32:11)

Доброго дня.
Имхо, проще вставить текст в Excel, предварительно его обработав в блокноте (ну там, удалить лишние пробелы, сделать пустые строки - пустыми и т.д.) и обработать текст вручную - формулами или макросом. Макрос однозначно будет проще, чем писать скрипт по "подаче" этих данных в екслель, плюс потом пакеткая обработка.
Элементарно это сделать с помощью формул. Допустим, указанные данные начинаются в ячейке A2, тогда в ячейку B2 вставляется формула:

Растягиваем на 3 столбца вправо, потом вниз, и вуаля - данные из столбца в стоках. Можно еще и проверку на 0 сделать, если количество непрерывных строк бывает разным (в указанном примере 4 строки - пробел, 4 строки - пробел):

Останется только удалить "лишние" строки, но это делается без скриптов - прочтите справку по кнопке "Выделение группы ячеек. "

// Если у носорога плохое зрение, то при его весе - это не его проблема.

3 Ответ от Pitkin 2011-04-28 13:03:59

Я так понимаю, что сам текстовый файл, просто импортировать ручками из Excel?
Просто задача состоит в том, что бы в определенное время суток автоматически выполнялся скрипт, который будет брать данные строки из текстового файла, затем переносить их в файл xls формата и выкладывать на сетевой ресурс. Все данные задачи уже решены, кроме преобразования текстового файла в файл Excel.

4 Ответ от Dmitrii 2011-04-28 13:30:02 (изменено: Dmitrii, 2011-04-28 13:34:19)

. скрипт, который будет брать данные строки из текстового файла, затем переносить их в файл xls формата <. > Все данные задачи уже решены, кроме преобразования текстового файла в файл Excel.

1. Непонятно, зачем вообще какие-то преобразования, когда уже есть сценарий, который "умеет" обрабатывать текстовый файл и формировать рабочую книгу.
2. Непонятно, зачем Вам именно формат XLS. Если только для того, чтобы файл с данными был автоматически связан с приложением Excel и распознавался им как "свой", то достаточно задать исходному текстовому файлу расширение CSV.

5 Ответ от Pitkin 2011-04-28 13:35:42 (изменено: Pitkin, 2011-04-28 13:38:29)

Да, можно сделать и так. Извините в первом посте забыл указать, что преобразование нужно с целью изменения строк в столбцы, то есть
Есть текстовый документ txt, в котором находятся данные в таком виде:
------------
Строка 1
Строка 2
Строка 3
Строка 1
Строка 2
Строка 3
Строка 1
Строка 2
Строка 3
------------
Как данный документ импортировать в excel чтобы данные приняли вид таблицы
из трех столбцов
Строка1 Строка2 Строка3
Строка1 Строка2 Строка3
. . .
Строка1 Строка2 Строка3

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

Попробую пока с формулами в самом excele поколдовать.

6 Ответ от Dmitrii 2011-04-28 13:42:44

. чтобы в самом файле csv строки автоматически становились столбцами.

Приведите содержимое текстового файла к виду
Строка 1;Строка 2;Строка 3
Строка 1;Строка 2;Строка 3
Строка 1;Строка 2;Строка 3

7 Ответ от Pitkin 2011-04-28 13:48:18 (изменено: Pitkin, 2011-04-28 13:59:20)

Эх, если бы я знал как. Если честно сказать, то это мой второй скрипт в жизни
Я вчера целый день писал код как из 300 текстовых файлов собрать все данные в один, вроде получилось
Для меня как новичка это подвиг


Правда не без помощи документации и интернета

8 Ответ от BeS Yara 2011-04-28 14:09:06

  • BeS Yara
  • Разработчик
  • Неактивен

Преобразовать в csv достаточно просто(при условии что формат файла именно такой как приведён в первом посте):

Это "скелет" - без проверок наличия файлов, папок, доступности файлов на запись.

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


Вместо вывода в консоль, пишем в ячейки(i, j тут как раз пригодятся ) используя экселевский объект.


P.S. "On Error Resume Next" есть, а где "On Error GoTo 0"? Ошибки нужно обрабатывать а не игнорировать

9 Ответ от Pitkin 2011-04-28 14:24:19 (изменено: Pitkin, 2011-04-28 14:30:03)

Спасибо, огромное, я тут поколдовал немного, и решил этот вопрос проще, в строке с моим кодом где указывается результирующий файл

Set objFile = objFSO.CreateTextFile(strFolderPath & "\AllTextFiles.txt")


Просто поменял расширение, txt на xls и о чудо, формирует xls файл.
Сейчас попробую поковырять ваш код

Я так понял, что вторая часть кода, это как раз то, что нужно для преобразования строк в столбцы?
Не могли бы вы объяснить как это работает, а то не могу понять куда этот кусок вставлять в мой код

10 Ответ от tankist 2011-04-28 14:26:27

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

Мне кажется, можно немного перефразировать задачу - создать excel файл c актуальными данными из текстового источника, требующий дополнительных операций преобразований. Есть два пути решения:
1. (Ваш) Создать скрипт, который будет выполняться по таймингу в определенное время и будет выполнять операции: (а) преобразовать данные; (б) создать xls файл; (в) выкладывать результат на определенный ресурс.
2. Создать файл c эксель импортом данных (теперь понятно, что без vba - никуда), который будет автоматически брать последние данные по запросу пользователя (например - "при открытии").

// Если у носорога плохое зрение, то при его весе - это не его проблема.

11 Ответ от tankist 2011-04-28 14:31:01

Пока неспеша "строчил" ответ, уже написали рабочий пример скрипта. BeS Yara, спасибо, мне тоже пригодится.

// Если у носорога плохое зрение, то при его весе - это не его проблема.

12 Ответ от BeS Yara 2011-04-28 14:53:17

  • BeS Yara
  • Разработчик
  • Неактивен

Просто поменял расширение, txt на xls и о чудо, формирует xls файл.


Это была шутка?
Если нет, то Вы ставите меня в тупик(состояние более известное как "разрыв шаблона").

По поводу второго куска кода, это была часть замены. Вот что подразумевалось(вчерне):

WSH: преобразуем макрос VBA в скрипт VBScrip, а также поиск по форуму на тему "Excel.Application" даст достаточно много примеров работы с Excel.

13 Ответ от Pitkin 2011-04-28 15:12:38 (изменено: Pitkin, 2011-04-28 15:29:51)

Со сменой расширения я тоже был крайне удивлен, но это действительно работает, можете опробовать
Кажется я понял, как работает ваш код, только для того, чтобы он работал нужно, чтобы присутствовал пустой файл Книга1.xls
А если будут поступать новые данные, то они будут дополняться, а не затираться, это очень удобно, спасибо огромное

P.S. С меня 83103 литра пива

14 Ответ от BeS Yara 2011-04-28 15:38:16 (изменено: BeS Yara, 2011-04-28 15:39:17)

  • BeS Yara
  • Разработчик
  • Неактивен

CreateTextFile создаёт текстовый файл. XLS - бинарный файл.
То что эксель правильно открыл переименованный текстовой файл не делает тот файл экселевским. Просто удачно сработал конвертер(excel умеет принимать текстовые форматы, хотя не всегда правильно). Переименованный csv(полученный из скрипта) открывается не совсем верно - по строке в ячейку.

Более того - если далее файл будет обрабатываться автоматически, возможны проблемы. Мне как-то подсунули таблицу сохранённую в html-виде, но с расширением XLS - я долго не мог понять почему эксель файл открывает, а скрипт нет. Пока по F3 его не посмотрел. Убил бы!

Далее:
1. наличие файла Книга1.xls не обязательно
2. он не дописывается, а перезаписывается

Скрипт открывает невидимое окно Excel, записывает туда данные, сохраняет в указанный в скрипте файл и закрывает окно Excel. Если нужно дописывать данные, то необходимо открывать этот файл, находить конец данных, и записывать дальше новые. Мой вариант этого не делает.

15 Ответ от Pitkin 2011-04-28 22:52:53

Всем огромное спасибо, за помощь и за ссылки выложенные здесь. Правда всё еще не осилил Но как говорится, учение - свет, неучение - тень. Теперь буду пытаться полностью автоматизировать процесс, чтобы данные не перезаписывались, а пополнялись сами, ну чтобы на работу ходить только в день зарплаты

P.S. BeS Yara Все равно наличие файла Книга1.xls требует, не могу понять почему, но буду разбираться, все впереди.


Еще раз всем спасибо, УДАЧИ .

16 Ответ от Slav 2011-04-29 09:34:09

.
Просто поменял расширение, txt на xls и о чудо, формирует xls файл.
.

Еще раз убедился - темы "новичков" таят много интересного.
Мне бы сделать такое даже в голову не пришло - но ведь это работает!

Может пригодиться - спасибо, Pitkin.

17 Ответ от BeS Yara 2011-04-29 12:31:19

  • BeS Yara
  • Разработчик
  • Неактивен

Pitkin, есть файл Книга1.xls - он будет перезаписан, Нет файла Книга1.xls - он будет создан. Можете пояснить что значит "Все равно наличие файла Книга1.xls требует" - в чём это проявляется?

Slav, если в первом моём примере скрипта(где вывод идёт в текстовый файл) поменять расширение на xls, то на выходе будет текстовый файл(" файл1 "):

Экселевский файл с этими-же данными будет выглядеть примерно так(кусок, все 5к приводить не буду):

РПаЎ±б >  юя       юяяя яяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяя     юяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяR o o t E n t r y   яяяяяяяя  А F а
ECМ  W o r k b o o k   яяяяяяяяяяяя

Если открыть экселем текстовый файл " файл1 ", то результат будет отнюдь не тот что ожидался - с данными будет только первая колонка, в каждой ячейки которой помещена строка. Мне кажется или это далеко от задачи описанной в первом посте?

Не говоря уже о том что всё зависит от работы(и, кстати, наличия) конвертера текстовых файлов в конкретной версии офиса. Не говоря уже о том, что ОпенОфис при открытии такого "экселевского" файла честно откроет окно импорта из текстового файла(впрочем разделители он распознал вполне корректно).

Я считаю что подобный подход в корне не верен - расширение файла должно соответствовать внутреннему формату. Одну из причин я уже писал. Предположим Ваша организация передавала смежникам экселевские отчёты, которые они обрабатывали автоматически. Теперь Вы решили процесс автоматизировать и скриптом генерируете "экселевские"(а на самом деле текстовые) отчёты. Так вот, скрипт ориентированный на работу с настоящим форматом XLS псевдо экселевские файлы не поймёт(я с этим уже сталкивался). Для начала, пройдёт некоторое время прежде чем обнаружится что данные не получаются. Потом одной из сторон прийдётся переписывать свои скрипты. Кто станет крайнем в потере оперативности из-за смены формата данных?


Если уж нет желания использовать Excell.Application(или его нет - например на сервере не установлен офис), то можно установить MSDE, и все данные сливать туда. А уже с MSDE получить экселевские отчёты элементарно - DTS Вам в помощь

18 Ответ от Slav 2011-04-29 13:34:44

.
Slav, если в первом моём примере скрипта(где вывод идёт в текстовый файл) поменять расширение на xls, то на выходе будет текстовый файл(" файл1 "):

.
Если открыть экселем текстовый файл " файл1 ", то результат будет отнюдь не тот что ожидался - с данными будет только первая колонка, в каждой ячейки которой помещена строка. Мне кажется или это далеко от задачи описанной в первом посте?
.

предлагаю еще раз внимательно посмотреть на постановку задачи.
В ней прямо сказано - каждое значение находится в одной строке.

Это Вы предлагаете преобразовать входные данные в формат csv - как раз для решения проблемы "одной строки".
А затем применить трюк с заменой на расширение xls.
Не нужно этого делать - так и читайте с расширением csv.

Я не имею ничего против Excell.Application.
Но давайте оценим разные решения с точки зрения лаконичности - ведь все гениальное просто.

Имея txt-файл с конкретной структурой с одной стороны предлагается сделать еще как минимум 2 файла: скрипт преобразования в csv и на выходе сам csv.
Второе решение - скрипт с Excell.Application, который читает данные - пишет в xls-формате.

А третье решение - назовем его "трюковое" - требует всего-то сменить расширение на xls.
И еще - давайте уж рассмотрим его до конца - небольшую макру Auto_Open в самом Excel, которая переставит значения из исходного формата в строку при открытии файла.
И которая может быть создана пользователем начального уровня в самом Excel путем "записать макро".

Я не хочу давать оценку - какое решение лучше.
Пусть каждый выберет то, которое лично ему больше нравится.
Или больше подходит в данной конкретной ситуации.

Полюбому - лучше всегда знать как можно больше вариантов, в том числе и "трюковых".
Как Вы считаете?


Удачи!

19 Ответ от BeS Yara 2011-04-29 14:01:06

  • BeS Yara
  • Разработчик
  • Неактивен

предлагаю еще раз внимательно посмотреть на постановку задачи.
В ней прямо сказано - каждое значение находится в одной строке.


Прочитал.

Необходимо преобразовать его в формат xls.
<. >
Причем необходимо, сделать так, чтобы строки в каждом блоке стали столбцами, возможно ли такое?


Так что данные нужно всё-таки транспонировать, причём разделителем результирующих строк служит пустая строка. И "заказанный" формат - XLS, а не текстовый с разделителем


Сформировать CSV предложил Dmitrii, я лишь предложил реализацию(благо код там копеешный, а у меня было свободное время). Потом, поняв уровень спрашивающего уже доделал вариант с экселем(Тут конечно код не идиален, делался полунаучным методом. Но ведь выполняет поставленную задачу )

Но давайте оценим разные решения с точки зрения лаконичности - ведь все гениальное просто.

Лаконичнее и правильнее было бы обойтись без промежуточных файлов, а формировать отчёт сразу. Если очёты требуется дополнять(возникло такое подозрение по высказываниям Pitkin-а), то я бы всё-таки перешел к хранению в БД. Там гораздо проще манипулировать данными, да и встроенные механизмы получения отчётов в разных форматах тоже присутствуют(про экспресс не уверен, но в MSDE - 100%).

Полюбому - лучше всегда знать как можно больше вариантов, в том числе и "трюковых".
Как Вы считаете?


В целом согласен(про пользу разнообразных решений). Что касается "трюков", то тут я своё отношение написал. Их полезно знать, их иногда можно использовать. Но нужно также знать из-за чего эти трюки работают - чтобы понять почему вдруг трюк перестал работать на другом компьютере Думаю что многие тут, на форуме, представляют уровень типового пользователя. Так что чем меньше будет в конечном результате зависеть от опыта работы "оператора"(того к кому попадёт трюковый отчёт), тем надёжнее решение.

Как я мог преобразовать файл XLS в файл CSV в командной строке Windows.

На машине установлен Microsoft Office 2000. Я готов установить OpenOffice, если это невозможно с помощью Microsoft Office.

Откройте Блокнот, создайте файл с именем XlsToCsv.vbs и вставьте его в:

Затем из командной строки перейдите в папку, в которой вы сохранили файл .vbs, и запустите:

Однако для этого на компьютере, на котором вы работаете, должен быть установлен Excel.

Если кому-то интересно, параметр 6 в функции oBook.SaveAs является константой для формата CSV. Прекрасно работает, и не только для файлов xls, но и xlsx. Как сказал Эндрю, пути к файлам должны быть либо абсолютными, либо в каталоге «данных» пользователя (я не уверен, каково точное имя на английском языке). Я до сих пор не понял, как это решить, я не очень много пишу vbscript! :) Ниже я разместил немного измененную версию, которая лучше обрабатывает пути к файлам. Спасибо, ScottF! Код преобразует только активный лист. Чтобы выбрать другой рабочий лист, добавьте следующую строку после oExcel.Workbooks.Open строки с желаемым индексом рабочего листа (начинается с 1): oBook.Worksheets(1).Activate Следует отметить, что этот функционал не только на xls или xlsx, но и на любом файле, который может открыть сам Excel.

Слегка измененная версия ответа ScottF, не требующая абсолютных путей к файлам:

Я переименовал скрипт в ExcelToCsv, так как этот скрипт вообще не ограничивается xls. xlsx Работает нормально, как и следовало ожидать.

Протестировано с Office 2010.

Я использую это (с небольшими изменениями) для преобразования из XML в XLS. Однако я не хочу, чтобы во время этого преобразования в Excel появлялось окно с предупреждением о совместимости. Вы знаете, как отключить это предупреждение? Есть ли способ сохранить этот файл как набор символов Unicode? Я поместил этот ответ вместе с ответом @ user565869 в Gist с простыми инструкциями. См .: Скрипт для преобразования файла Excel в CSV

Небольшое расширение отличного сценария VB от ScottF: этот командный файл будет перебирать файлы .xlsx в каталоге и выгружать их в файлы * .csv:

Примечание. Вы можете изменить расширение .xlsx на .xls, а имя скрипта ExcelToCSV на XlsToCsv.

@Rieaux: Что касается вашего комментария как редактирования: если это дает файлам двойное расширение, второй простой командный файл может их переименовать. Однако здесь возникает новый вопрос; пожалуйста, попробуйте и, если вы не можете заставить его работать, опубликуйте новый вопрос здесь, на SU. Я собрал этот ответ вместе с ответом @plang в Gist с простыми инструкциями. См .: Скрипт для преобразования файла Excel в CSV @ 10GritSandpaper Использование Excel 2007. Сценарий в вашей ссылке у меня не работал.

ni.csv", чтобы удалить расширение файла ".xls" в файлах csv.

Как насчет PowerShell?

Код должен выглядеть так, хотя не тестировался

Я провел тестовый прогон и тоже столкнулся с проблемами. Одна вещь, с которой я столкнулся, - это трудности с этим $Excel.Workbooks.Open методом. Не удалось найти указанный файл. Я работал над этим, используя Get-Item файл и подключая его к ForEach-Object циклу (что я все равно сделаю в своей окончательной реализации) для двух строк, начинающихся с $Workbook . Это устранило эту проблему, но потом я не смог найти получившийся «YOURDOC.csv» - он не находился в той же папке, что и «YOUDOC.XLS». Я вернулся к старому и надежному CMD и сделал CD /D C:\ && DIR YOURDOC.csv /s . Оказывается, файл был сохранен в Мои документы по умолчанию. Итак, вам нужно добавить в сценарий больше, если вы хотите сохранить файл в той же папке, в которой вы работаете (если она отличается от «Мои документы»).

Мне нужно было извлечь несколько резюме из разных листов, поэтому вот модифицированная версия кода plang, которая позволяет вам указать имя рабочего листа.

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

Откройте Блокнот, создайте файл с именем XlsToCsv.vbs и вставьте его в:

Как пропустить запись заголовка в целевой CSV-файл. Я абсолютно не понимаю приведенный выше сценарий, но я использую его в своей автоматизации. Спасибо. @TharunRaja Скрипт открывает файл в excel, затем выполняет «сохранить как» в CSV, как если бы вы делали это вручную, но скрывает его в фоновом режиме. Поскольку сам скрипт не выполняет преобразование, а вы его автоматизируете, я предлагаю вызвать второй скрипт для файлов csv, которые он выводит, и сообщить мне, если вам нужна помощь в создании того, который удаляет первую строку из файл вы передаете. Лично мне нужна была более мощная версия в PowerShell, которая может правильно обрабатывать даты, может обрабатывать заголовки, которые не находятся в первой строке, и еще несколько вещей (она фактически анализирует отдельные ячейки, а не доверяет Excel). Если люди выражают потребность в этом, я опубликую его, но, поскольку на этот вопрос есть ответ, и мы будем менять языки, я не хочу публиковать дубликаты.

Почему бы не написать свой?

Если вы застряли здесь, я уверен, вам помогут.

Я не думаю, что Excel Data Reader - это NIH. Прежде всего это написал кто-то другой. Во-вторых, он решил проблему лучше, чем полноценный Excel.

Вы можете сделать это с помощью Alacon - утилиты командной строки для базы данных Alasql . Он работает с Node.js, поэтому вам нужно установить Node.js, а затем пакет Alasql .

Чтобы преобразовать файл Excel в CVS (от TSV), вы можете ввести:

По умолчанию Alasql конвертирует данные из Sheet1, но вы можете изменить это с помощью параметров:

Alacon поддерживает другие типы преобразований (CSV, TSV, TXT, XLSX, XLS) и языковые конструкции SQL ( примеры см. В Руководстве пользователя ).

Если вы устанавливаете AlaSQL глобально (npm install alasql -g), вы можете просто использовать> alasql «SELECT . INTO CSV (. ) FROM XLS (. )» Недооцененный ответ. Зачем кому-либо устанавливать сторонний файл .DLL, если в Windows есть встроенная функция?

Основываясь на том, что предоставил Jon of All Trades, следующий (

n) устранил надоедливую проблему двойного расширения: FOR /f "delims=" %%i IN ('DIR *.xlsx /b') DO ExcelToCSV.vbs "%%i" "%%

Я попробовал решение ScottF VB и заставил его работать. Однако я хотел преобразовать файл Excel с несколькими вкладками (книгу) в один файл .csv.

Это не сработало, скопировалась только одна вкладка (та, которая выделяется, когда я открываю ее через excel).

Кто-нибудь знает о сценарии, который может преобразовать файл Excel с несколькими вкладками в один файл .csv?

Ответ Скотта Ф. - лучшее, что я нашел в Интернете. Я добавил в его код, чтобы удовлетворить свои потребности. Я добавил:

On Error Resume Next <- Чтобы учесть отсутствующие файлы xls в моей пакетной обработке вверху. oBook.Application.Columns ("A: J"). NumberFormat = "@" <- Перед строкой SaveAs, чтобы убедиться, что мои данные сохранены в формате текста, чтобы Excel не и запятые в числовых строках в моих данных т.е. (от 1200 до 1200). Диапазон столбцов следует отрегулировать в соответствии с вашими потребностями (A: J).

Я также удалил Echo «готово», чтобы сделать его не интерактивным.

Затем я добавил сценарий в командный файл cmd для ежечасной обработки автоматизированных данных с помощью задачи.

Думаю, вам стоит подумать о публикации финальной версии кода с комментариями.

Все эти ответы помогли мне создать следующий скрипт, который автоматически конвертирует файлы XLS * в CSV и наоборот , удаляя один или несколько файлов в скрипте (или через командную строку). Приносим извинения за неаккуратное форматирование.

Я пытаюсь запустить макрос Excel из-за пределов файла Excel. В настоящее время я использую ".vbs" файл из командной строки, но он продолжает говорить мне, что макрос не может быть найден. Вот script Я пытаюсь использовать

И вот макрос, к которому я пытаюсь получить доступ:

EDIT: Excel 2003.

ОТВЕТЫ

Ответ 1

Хорошо, это на самом деле просто. Предполагая, что ваш макрос находится в модуле, а не на одном из листов, вы используете:

Для имени файла с пробелами помещайте имя файла в кавычки.

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

Примечание. Вам не нужна нотация macro.testфункции, которую вы использовали.

Ответ 2

Думаю, вы пытаетесь это сделать? (ИСПЫТАНИЕ И ИСПЫТАНИЕ)

Этот код откроет файл Test.xls и запустит макрос TestMacro , который, в свою очередь, напишет в текстовый файл TestResult.txt

Ответ 3

Я попытался адаптировать код @Siddhart к относительному пути для запуска моего макроса open_form , но он, похоже, не работал. Это была моя первая попытка. Мое рабочее решение ниже.

ИЗМЕНИТЬ

Я действительно отработал это, на всякий случай, когда кто-то хочет запустить пользовательскую форму "подобно" автономному приложению:

Проблемы, с которыми я столкнулся:

1 - Я не хотел использовать событие Workbook_Open, поскольку excel заблокирован только для чтения. 2 - Команда партии ограничена тем фактом, что (насколько мне известно) она не может вызвать макрос.

Сначала я написал макрос, чтобы запустить мою пользовательскую форму, скрывая приложение:

Затем я создал vbs для запуска этого макроса (выполнение этого с относительным путем было сложным):

И я, наконец, сделал пакетный файл для выполнения VBS.

Обратите внимание, что я также включил "Установить обратно в видимый" в мой Userform_QueryClose :

В любом случае, спасибо за вашу помощь, и я надеюсь, что это поможет, если кому-то это понадобится

Ответ 4

Я попробовал вышеуказанные методы, но я получил ошибку "macro not found". Это окончательный код, который сработает!

В моем случае MyMacro находится под Sheet1, таким образом Sheet1.MyMacro.

Ответ 5

Excel 2010, Win 7

Ответ 6

Если вы пытаетесь запустить макрос из своей личной книги, это может не сработать, поскольку открытие файла Excel с помощью VBScript автоматически не открывает ваш PERSONAL.XLSB. вам нужно будет сделать что-то вроде этого:

Итак, в начале цикла он открывает personals.xlsb и запускает макрос оттуда для всех других книг. Просто подумал, что я должен опубликовать здесь на всякий случай, если кто-то столкнется с этим, как я, но не могу понять, почему макрос все еще не работает.

Ответ 7

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

То, что я хотел, - это вызвать макрос, который меняет некоторые ячейки и стирает некоторые строки, но мне нужно было более 1500 excels (приблизительно потратил 3 минуты для каждого файла)

Читайте также: