之前做过把不同的excel表格信息汇总到一个表,例如简历信息的汇总,现在是把一个大表填到不同的小表里,例如资产表格的打印,主要的难点是怎么保留原格式;
用到了xlutils库,不同的库的方法不太一样
fileres = xlrd.open_workbook(resPath,formatting_info=True)
fileExcel = xlutils.copy.copy(fileres) #复制一份用来写
获取表格格式的样式列表
w = XLWTWriter() process(XLRDReader(fileres,'unknown.xls'), w) style_list = w.style_list
获取某一个单元格的样式:
style1 = style_list[sheet.cell_xf_index(2, 5)]
具体从一个excel读数据写入一个带格式的excel的全部代码:
def read_excel(fileName):
workBook = xlrd.open_workbook(fileName)
print(fileName)
#获取所有sheet的名字
allSheetNames = workBook.sheet_names()
# 获取sheet的名字
sheet1Name = allSheetNames[0]
# 获取列表1的名称
sheet_contents = workBook.sheet_by_name(sheet1Name)
#装入元素列表的信息
contentLists = []
#获取单元格内容
rows = sheet_contents.nrows
cols = sheet_contents.ncols
print("rows:",rows)
for i in range(1,rows):
contentList = []
AssetName = sheet_contents.cell(i,9).value #资产名称
AdminName = sheet_contents.cell(i, 14).value # 资产管理员
AssetBrand = sheet_contents.cell(i, 6).value # 设备品牌
AssentID = sheet_contents.cell(i, 0).value # 设备编码
AssetType = sheet_contents.cell(i, 7).value # 设备型号
AssetLocation = sheet_contents.cell(i, 1).value # 安装位置
AssetCabs = sheet_contents.cell(i, 2).value # 机柜号
AssetUNums = sheet_contents.cell(i, 3).value # U数
AssetSN = sheet_contents.cell(i, 8).value # SN码
AssetSys = sheet_contents.cell(i, 10).value # 操作系统
AssetIp = sheet_contents.cell(i, 11).value # ip地址
AssetBusSys = sheet_contents.cell(i, 12).value # 业务系统
contentList.append(AssetName)
contentList.append(AdminName)
contentList.append(AssetBrand)
contentList.append(AssetType)
contentList.append(AssetLocation)
contentList.append(AssetCabs)
contentList.append(AssetUNums)
contentList.append(AssetSN)
contentList.append(AssetSys)
contentList.append(AssetIp)
contentList.append(AssetBusSys)
contentList.append(AssentID)
contentLists.append(contentList)
return contentLists
#把提取的数据写到文件中
def write_excel(contentLists,resPath):
fileres = xlrd.open_workbook(resPath,formatting_info=True)
fileExcel = xlutils.copy.copy(fileres) #复制一份用来写
# print(fileExcel.sheet_names())
# 获取所有sheet的名字
allSheetNames = fileres.sheet_names()
# 获取sheet的名字
len = allSheetNames.__len__()
rows = contentLists.__len__()
print("len,rows:",len,rows)
w = XLWTWriter()
process(XLRDReader(fileres,'unknown.xls'), w)
wb = w.output[0][1]
style_list = w.style_list
print("style:",style_list.__len__())
for i, sheet in enumerate(fileres.sheets()):
#for i in range(0,len):
sheet_contents = fileExcel.get_sheet(i)
style1 = style_list[sheet.cell_xf_index(2, 5)]
sheet_contents.write(2, 5, contentLists[i][0],style1)
style100 = style_list[sheet.cell_xf_index(3, 4)]
sheet_contents.write(3, 4, contentLists[i][0],style100)
style2 = style_list[sheet.cell_xf_index(4, 4)]
sheet_contents.write(4, 4, contentLists[i][1],style2)
style3 = style_list[sheet.cell_xf_index(4, 10)]
sheet_contents.write(4, 10, contentLists[i][1],style3)
style4 = style_list[sheet.cell_xf_index(8, 2)]
sheet_contents.write(8, 2, contentLists[i][2],style4)
style5 = style_list[sheet.cell_xf_index(8, 5)]
sheet_contents.write(8, 5, contentLists[i][3],style5)
style6 = style_list[sheet.cell_xf_index(8, 9)]
sheet_contents.write(8, 9, contentLists[i][4],style6)
style7 = style_list[sheet.cell_xf_index(8, 11)]
sheet_contents.write(8, 11, "b1" + " " + str(contentLists[i][5]) + " " + str(contentLists[i][6]),style7)
style8 = style_list[sheet.cell_xf_index(10, 2)]
sheet_contents.write(10, 2, contentLists[i][7],style8)
style9 = style_list[sheet.cell_xf_index(14, 10)]
sheet_contents.write(14, 10, contentLists[i][8],style9)
style10 = style_list[sheet.cell_xf_index(23, 3)]
sheet_contents.write(23, 3, contentLists[i][9],style10)
style11 = style_list[sheet.cell_xf_index(34, 2)]
sheet_contents.write(34, 2, contentLists[i][10],style11)
style12 = style_list[sheet.cell_xf_index(3, 12)]
sheet_contents.write(3, 12, contentLists[i][11], style12)
fileExcel.save(resPath)
主要参考了以下网址:
用xlwt和xlrd在不修改Excel单元格格式的情况下修改单元格内容_硫酸锌01的博客-CSDN博客_xlwt修改单元格内容https://segmentfault.com/q/1010000008270267/a-1020000008308641
python 数据写在已存在的excel表中_DDQ_DQ的博客-CSDN博客_python xlwt写入已有表
python向已存在的excel写入数据_python写入已存在的excel数据实例_weixin_39611765的博客-CSDN博客