openpyxlwithPandas,NumPyopenpyxl可以与Pandas和NumPy库一起使用。NumPy支持openpyxl内置了对NumPy的浮点数、整数和布尔数据类型的支持。使用Pandas的时间戳类型支持日期时间。使用Pandas的DataFrame数据类型openpyxl.utils.dataframe.dataframe_to_rows()方法提供了一种使用PandasDataframe的简单方法:=True,header=True):ws.append(r)虽然Pandas本身支持转换为Excel,但上述方法为客户端代码提供了更大的灵活性,包括将数据帧直接流式传输到文件的能力。以下操作将DataFrame类型数据转换为工作表,并突出显示标题和索引:wb=Workbook()ws=wb.activeforrindataframe_to_rows(df,index=True,header=True):ws.append(r)forcellinws['A']+ws[1]:cell.style='Pandas'wb.save("pandas_openpyxl.xlsx")如果只转换数据,可以使用只写模式转换DataFrame类型的数据来高亮标题和索引工作表:fromopenpyxl.cell.cellimportWriteOnlyCellwb=Workbook(write_only=True)ws=wb.create_sheet()cell=WriteOnlyCell(ws)cell.style='Pandas'defformat_first_row(row,cell):forcin行:cell.value=cyieldcellrows=dataframe_to_rows(df)first_row=format_first_row(next(rows),cell)ws.append(first_row)forrowinrows:row=list(row)cell.value=row[0]row[0]=cellws.append(row)wb.save("openpyxl_stream.xlsx")以上代码适用于标准工作簿。将Worksheet转换为DataFrame使用values属性将工作表转换为DataFrame,如果工作表没有标题或索引,这很容易:df=DataFrame(ws.values)如果工作表包含标题或索引(例如PandasCreatedtitleorindex),将worksheet转为DataFrame类型数据需要这样做:fromitertoolsimportislicedata=ws.valuescols=next(data)[1:]data=list(data)idx=[r[0]forrindata]data=(islice(r,1,None)forrindata)df=DataFrame(data,index=idx,columns=cols)
