如何转换多个相同扩展名的文件?
How to convert multiple files of the same extension?
我正在使用此代码将“.xls”文件转换为“.xlsx”。我成功地为 1 个文件做了这件事。但是我想把它放在一个循环中,这样我就可以一次转换多个文件。
这些文件有不同的名字,所以我越来越难做到这一点。这是我的代码:
import win32com.client as win32
fname = "C:\Users\Desktop\test\a.xls"
excel = win32.gencache.EnsureDispatch('Excel.Application')
wb = excel.Workbooks.Open(fname)
wb.SaveAs(fname+"x", FileFormat = 51) #FileFormat = 51 is for .xlsx extension
wb.Close() #FileFormat = 56 is for .xls extension
excel.Application.Quit()
非常感谢任何帮助。谢谢你。
Edit-1:由@Ayush 实施第一个解决方案,观察到以下错误:
Traceback (most recent call last):
File "C:\Users\Desktop\convert2.py", line 7, in <module>
wb = excel.Workbooks.Open(file)
File "C:\Users\AppData\Local\Temp\gen_py.9[=11=]020813-0000-0000-C000-000000000046x0x1x9\Workbooks.py", line 75, in Open
ret = self._oleobj_.InvokeTypes(1923, LCID, 1, (13, 0), ((8, 1), (12, 17), (12, 17), (12, 17), (12, 17), (12, 17), (12, 17), (12, 17), (12, 17), (12, 17), (12, 17), (12, 17), (12, 17), (12, 17), (12, 17)),Filename
pywintypes.com_error: (-2147352567, 'Exception occurred.', (0, 'Microsoft Excel', "Sorry, we couldn't find a.xls. Is it possible it was moved, renamed or deleted?", 'xlmain11.chm', 0, -2146827284), None)
您可以使用os
模块获取指定文件夹中的文件列表并循环遍历它们。试试这个,让我知道它是否有效。
import win32com.client as win32
import os
path = "C:\Users\Desktop\test"
dir_list = os.listdir(path)
for file in dir_list:
file_with_path = os.path.join(path, file)
excel = win32.gencache.EnsureDispatch('Excel.Application')
wb = excel.Workbooks.Open(file_with_path)
wb.SaveAs(file_with_path+"x", FileFormat = 51) #FileFormat = 51 is for .xlsx extension
wb.Close() #FileFormat = 56 is for .xls extension
excel.Application.Quit()
编辑:
注意:如果您也想编辑这些 excel 文件,请使用上面的代码,否则如果您只想重命名文件,请使用下面的代码
import os
path = "C:\Users\Desktop\test"
for file in os.listdir(path):
file_with_path = os.path.join(path, file)
os.rename(file_with_path, file_with_path + 'x')
注意:上面的代码可以再次稍微改进,但是你必须确保下面的脚本与 excel 文件位于同一目录中
import os
[os.rename(file, file + 'x') for file in os.listdir('.')]
我可以通过查看其他一些答案来解决它,这是代码:
import os
import os.path
import win32com.client as win32
rootdir = u'"C:\Users\Desktop\test"'
for parent, dirnames, filenames in os.walk(rootdir):
for fn in filenames:
filedir = os.path.join(parent, fn)
print(filedir)
excel = win32.gencache.EnsureDispatch('Excel.Application')
wb = excel.Workbooks.Open(filedir)
# xlsx: FileFormat=51
# xls: FileFormat=56,
wb.SaveAs(filedir+"x", FileFormat = 51)
wb.Close()
excel.Application.Quit()
我正在使用此代码将“.xls”文件转换为“.xlsx”。我成功地为 1 个文件做了这件事。但是我想把它放在一个循环中,这样我就可以一次转换多个文件。
这些文件有不同的名字,所以我越来越难做到这一点。这是我的代码:
import win32com.client as win32
fname = "C:\Users\Desktop\test\a.xls"
excel = win32.gencache.EnsureDispatch('Excel.Application')
wb = excel.Workbooks.Open(fname)
wb.SaveAs(fname+"x", FileFormat = 51) #FileFormat = 51 is for .xlsx extension
wb.Close() #FileFormat = 56 is for .xls extension
excel.Application.Quit()
非常感谢任何帮助。谢谢你。 Edit-1:由@Ayush 实施第一个解决方案,观察到以下错误:
Traceback (most recent call last):
File "C:\Users\Desktop\convert2.py", line 7, in <module>
wb = excel.Workbooks.Open(file)
File "C:\Users\AppData\Local\Temp\gen_py.9[=11=]020813-0000-0000-C000-000000000046x0x1x9\Workbooks.py", line 75, in Open
ret = self._oleobj_.InvokeTypes(1923, LCID, 1, (13, 0), ((8, 1), (12, 17), (12, 17), (12, 17), (12, 17), (12, 17), (12, 17), (12, 17), (12, 17), (12, 17), (12, 17), (12, 17), (12, 17), (12, 17), (12, 17)),Filename
pywintypes.com_error: (-2147352567, 'Exception occurred.', (0, 'Microsoft Excel', "Sorry, we couldn't find a.xls. Is it possible it was moved, renamed or deleted?", 'xlmain11.chm', 0, -2146827284), None)
您可以使用os
模块获取指定文件夹中的文件列表并循环遍历它们。试试这个,让我知道它是否有效。
import win32com.client as win32
import os
path = "C:\Users\Desktop\test"
dir_list = os.listdir(path)
for file in dir_list:
file_with_path = os.path.join(path, file)
excel = win32.gencache.EnsureDispatch('Excel.Application')
wb = excel.Workbooks.Open(file_with_path)
wb.SaveAs(file_with_path+"x", FileFormat = 51) #FileFormat = 51 is for .xlsx extension
wb.Close() #FileFormat = 56 is for .xls extension
excel.Application.Quit()
编辑:
注意:如果您也想编辑这些 excel 文件,请使用上面的代码,否则如果您只想重命名文件,请使用下面的代码
import os
path = "C:\Users\Desktop\test"
for file in os.listdir(path):
file_with_path = os.path.join(path, file)
os.rename(file_with_path, file_with_path + 'x')
注意:上面的代码可以再次稍微改进,但是你必须确保下面的脚本与 excel 文件位于同一目录中
import os
[os.rename(file, file + 'x') for file in os.listdir('.')]
我可以通过查看其他一些答案来解决它,这是代码:
import os
import os.path
import win32com.client as win32
rootdir = u'"C:\Users\Desktop\test"'
for parent, dirnames, filenames in os.walk(rootdir):
for fn in filenames:
filedir = os.path.join(parent, fn)
print(filedir)
excel = win32.gencache.EnsureDispatch('Excel.Application')
wb = excel.Workbooks.Open(filedir)
# xlsx: FileFormat=51
# xls: FileFormat=56,
wb.SaveAs(filedir+"x", FileFormat = 51)
wb.Close()
excel.Application.Quit()