最近需要将许多个单独的表格整合到一起,首先是格式转化,将xls转为xlsx文件
import win32com.client as win32
import os.path
import os
def xlsToxlsx(xls_path, xlsx_path):
for root, dirs, files in os.walk(xls_path, topdown=False):
for name in files:
str = os.path.join(root, name)
if str.split('.')[-1] == 'xls':
print(str)
print(name)
fname = str # 合成需要转换的路径与文件名
fname_tmp = xlsx_path + '\\' + name + 'x' # 合成准备存放转换好的路径与文件名
print(fname_tmp)
excel = win32.gencache.EnsureDispatch('Excel.Application') # 调用win32模块
wb = excel.Workbooks.Open(fname) # 打开需要转换的文件
wb.SaveAs(fname_tmp, FileFormat=51) # 文件另存为xlsx扩展名的文件
wb.Close()
excel.Application.Quit()
xls_path = r"存放xls文件的路径"
xlsx_path = r"存放xlsx文件的路径"
xlsToxlsx(xls_path, xlsx_path)
将文件格式转换成统一的格式后,开始创建新的表用来存放多个Excel表中的内容。但是这样直接复制会有格式问题,后面再解决。
import glob
import pandas as pd
#需要创建ExcelWriter对象,要不sheet会覆盖,只留最后一个
writer = pd.ExcelWriter(r'这里填写创建表的路径包括文件名,例如:D:\abc\整合表.xlsx')
flist=glob.glob(r"这里填写存放多个Excel文件的目录,例如:D:a\*.xlsx")
#这里的‘*.xlsx’不用更改,只需在前面添加路径即可
for i in flist:
df=pd.read_excel(i)
#提取文件名
fname=i.split("\\")[-1]
fname=fname.split(".")[0]
# print(fname)
df.to_excel(writer, sheet_name=fname)
writer.save()
到这里表格已经复制完成了,但是新创建的表格的首行首列会出现number等字样,不够规范
为了删除首行首列的不规范格式,采用以下方式将其去除
import openpyxl
wb = openpyxl.load_workbook(r"这里填写刚刚整合好的文件,例如之前的:D:\a\整合表.xlsx")
workbook = xlrd.open_workbook(r"这里填写刚刚整合好的文件,例如之前的:D:\a\整合表.xlsx")
# 获取所有sheet的名字
names = workbook.sheet_names()
num = len(names)
for i in range(num):
# 通过sheet索引获得sheet对象
worksheet = workbook.sheet_by_index(i)
'''对sheet对象进行操作'''
name = worksheet.name # 获取表的姓名
nrows = worksheet.nrows # 获取该表总行数
# print(nrows)
ncols = worksheet.ncols # 获取该表总列数
# print(ncols)
sheet = wb[name]
list = worksheet.row_values(0)
temp=list[1]
# print(temp)
# 在第1列的位置删除1列
sheet.delete_cols(1)
# 在第1行的位置删除1行
sheet.delete_rows(0)
sheet['A1']=temp
print(name+'表已整合到某某表中')
## 指定不同的文件名,可以另存为别的文件
wb.save(r'这里填保存xlsx文件的路径,即最后整合表的路径和文件名,例如:D:\abc\新整合表.xlsx')
运行完后效果如下