openpyxl设置表格适应列宽
时间: 2023-10-13 16:25:31 浏览: 473
可以使用`ws.column_dimensions[column_letter].auto_size = True`来自动调整列宽,其中`ws`是worksheet对象,`column_letter`是列的字母标识符,例如'A'、'B'、'C'等。以下是示例代码:
```python
import openpyxl
# 打开Excel文件
wb = openpyxl.load_workbook('example.xlsx')
# 选择工作表
ws = wb.active
# 设置第1列自适应列宽
ws.column_dimensions['A'].auto_size = True
# 保存Excel文件
wb.save('example.xlsx')
```
相关问题
openpyx 设置表格 自动列宽
要自动调整表格列宽,可以使用 openpyxl 库中的 `ws.column_dimensions` 属性和 `AutoFit` 方法。以下是代码示例:
```python
from openpyxl import Workbook
# 新建一个工作簿并选择活动工作表
wb = Workbook()
ws = wb.active
# 在第一行添加一些数据
ws['A1'] = 'This is some text'
ws['B1'] = 'This is a longer text'
# 自动适应列宽
for column_cells in ws.columns:
length = max(len(cell.value or "") for cell in column_cells)
ws.column_dimensions[column_cells[0].column_letter].width = length
wb.save('example.xlsx')
```
在这个例子中,我们遍历工作表中的列并测量它们中最长的单元格文本。然后,我们将列的宽度设置为这个最大长度。 `max` 函数的 `key` 参数指定了一个函数用于比较每个单元格的长度。我们使用了一个简单的 lambda 函数来测试每个单元格的长度。
这会自动调整单元格大小以适应其内容。但是,如果内容非常大,它可能会导致单元格变得非常宽,这可能不是您想要的结果。在这种情况下,您可能需要手动调整列宽或使用更高级的算法来自动设置列宽。
用最新版本的库用python把df按照两列分组,分组的两个列名分别为表名和sheet名,分别输出到一个文件夹中的和分组df表名相同的EXCEL中,现有excel的SHEET要在最后,要求表头填充成浅蓝色,全部表格加边框、居中、自动适应列宽
好的,可以使用`pandas`和`openpyxl`库来实现这个功能。以下是代码示例:
```python
import pandas as pd
from openpyxl import Workbook
from openpyxl.styles import PatternFill, Border, Side, Alignment
def group_by_columns_to_excel(df, group_cols, path):
# 分组
grouped = df.groupby(group_cols)
# 创建文件夹
import os
if not os.path.exists(path):
os.makedirs(path)
# 创建 Excel 文件
for group, group_df in grouped:
file_name = f"{group[0]}_{group[1]}.xlsx"
file_path = os.path.join(path, file_name)
writer = pd.ExcelWriter(file_path, engine='openpyxl')
# 写入数据
group_df.to_excel(writer, sheet_name='Sheet1', index=False)
# 获取 workbook 和 worksheet 对象
workbook = writer.book
worksheet = writer.sheets['Sheet1']
# 设置表头样式
header_fill = PatternFill(start_color='BFEFFF', end_color='BFEFFF', fill_type='solid')
for cell in worksheet['A1':f'{worksheet.max_column}1'][0]:
cell.fill = header_fill
# 设置边框和对齐方式
thin_border = Border(left=Side(style='thin'), right=Side(style='thin'), top=Side(style='thin'), bottom=Side(style='thin'))
center_alignment = Alignment(horizontal='center', vertical='center', wrap_text=True)
for row in worksheet.iter_rows():
for cell in row:
cell.border = thin_border
cell.alignment = center_alignment
# 自适应列宽
for column in worksheet.columns:
max_length = 0
column_letter = column[0].column_letter
for cell in column:
try:
if len(str(cell.value)) > max_length:
max_length = len(str(cell.value))
except:
pass
adjusted_width = (max_length + 2) * 1.2
worksheet.column_dimensions[column_letter].width = adjusted_width
# 保存文件
writer.save()
# 示例数据
df = pd.DataFrame({
'表名': ['table1', 'table1', 'table2', 'table2'],
'sheet名': ['sheet1', 'sheet2', 'sheet1', 'sheet2'],
'数据': [1, 2, 3, 4]
})
group_by_columns_to_excel(df, ['表名', 'sheet名'], 'output_folder')
```
这个函数的实现思路是先按照指定的列分组,然后对每个分组创建一个 Excel 文件,并写入该分组的数据。然后对 Excel 文件进行样式设置,包括表头样式、边框、对齐方式和自适应列宽。最后保存文件。
阅读全文