我有一个*.xlsm的文件,里面有20个工作表。 我想将其中几个工作表单独保存为*.csv文件(格式丢失也没关系)。 已经尝试使用xlrd-xlwt和win32com库,但没有成功。 请问是否有人能提供Python代码片段来完成上述处理?因为我还有其他的Python依赖项,所以不能使用其他语言。 谢谢。
我有一个*.xlsm的文件,里面有20个工作表。 我想将其中几个工作表单独保存为*.csv文件(格式丢失也没关系)。 已经尝试使用xlrd-xlwt和win32com库,但没有成功。 请问是否有人能提供Python代码片段来完成上述处理?因为我还有其他的Python依赖项,所以不能使用其他语言。 谢谢。
xlrd 也可以很好地处理 xlsm 文件。我已经使用随机的 xlsm 文件测试了代码,并且执行得非常完美。
import csv
import xlrd
workbook = xlrd.open_workbook('test.xlsx')
for sheet in workbook.sheets():
with open('{}.csv'.format(sheet.name), 'wb') as f:
writer = csv.writer(f)
writer.writerows(sheet.row_values(row) for row in range(sheet.nrows))
如果您遇到编码问题,请尝试以下代码:
import csv
import xlrd
workbook = xlrd.open_workbook('test.xlsm')
for sheet in workbook.sheets():
if sheet.name == "Sheet_name_from_xlsm_file":
with open('{}.csv'.format(sheet.name), 'wb') as f:
writer = csv.writer(f)
for row in range(sheet.nrows):
out = []
for cell in sheet.row_values(row):
try:
out.append(cell.encode('utf8'))
except:
out.append(cell)
writer.writerow(out)
按照以下方式安装pandas和xlrd依赖项:
现在只需使用read_excel读取xlsm文件即可。这是一个演示:
import pandas as pd
# YOU MUST PUT sheet_name=None TO READ ALL CSV FILES IN YOUR XLSM FILE
df = pd.read_excel('YourFile.xlsm', sheet_name=None)
# prints all sheets
print(df)
# prints all sheets name in an ordered dictionary
print(df.keys())
# prints first sheet name or any sheet if you know it's index
first_sheet_name = list(df.keys())[0]
print(first_sheet_name)
# prints first sheet or any sheet if know it's name
print(df[first_sheet_name])
# export first sheet to file
df[first_sheet_name].to_csv('FirstSheet.csv')
# export all sheets
for sheet_name in list(df.keys()):
df[sheet_name].to_csv(sheet_name + 'Sheet.csv')
# USE IT IN MULTIPLE WAYS #
import pandas as pd
import xlrd
import openpyxl #required for xlrd 2.0.1 and higher
df = pd.read_excel('your_excel_file_name.xlsm', sheet_name='your_sheet_name')
df.to_csv('your_new_name.csv')