简体   繁体   English

pandas dataframe 到现有的 excel 工作表并用 openpyxl 换行列文本

[英]pandas dataframe to existing excel worksheet and wrap column text with openpyxl

I'm writing a dataframe to existing excel worksheet.我正在向现有的 excel 工作表写入 dataframe。 I need to preserve the worksheet formatting.我需要保留工作表格式。 I can do this with openpyxl however I can't figure out how to wrap the text in the column.我可以用 openpyxl 做到这一点,但是我不知道如何将文本包装在列中。 For example:例如:

import pandas as pd
from openpyxl import load_workbook

#sample dataframe
df = pd.DataFrame() 
df['id'] = [1,2]
df['reviews'] = ['Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Curabitur pretium tincidunt lacus. Nulla gravida orci a odio. Nullam varius, turpis et commodo pharetra, est eros bibendum elit, nec luctus magna felis sollicitudin mauris. Integer in mauris eu nibh euismod gravida. Duis ac tellus et risus vulputate vehicula. Donec lobortis risus a elit. Etiam tempor. Ut ullamcorper, ligula eu tempor congue, eros est euismod turpis, id tincidunt sapien risus a quam. Maecenas fermentum consequat mi. Donec fermentum. Pellentesque', 'malesuada nulla a mi. Duis sapien sem, aliquet nec, commodo eget, consequat quis, neque. Aliquam faucibus, elit ut dictum aliquet, felis nisl adipiscing sapien, sed malesuada diam lacus eget erat. Cras mollis scelerisque nunc. Nullam arcu. Aliquam consequat. Curabitur augue lorem, dapibus quis, laoreet et, pretium ac, nisi. Aenean magna nisl, mollis quis, molestie eu, feugiat in, orci. In hac habitasse platea dictumst.']

book = load_workbook('test.xlsx')
writer = pd.ExcelWriter('test.xlsx', engine='openpyxl')
writer.book = book
writer.sheets = {ws.title: ws for ws in book.worksheets}
df.to_excel(writer, sheet_name='ws1', startrow=0, index=False)
writer.save()

test.xlsx looks like: test.xlsx 看起来像:

在此处输入图像描述

and my code inserts df:我的代码插入df:

在此处输入图像描述

but my desired result is:但我想要的结果是:

在此处输入图像描述

I've formatted the excel sheet column but it gets lost when df is written to the worksheet.我已经格式化了 excel 工作表列,但是当将 df 写入工作表时它会丢失。 I can wrap text with Alignment(wrap_text=True) if I'm creating a new worksheet but not sure how to apply it to the column of an existing worksheet.如果我正在创建新工作表但不确定如何将其应用于现有工作表的列,我可以使用 Alignment(wrap_text=True) 换行。

Something like this?像这样的东西?

import pandas as pd
from openpyxl import load_workbook
from openpyxl.styles import Alignment

# sample dataframe
df = pd.DataFrame()
df['id'] = [1,2]
df['reviews'] = ['Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Curabitur pretium tincidunt lacus. Nulla gravida orci a odio. Nullam varius, turpis et commodo pharetra, est eros bibendum elit, nec luctus magna felis sollicitudin mauris. Integer in mauris eu nibh euismod gravida. Duis ac tellus et risus vulputate vehicula. Donec lobortis risus a elit. Etiam tempor. Ut ullamcorper, ligula eu tempor congue, eros est euismod turpis, id tincidunt sapien risus a quam. Maecenas fermentum consequat mi. Donec fermentum. Pellentesque', 'malesuada nulla a mi. Duis sapien sem, aliquet nec, commodo eget, consequat quis, neque. Aliquam faucibus, elit ut dictum aliquet, felis nisl adipiscing sapien, sed malesuada diam lacus eget erat. Cras mollis scelerisque nunc. Nullam arcu. Aliquam consequat. Curabitur augue lorem, dapibus quis, laoreet et, pretium ac, nisi. Aenean magna nisl, mollis quis, molestie eu, feugiat in, orci. In hac habitasse platea dictumst.']

book = load_workbook('test.xlsx')
writer = pd.ExcelWriter('test.xlsx', engine='openpyxl')
writer.book = book
writer.sheets = {ws.title: ws for ws in book.worksheets}

# writer.sheets['ws1'].column_dimensions['B'].width = 90  # you can also adjust the column width if need be

df.to_excel(writer, sheet_name='ws1', startrow=0, index=False)

for cell in writer.sheets['ws1']['B']:
    cell.alignment = Alignment(wrap_text=True)

writer.save()

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM