![]() |
Пакетное преобразование xls ->xlsx (xls -> csv)
Требуется скрипт для преобразования всех файлов в определенной папке xls в xlsx (или csv).
|
Через COM Excel.Application: открыли документ, перевели в нужный формат, сохранили результат. А ежели в системе не развёрнут офисный пакет, на коленке пишется парсер ФС xls файла, конвертирующий данные таблиц в xml с последующей упаковкой в zip и сменой расширения на xlsx (в случае с csv можно использовать методы БД). И третий вариант - онлайн конверторы. curl'ом слать файлы на конвертацию, и если возвращается статус 200 (или любой иной удачный, согласно API), забрать результат также curl'ом.
|
Цитата:
|
Цитата:
Код:
param ( |
YuS_2, дружище, ты забыл высвободить COM, только его экземпляр закрыл.
|
YuS_2, есть же beerware license
Вообще есть вот такой вариант Сейчас нет возможности проверить, но скорей всего все это сделать можно будет в пару команд. |
Цитата:
Ну или добавить в конец скрипта, если принципиально: Код:
[runtime.interopservices.marshal]::releasecomobject($excel) Цитата:
|
YuS_2, beerware license не обязует пиво покупать, только намекает что автор кода не против этого.
|
Цитата:
А vbs?
Код:
BoxIn = "Z:\Box_In" |
Цитата:
--- Exception: C:\...\PowerShell\Modules\ImportExcel\7.1.2\Public\Import-Excel.ps1:99 Line | 99 | … throw "Import-Excel does not support reading this extensi … | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | Import-Excel does not support reading this extension type .xls --- |
В составе Офиса есть конвертер.
Код:
excelcnv.exe -oice file.xls file.xlsx |
YuS_2, здесь:
Скрытый текст
![]() надо быть аккуратнее и не забывать про короткие имена файлов. Посему в данном случае можно перебирать все и обязательно внутри ещё и проверять условие на точное соответствие расширения. Цитата:
Вопрос снимается. Для старого Office — это точно отдельный конвертер, а в составе новых, надо полагать, идёт в комплекте. Оставлю сие здесь себе для памяти: excelcnv command line: Hexacorn | Blog Excellent Conversions (and downloads) И всё ещё не нашёл ответа про параметр «-nme». |
Цитата:
Код:
fsutil 8dot3name set 1 |
Цитата:
|
Цитата:
Stop-Process -Name EXCEL а вот WINWORD не висит, закрывается по $Word.Quit(), хотя для надежности все равно пишу и Stop-Process -Name WINWORD |
alpap, ReleaseComObject по идее должно быть достаточно.
|
нет, попробовал
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($Excel) недостаточно, вернулся на spps -n Excel |
Цитата:
|
alpap, речь не о завершении связанного процесса, а об уменьшении количества ссылок на указанный COM. Сигнал к завершению процессу подаётся, если количество ссылок равно нулю (значение возвращаемое ReleaseComObject). А вот если по истечении кванта времени, отведённого на завершение, процесс продолжает "болтаться", ничего не остаётся, как прибивать его вручную.
|
Цитата:
Придется таки следить за наличием процесса в памяти (желательно по PID, чтобы не убить лишнего) и убивать его по завершении скрипта... или попробовать найти более вменяемый способ (мне лень этим заниматься, пока)... Цитата:
|
Код:
[String]$PathToAnalise = "D:\Обменка\Счета\" Если есть идеи, как не гонять цикл, а отслеживать именно появление файла - было бы интересно посмотреть. Вариант без висящего в памяти Excel Код:
[String]$PathToAnalise = "D:\Обменка\Счета\" в общем-то все итак видно, так что по ссылке ходить совсем не обязательно |
antivan, в составе Офиса версии примерно с 2007 есть встроенный конвертер excelcnv.exe, и париться с ком-объектом Экселя уже не нужно, выше в теме было написано об этом.
Вот вариант с конвертацией и автоматическим удалением оригиналов. Можно вставить в планировщик и запускать через определённые промежутки времени. Проверки перед удалением оригиналов можно ещё навертеть какие угодно. Код:
# Папка с файлами .xls |
Цитата:
Никого ни к чему не призываю и не обязываю, естественно, просто таки созрел до публикации сайта, потихоньку выкладываю результаты своего "творчества". Не ахти что, но может кому-то будет полезно |
Цитата:
|
Цитата:
|
Интересно. Но, похоже, проще гонять цикл с опросом, а задержкой можно и нагрузку регулировать
|
Время: 22:42. |
Время: 22:42.
© OSzone.net 2001-