Проблема вызвана тем, что формат Xls отличается от формата Xlsx. В предыдущих версиях Excels до версии 2007 использовались двоичные форматы. В Office 2007 были представлены новые форматы, названные Office Open Xml, которые использует Xslx.
Excel достаточно умен, чтобы проверять как расширение файла, так и формат файла. Поскольку сохранение бинарного файла с расширением новых версий создает конфликт, сообщение об ошибке также указывает на эту возможность:
и что расширение файла соответствует формату файла.
Почему Excel все равно не открывает файл? Я предполагаю, что это функция безопасности, которая предотвращает непреднамеренное открытие документов Office. В те времена Офисные макровирусы были проклятием многих офисов. Одним из основных способов заражения было обмануть пользователей, чтобы они открывали файлы без мер предосторожности. В отличие от вирусов classi c, макросы заражают данные приложения (включая файлы шаблонов по умолчанию) вместо двоичных файлов ОС, но это еще одна история.
В любом случае, для работы в правильном формате используйте правильную версию значение . Это будет -4143
для Xls и 51
для Xlsx. Более того, Get-ChildItem
возвращает коллекцию объектов FileInfo , а расширение файла содержится в свойстве Extension . Вот так
# Define Xls and Xlsx versions
$typeXls = -4143
$typeXls = 51
foreach ($f in Get-ChildItem "C:"){
try{
$ff = $f
...
# Select saveas type to match original file extension
if($f.extension -eq '.xsl') { $fType = $typeXls }
else if($f.extension -eq '.xslx') { $fType = $typeXlsx }
$a = $wb.SaveAs("C:\Out\" + $s + $.extension, $fType, $s)