我有一个xlsx文件,希望保存其中一个sheet,格式、内容、隐藏列什么的,统统保持不变,只提取一张sheet,另存为另一个xlsx文件。
一开始我用了pandas,读取然后保存。但是我发现:pandas会忽略格式,如果用pandas读入再写出,被隐藏的列会展示出来,日期也会变成带时分秒的完整形式。
但是如果用openpyxl删除某些sheet再保存的话,会很方便。格式完整,所见即所得。
import openpyxl
def extract_sheet(file_path,out_path):
wb = openpyxl.load_workbook(file_path)
use_less = wb.sheetnames
use_less.remove('这是我要保存的sheet名称')
for i in use_less:
wb.remove(wb[i])
wb.save(out_path)
with pd.ExcelWriter(outfile_name, mode='a', engine="openpyxl") as writer:
如果要写出到xls文件,上面那句会报错
openpyxl.utils.exceptions.InvalidFileException: openpyxl does not support the old .xls file format, please use xlrd to read this file, or convert it to the more recent .xlsx file format.
ValueError: Append mode is not supported with xlwt!
当然你也可以对某些列作处理,比如对于纯日期列作调整,使用Series.dt.strftime(格式)。举例:
原文件中有一列time,里面的数值都是日期格式。
def test_pd():
sheets = pd.read_excel('XXXXXX.xlsx', sheet_name=None)
df = sheets['XXXX']
raw = df['time']
print(raw[5])
s1 = df['time'].dt.strftime("%Y-%m-%d")
print(s1[5])
输出:不作处理,是完整格式,处理后可以自定义。
2020-10-17 00:00:00
2020-10-17
格式描述可以参考这里。感谢这位作者。