如題,假設我資料夾的都是excel並且每個excel都有檔案格式與副檔名不相符的問題
可以靠這個方法解決
https://tw.imyfone.com/windows-data-recovery/excel-cannot-open-file/
但是由於檔案太多一個一個轉有點慢,所以想問其他更好方法可以直接將整個資料夾轉檔嗎
你是要更改副檔名嗎?
這篇看看
rename *.xlsx *.你要更改的副檔名
08大提供的方法:
1.打開我的電腦上面路徑那直接打PowerShell
2.
$xlFixedFormat = [Microsoft.Office.Interop.Excel.XlFileFormat]::xlOpenXMLWorkbook
write-host $xlFixedFormat
$excel = New-Object -ComObject excel.application
$excel.visible = $true
$folderpath = "C:\Users\gabceb\Documents\testXLS"
$filetype ="*xls"
Get-ChildItem -Path $folderpath -Include $filetype -recurse |
ForEach-Object `
{
$path = ($.fullname).substring(0, ($.FullName).lastindexOf("."))
"Converting $path"
$workbook = $excel.workbooks.open($_.fullname)
$path += ".xlsx"
$workbook.saveas($path, $xlFixedFormat)
$workbook.close()
$oldFolder = $path.substring(0, $path.lastIndexOf("\")) + "\old"
write-host $oldFolder
if(-not (test-path $oldFolder))
{
new-item $oldFolder -type directory
}
move-item $_.fullname $oldFolder
}
$excel.Quit()
$excel = $null
[gc]::collect()
[gc]::WaitForPendingFinalizers()
這段程式碼
$folderpath的地方改成你的資料夾
我沒用admin的權限就可以成功了,如果失敗可以用系統管理員身份執行看看
試過沒辦法 可能本身就excel就已經檔案格式與副檔名不相符的問題,所以再改副檔名也仍然會出現
什麼意思,你現在那個資料夾裡面的副檔名都是什麼呢
試試用 PowerShell
ConvertXLS
因為拿到的檔案已經是強轉過後的檔案,但無法追朔回原始檔。
目前是能開啟強轉過後的檔案存在檔案格式與副檔名不相符問題,但還能開啟excel。
但如果要讓開啟時檔案不會跳出檔案存在檔案格式與副檔名不相符的警示窗,只能打開後另存新檔
所以不能直接改檔名
目前檔案名稱是xls,但我另存成xlsx就正常了
但我想做的是把資料夾所有檔案都這樣操作過一次
上面 PowerShell 的程式碼就是在做你說的動作哦,記得要用 admin 的權限打開 ps
用08大的那個方式吧,那個就是重新存檔了
好我研究一下,我沒使用過ps QQ
1.打開我的電腦上面路徑那直接打PowerShell
2.$xlFixedFormat = [Microsoft.Office.Interop.Excel.XlFileFormat]::xlOpenXMLWorkbook
write-host $xlFixedFormat
$excel = New-Object -ComObject excel.application
$excel.visible = $true
$folderpath = "C:\Users\gabceb\Documents\testXLS"
$filetype ="*xls"
Get-ChildItem -Path $folderpath -Include $filetype -recurse |
ForEach-Object `
{
$path = ($.fullname).substring(0, ($.FullName).lastindexOf("."))
"Converting $path"
$workbook = $excel.workbooks.open($_.fullname)
$path += ".xlsx"
$workbook.saveas($path, $xlFixedFormat)
$workbook.close()
$oldFolder = $path.substring(0, $path.lastIndexOf("\")) + "\old"
write-host $oldFolder
if(-not (test-path $oldFolder))
{
new-item $oldFolder -type directory
}
move-item $_.fullname $oldFolder
}
$excel.Quit()
$excel = $null
[gc]::collect()
[gc]::WaitForPendingFinalizers()
這段程式碼
$folderpath的地方改成你的資料夾
ps能正常運行了,但是產生的old的檔案卻還是xls,我但原始文件應該是會轉成xlsx 而且還是有跳出警示窗
old 檔是舊檔哦,新的會在目錄底下,沒有檔案代表沒有執行成功,我想應該是會跳出警告視窗導致的
喔沒事,我搞錯了old是舊的檔案,新的她保留在原位置上
能正常運作了,感謝兩位大大
題外話想問一下兩位大大,$path += ".xlsx" 改成 $path += ".xls" 會噴出無法取得類別 Workbook 的 SaveAs 屬性的問題
有辦法讓他另存.xls嗎
$filetype ="*xls"
這裡有先改xlsx嗎?
我執行是正常的
抱歉,昨天回應達到系統上限,我指的是xls另存為xls這樣,$filetype ="xls"我應該不需要更改成xlsx
所以這兩行如果都這樣執行
$filetype ="xls"
$path += ".xls"
會噴這個錯"無法取得類別 Workbook 的 SaveAs 屬性"
ragequit 改成用 $workbook.save() 然後 move-item 那行移除或註解掉
$xlFixedFormat = [Microsoft.Office.Interop.Excel.XlFileFormat]::xlOpenXMLWorkbook
write-host $xlFixedFormat
$excel = New-Object -ComObject excel.application
$excel.visible = $true
$folderpath = "C:\Users\x11\拋資料
$filetype ="*xls"
Get-ChildItem -Path $folderpath -Include $filetype -recurse |
ForEach-Object `
{
$path = ($.fullname).substring(0, ($.FullName).lastindexOf("."))
"Converting $path"
$workbook = $excel.workbooks.open($_.fullname)
$path += ".xlsx"
$workbook.save($path, $xlFixedFormat)
$workbook.close()
$oldFolder = $path.substring(0, $path.lastIndexOf("\")) + "\old"
write-host $oldFolder
if(-not (test-path $oldFolder))
{
new-item $oldFolder -type directory
}
}
$excel.Quit()
$excel = $null
[gc]::collect()
[gc]::WaitForPendingFinalizers()
找不到 "Save" 的超載,引數計數為: "2"
位於 線路:16 字元:5
$workbook.save($path, $xlFixedFormat)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~