|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - [решено] Пакетное преобразование xls ->xlsx (xls -> csv) |
|
|
PowerShell - [решено] Пакетное преобразование xls ->xlsx (xls -> csv)
|
Новый участник Сообщения: 2 |
Требуется скрипт для преобразования всех файлов в определенной папке xls в xlsx (или csv).
|
|
Отправлено: 08:19, 07-07-2021 |
Новый участник Сообщения: 4
|
Профиль | Сайт | Отправить PM | Цитировать [String]$PathToAnalise = "D:\Обменка\Счета\" $excel = New-Object -ComObject Excel.Application # открываем экземпляр Excel, он будет один на весь скрипт For( ; ; ) { Get-ChildItem -Path $PathToAnalise *.xls -File -Recurse -Attributes ` Archive,Compressed,Encrypted,Hidden,Normal,ReadOnly,NotContentIndexed,SparseFile,System | ForEach-Object { [String]$filefullname = $_.DirectoryName + "\" + $_.BaseName + ".xlsx"; if (Test-Path -PathType Leaf -Path $filefullname) { $ErrorActionPreference = 'Ignore'; Remove-Item -Path $_.FullName $ErrorActionPreference = 'SilentlyContinue'; } else { $EWB = $excel.Workbooks.Open($_.FullName) $EWB.SaveAs($_.DirectoryName + "\" + $_.BaseName + ".xlsx", 51) $_.DirectoryName + "\" + $_.BaseName + ".xlsx" $EWB.Close() Remove-Item -Path $_.FullName } } Start-Sleep -s 3 } $excel.Quit() # закрываем экземпляр Excel - это действие бессмысленно, # т.к. при нормальной работе выхода из цикла не произойдет, # а при аварийной остановке скрипта исполнение до этого места не дойдет Если есть идеи, как не гонять цикл, а отслеживать именно появление файла - было бы интересно посмотреть. Вариант без висящего в памяти Excel [String]$PathToAnalise = "D:\Обменка\Счета\" For( ; ; ) { Get-ChildItem -Path $PathToAnalise *.xls -File -Recurse -Attributes ` Archive,Compressed,Encrypted,Hidden,Normal,ReadOnly,NotContentIndexed,SparseFile,System | ForEach-Object { [String]$filefullname = $_.DirectoryName + "\" + $_.BaseName + ".xlsx"; if (Test-Path -PathType Leaf -Path $filefullname) { $ErrorActionPreference = 'Ignore'; Remove-Item -Path $_.FullName $ErrorActionPreference = 'SilentlyContinue'; } else { $excel = New-Object -ComObject Excel.Application $EWB = $excel.Workbooks.Open($_.FullName) $EWB.SaveAs($_.DirectoryName + "\" + $_.BaseName + ".xlsx", 51) $_.DirectoryName + "\" + $_.BaseName + ".xlsx" $EWB.Close() Remove-Item -Path $_.FullName $excel.Quit() Stop-Process -Name EXCEL } } Start-Sleep -s 3 } в общем-то все итак видно, так что по ссылке ходить совсем не обязательно |
Отправлено: 17:51, 12-07-2025 | #21 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
fascinating rhythm Сообщения: 6690
|
Профиль | Отправить PM | Цитировать antivan, в составе Офиса версии примерно с 2007 есть встроенный конвертер excelcnv.exe, и париться с ком-объектом Экселя уже не нужно, выше в теме было написано об этом.
Вот вариант с конвертацией и автоматическим удалением оригиналов. Можно вставить в планировщик и запускать через определённые промежутки времени. Проверки перед удалением оригиналов можно ещё навертеть какие угодно. # Папка с файлами .xls $folder = "C:\temp" # Путь до конвертера $converter = "C:\Program Files\Microsoft Office\root\Office16\excelcnv.exe" # Запускать процесс только если в папке есть файлы .xls if ($files = dir $folder -Include "*.xls" -Recurse) { # Конвертировать $files |% { & $converter -oice "$($_.FullName)" "$($_.FullName + "x")" } # Ожидание завершения процессов конвертации do { sleep 5 } while (get-process excelcnv -ErrorAction SilentlyContinue) # Удалить оригинал, если есть соответствующий файл .xlsx и он не нулевого размера dir $folder -Include "*.xlsx" -Recurse |% { $xls = "$($_.DirectoryName)\$($_.basename).xls" if ($_.Length -ne 0 -and (Test-Path $xls)) { del $xls } } } |
------- Последний раз редактировалось DJ Mogarych, 12-07-2025 в 20:48. Отправлено: 20:43, 12-07-2025 | #22 |
Новый участник Сообщения: 4
|
Профиль | Сайт | Отправить PM | Цитировать Цитата DJ Mogarych:
Никого ни к чему не призываю и не обязываю, естественно, просто таки созрел до публикации сайта, потихоньку выкладываю результаты своего "творчества". Не ахти что, но может кому-то будет полезно |
|
Отправлено: 21:52, 12-07-2025 | #23 |
Crazy Сообщения: 1232
|
Профиль | Отправить PM | Цитировать Цитата antivan:
|
|
------- Отправлено: 12:48, 13-07-2025 | #24 |
Новый участник Сообщения: 4
|
Профиль | Сайт | Отправить PM | Цитировать Цитата YuS_2:
|
|
Отправлено: 21:44, 14-07-2025 | #25 |
Новый участник Сообщения: 4
|
Профиль | Сайт | Отправить PM | Цитировать Интересно. Но, похоже, проще гонять цикл с опросом, а задержкой можно и нагрузку регулировать
|
Отправлено: 22:36, 14-07-2025 | #26 |
|
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Разное - [решено] Поиск по файлам xlsx и xls | Sisin | Microsoft Office (Word, Excel, Outlook и т.д.) | 7 | 22-09-2015 15:48 | |
PowerShell - [решено] csv to xls, xlsx | firstarey | Скриптовые языки администрирования Windows | 3 | 17-03-2015 08:27 | |
2003/XP/2000 - [решено] Пакет обеспечения совместимости Отключить автоматическре преобразование из xlsx в xls | SANIOK_AV | Microsoft Office (Word, Excel, Outlook и т.д.) | 2 | 11-10-2011 17:29 | |
PowerShell - Сложное преобразование xls или csv файла в текстовый | tarasov.evgeny | Скриптовые языки администрирования Windows | 1 | 29-05-2011 15:04 |
|