使用Python实现生成复杂Excel表格 2025年9月25日 150 代码厨子 Python生成复杂表格,包括样式、行高等设定,一直是比较难的课题,今天突破了,分享给大家。 对于生成复杂的Excel表格(包含合并单元格、字体样式等操作),Python中有几个非常强大的库可以实现,其中最常用的是`openpyxl`和`xlsxwriter`。这两个库都支持Excel 2007+的.xlsx格式,并且提供了丰富的格式化功能。 下面我为你提供一个使用`openpyxl`库的示例,它可以创建包含合并单元格和各种字体样式的复杂Excel表格: ```python from openpyxl import Workbook from openpyxl.styles import Font, Alignment, Border, Side, PatternFill from openpyxl.utils import get_column_letter def create_complex_excel(filename): # 创建工作簿 wb = Workbook() # 获取活动工作表 ws = wb.active ws.title = "复杂表格示例" # 定义样式 title_font = Font(name="微软雅黑", size=16, bold=True, color="FFFFFF") header_font = Font(name="微软雅黑", size=12, bold=True, color="000000") normal_font = Font(name="微软雅黑", size=11) highlight_font = Font(name="微软雅黑", size=11, bold=True, color="FF0000") # 定义边框 thin_border = Border( left=Side(style='thin'), right=Side(style='thin'), top=Side(style='thin'), bottom=Side(style='thin') ) # 定义填充色 title_fill = PatternFill(start_color="4F81BD", end_color="4F81BD", fill_type="solid") header_fill = PatternFill(start_color="C0C0C0", end_color="C0C0C0", fill_type="solid") # 合并单元格作为标题 ws.merge_cells('A1:E1') title_cell = ws['A1'] title_cell.value = "销售报表汇总" title_cell.font = title_font title_cell.fill = title_fill title_cell.alignment = Alignment(horizontal="center", vertical="center") # 设置表头 headers = ["区域", "季度", "产品类别", "销售额(万元)", "同比增长(%)"] for col, header in enumerate(headers, 1): cell = ws.cell(row=2, column=col) cell.value = header cell.font = header_font cell.fill = header_fill cell.alignment = Alignment(horizontal="center", vertical="center") cell.border = thin_border # 填充数据 data = [ ["华东", "Q1", "电子产品", 1250, 12.5], ["华东", "Q1", "家居用品", 860, 8.2], ["华东", "Q1", "服装", 680, 5.3], ["华东", "Q1", "总计", 2790, 9.4], ["华北", "Q1", "电子产品", 980, 7.8], ["华北", "Q1", "家居用品", 720, 4.5], ["华北", "Q1", "服装", 540, 3.2], ["华北", "Q1", "总计", 2240, 5.8], ["全国", "Q1", "总计", 5030, 7.9], ] for row_idx, row_data in enumerate(data, 3): # 从第3行开始 for col_idx, value in enumerate(row_data, 1): cell = ws.cell(row=row_idx, column=col_idx) cell.value = value cell.border = thin_border # 对总计行应用特殊样式 if row_data[2] == "总计": cell.font = highlight_font # 设置对齐方式 if col_idx <= 3: # 文本列左对齐 cell.alignment = Alignment(horizontal="left", vertical="center") else: # 数值列右对齐 cell.alignment = Alignment(horizontal="right", vertical="center") # 合并区域单元格(第3-6行的A列) ws.merge_cells('A3:A6') # 合并区域单元格(第7-10行的A列) ws.merge_cells('A7:A10') # 合并季度单元格(第3-10行的B列) ws.merge_cells('B3:B10') # 调整列宽 for col in range(1, 6): ws.column_dimensions[get_column_letter(col)].width = 15 # 保存文件 wb.save(filename) print(f"Excel文件已成功创建:{filename}") if __name__ == "__main__": create_complex_excel("复杂销售报表.xlsx") ``` 这个示例展示了`openpyxl`的主要功能: 1. **合并单元格**:使用`merge_cells()`方法,可以合并指定范围的单元格 2. **字体样式**:通过`Font`类可以设置字体、大小、粗细、颜色等 3. **单元格对齐**:使用`Alignment`类设置水平和垂直对齐方式 4. **边框设置**:通过`Border`和`Side`类可以为单元格添加边框 5. **背景填充**:使用`PatternFill`类设置单元格背景色 如果你需要处理更复杂的场景,还可以考虑: - **xlsxwriter**:另一个强大的库,支持更多高级图表功能 - **pandas + openpyxl**:如果需要先处理数据再导出,可以结合pandas使用 使用前需要安装库:`pip install openpyxl` 根据你的具体需求,可以扩展这个示例,添加更多样式设置或数据处理逻辑。