|
Внимание, важное сообщение: Дорогие Друзья!
В ноябре далекого 2001 года мы решили создать сайт и форум, которые смогут помочь как начинающим, так и продвинутым пользователям разобраться в операционных системах. В 2004-2006г наш проект был одним из самых крупных ИТ ресурсов в рунете, на пике нас посещало более 300 000 человек в день! Наша документация по службам Windows и автоматической установке помогла огромному количеству пользователей и сисадминов. Мы с уверенностью можем сказать, что внесли большой вклад в развитие ИТ сообщества рунета. Но... время меняются, приоритеты тоже. И, к сожалению, пришло время сказать До встречи! После долгих дискуссий было принято решение закрыть наш проект. 1 августа форум переводится в режим Только чтение, а в начале сентября мы переведем рубильник в положение Выключен Огромное спасибо за эти 24 года, это было незабываемое приключение. Сказать спасибо и поделиться своей историей можно в данной теме. С уважением, ваш призрачный админ, BigMac... |
|
| Компьютерный форум 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 Сообщения: 6697
|
Профиль | Отправить 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 Сообщения: 1234
|
Профиль | Отправить 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 | |
|