使用 pd.DataFrame.to_excel 时旋转单元格的文本?
Rotate cell's text when using pd.DataFrame.to_excel?
我正在开发一个程序,其中一个需要的功能是获取 pandas 数据帧并将其导出到 excel。这部分工作正常。但是,在导出时,我需要将一些单元格的文本旋转为垂直排列,而不是默认的水平排列。
这是我目前的情况:
output = BytesIO()
writer = pd.ExcelWriter(output, engine='xlsxwriter')
filename = "Data for {} at {} on {}".format(item_no, loc, date)
columns = [('A:A', 18),
('B:B', 4),
('C:C', 18),
('D:Y', 20),
('Z:Z', 18),
('AA:AA', 12),
('AB:AB', 18),
('AC:AC', 12),
('AD:AD', 4),
('AE:AF', 18),
('AG:AG', 11),
('AH:AK', 16),
('AL:AL', 10),
('AM:AN', 14.5)]
df = fetch_data(item_no, loc, date)
df.to_excel(writer, index=False, sheet_name='Sheet1')
for col, width in columns:
writer.sheets['Sheet1'].set_column(col, width)
writer.save()
writer.close()
output.seek(0)
我知道 xlsxwriter 库有 format.set_rotation()
but from what I can tell,这仅在您使用 worksheet.write(..., format)
时使用,而不是在 pandas 将每个单元格写入 sheet 之后使用。
我将如何让某些单元格垂直(90 度旋转)而不是水平定位文本?特别是,我对旋转单元格 D1:Y1
.
中的文本感兴趣
您拥有数据框编写器对象中的 xlsxwriter 对象。所以你可以添加一个格式并设置它的属性。然后你可以使用它循环遍历 writer.sheets['Sheet1'].set_column(col, width)
。另一方面,如果您只想轮换列名,则可以选择在 df.to_excel()
中设置 header=False
,然后在循环中写出列名,one-by-one。
我在下面提供了一个示例来说明这一点。如果您只想轮换
,则可以在 'D1:Y1'
上设定条件
import pandas as pd
df = pd.DataFrame({"Name": ["A", "B", "C"], "Status": [1, 2, 3]})
writer = pd.ExcelWriter('test.xlsx', engine='xlsxwriter')
columns = [('A:A', 18),
('B:B', 4),
('C:C', 18),
('D:Y', 20),
('Z:Z', 18),
('AA:AA', 12),
('AB:AB', 18),
('AC:AC', 12),
('AD:AD', 4),
('AE:AF', 18),
('AG:AG', 11),
('AH:AK', 16),
('AL:AL', 10),
('AM:AN', 14.5)]
header_list = list(df.columns.values)
df.to_excel(writer, index=False, header=False, startrow=1, sheet_name='Sheet1')
workbook = writer.book
format = workbook.add_format({})
format.set_rotation(90)
for col, width in columns:
writer.sheets['Sheet1'].set_column(col, width)
for i in range (0, len(header_list)):
writer.sheets['Sheet1'].write(0, i, header_list[i], format)
workbook.close()
预期输出:
我正在开发一个程序,其中一个需要的功能是获取 pandas 数据帧并将其导出到 excel。这部分工作正常。但是,在导出时,我需要将一些单元格的文本旋转为垂直排列,而不是默认的水平排列。
这是我目前的情况:
output = BytesIO()
writer = pd.ExcelWriter(output, engine='xlsxwriter')
filename = "Data for {} at {} on {}".format(item_no, loc, date)
columns = [('A:A', 18),
('B:B', 4),
('C:C', 18),
('D:Y', 20),
('Z:Z', 18),
('AA:AA', 12),
('AB:AB', 18),
('AC:AC', 12),
('AD:AD', 4),
('AE:AF', 18),
('AG:AG', 11),
('AH:AK', 16),
('AL:AL', 10),
('AM:AN', 14.5)]
df = fetch_data(item_no, loc, date)
df.to_excel(writer, index=False, sheet_name='Sheet1')
for col, width in columns:
writer.sheets['Sheet1'].set_column(col, width)
writer.save()
writer.close()
output.seek(0)
我知道 xlsxwriter 库有 format.set_rotation()
but from what I can tell,这仅在您使用 worksheet.write(..., format)
时使用,而不是在 pandas 将每个单元格写入 sheet 之后使用。
我将如何让某些单元格垂直(90 度旋转)而不是水平定位文本?特别是,我对旋转单元格 D1:Y1
.
您拥有数据框编写器对象中的 xlsxwriter 对象。所以你可以添加一个格式并设置它的属性。然后你可以使用它循环遍历 writer.sheets['Sheet1'].set_column(col, width)
。另一方面,如果您只想轮换列名,则可以选择在 df.to_excel()
中设置 header=False
,然后在循环中写出列名,one-by-one。
我在下面提供了一个示例来说明这一点。如果您只想轮换
,则可以在'D1:Y1'
上设定条件
import pandas as pd
df = pd.DataFrame({"Name": ["A", "B", "C"], "Status": [1, 2, 3]})
writer = pd.ExcelWriter('test.xlsx', engine='xlsxwriter')
columns = [('A:A', 18),
('B:B', 4),
('C:C', 18),
('D:Y', 20),
('Z:Z', 18),
('AA:AA', 12),
('AB:AB', 18),
('AC:AC', 12),
('AD:AD', 4),
('AE:AF', 18),
('AG:AG', 11),
('AH:AK', 16),
('AL:AL', 10),
('AM:AN', 14.5)]
header_list = list(df.columns.values)
df.to_excel(writer, index=False, header=False, startrow=1, sheet_name='Sheet1')
workbook = writer.book
format = workbook.add_format({})
format.set_rotation(90)
for col, width in columns:
writer.sheets['Sheet1'].set_column(col, width)
for i in range (0, len(header_list)):
writer.sheets['Sheet1'].write(0, i, header_list[i], format)
workbook.close()
预期输出: