鱼C论坛

 找回密码
 立即注册
查看: 3486|回复: 5

[已解决]python 如何处理Excel工作表的列宽,和字体大小

[复制链接]
发表于 2023-6-29 10:29:45 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
python 如何处理Excel工作表的列宽,和字体大小

to_excel(",index=True,index_label=['序号']

序号默认是带边框和加粗的 如何取消默认
最佳答案
2023-6-29 15:57:31
冰菲 发表于 2023-6-29 14:28
只有首行加粗,代码怎么写

如果你只想让首行加粗,你可以修改之前的代码,只对首行的字体设置为加粗。这是如何做到的:

  1. import pandas as pd
  2. from openpyxl import load_workbook
  3. from openpyxl.styles import Font, Border, Side

  4. # 加载现有的工作簿
  5. wb = load_workbook('existing_file.xlsx')

  6. # 选择一个工作表
  7. ws = wb['Sheet1']

  8. # 设置列宽
  9. for column in ws.columns:
  10.     max_length = 0
  11.     column = [cell for cell in column]
  12.     for cell in column:
  13.         try:
  14.             if len(str(cell.value)) > max_length:
  15.                 max_length = len(cell.value)
  16.         except:
  17.             pass
  18.     adjusted_width = (max_length + 2)
  19.     ws.column_dimensions[column[0].column_letter].width = adjusted_width

  20. # 设置字体大小,并取消加粗
  21. font = Font(name='Calibri', size=11, bold=False)
  22. for row in ws.iter_rows(min_row=2):  # 从第二行开始,将所有行的字体设置为非加粗
  23.     for cell in row:
  24.         cell.font = font

  25. # 只对首行设置加粗字体
  26. font_bold = Font(name='Calibri', size=11, bold=True)
  27. for cell in ws["1"]:  # 这是首行
  28.     cell.font = font_bold

  29. # 取消序号(索引)的边框
  30. border = Border(left=Side(border_style=None),
  31.                 right=Side(border_style=None),
  32.                 top=Side(border_style=None),
  33.                 bottom=Side(border_style=None))

  34. for cell in ws["A"]:  # 假设"A"列是序号(索引)列
  35.     cell.border = border

  36. # 保存修改后的工作簿
  37. wb.save('modified_file.xlsx')
复制代码


在这段代码中,我们使用 iter_rows(min_row=2) 来遍历从第二行开始的所有行,将这些行的字体设置为非加粗。然后我们创建一个加粗的字体对象,并只对首行设置这个加粗字体。这样,只有首行的字体是加粗的,其它行的字体是非加粗的。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-6-29 10:34:20 | 显示全部楼层
Python中,我们通常使用 pandas 和 openpyxl 或 xlsxwriter 这样的库来处理Excel文件。下面的代码展示了如何使用 xlsxwriter 调整Excel工作表的列宽和字体大小,以及如何取消边框和加粗。

首先,安装所需的库,如果你还未安装这些库的话:
  1. pip install pandas xlsxwriter
复制代码

接下来是创建一个示例数据框,导出到Excel,然后更改列宽,字体大小,以及取消边框和加粗。

  1. import pandas as pd

  2. # 创建一个示例数据框
  3. df = pd.DataFrame({
  4.     'A': ['foo', 'bar', 'baz'],
  5.     'B': ['alpha', 'beta', 'gamma'],
  6.     'C': [1, 2, 3]
  7. })

  8. # 使用xlsxwriter将数据框导出到Excel
  9. with pd.ExcelWriter('output.xlsx', engine='xlsxwriter') as writer:
  10.     df.to_excel(writer, sheet_name='Sheet1', index=True, index_label='序号')

  11.     # 获取xlsxwriter对象和工作表对象
  12.     workbook  = writer.book
  13.     worksheet = writer.sheets['Sheet1']

  14.     # 创建一个字体对象,设置大小和取消加粗
  15.     font_fmt = workbook.add_format({'bold': False, 'font_size': 10})

  16.     # 创建一个边框格式对象,设置为无边框
  17.     border_fmt = workbook.add_format({'border': 0})

  18.     # 设置列宽,字体格式和边框格式
  19.     worksheet.set_column('A:C', 20, font_fmt)  # 设置列宽为20
  20.     worksheet.set_column('A:C', None, border_fmt)  # 设置无边框
复制代码


注意: set_column 方法的三个参数分别为 first_col:last_col 、 width 和 cell_format 。 first_col 和 last_col 定义了要更改的列范围,例如 A:C 表示更改第一列到第三列的格式。 width 定义了列宽, cell_format 定义了单元格格式。

如果你想要对不同的列设置不同的格式,你可以分别调用 set_column 方法。比如,如果你只想更改第一列的格式,你可以这样写:
  1. worksheet.set_column('A:A', 20, font_fmt)
  2. worksheet.set_column('A:A', None, border_fmt)
复制代码


如果你想取消索引(即“序号”列)的边框和加粗,你需要找到这一列对应的列名(这取决于它在数据框中的位置,如果它是第一列,那么列名就是 A ),然后针对这一列设置格式。例如,如果“序号”列是第一列,你可以这样设置:
  1. worksheet.set_column('A:A', 20, font_fmt)
  2. worksheet.set_column('A:A', None, border_fmt)
复制代码

注意, pandas 默认将索引列写入Excel时是加粗的,不过你可以通过设置字体格式取消加粗。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-6-29 11:29:40 | 显示全部楼层
isdkz 发表于 2023-6-29 10:34
Python中,我们通常使用 pandas 和 openpyxl 或 xlsxwriter 这样的库来处理Excel文件。下面的代码展示了如 ...

不要新建工作表,用read,现有的工作表
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-6-29 11:32:03 | 显示全部楼层
冰菲 发表于 2023-6-29 11:29
不要新建工作表,用read,现有的工作表

如果你需要读取和修改现有的Excel文件,那么可以使用 openpyxl 库。下面的例子将演示如何读取一个现有的Excel文件,修改列宽,字体大小,并取消序号(索引)的边框和加粗。

首先,安装所需的库,如果你还未安装这些库的话:
  1. pip install pandas openpyxl
复制代码

接下来是读取Excel文件,更改列宽,字体大小,以及取消边框和加粗。

  1. import pandas as pd
  2. from openpyxl import load_workbook
  3. from openpyxl.styles import Font, Border, Side

  4. # 加载现有的工作簿
  5. wb = load_workbook('existing_file.xlsx')

  6. # 选择一个工作表
  7. ws = wb['Sheet1']

  8. # 设置列宽
  9. for column in ws.columns:
  10.     max_length = 0
  11.     column = [cell for cell in column]
  12.     for cell in column:
  13.         try:
  14.             if len(str(cell.value)) > max_length:
  15.                 max_length = len(cell.value)
  16.         except:
  17.             pass
  18.     adjusted_width = (max_length + 2)
  19.     ws.column_dimensions[column[0].column_letter].width = adjusted_width

  20. # 设置字体大小,并取消加粗
  21. font = Font(name='Calibri', size=11, bold=False)
  22. for row in ws.iter_rows():
  23.     for cell in row:
  24.         cell.font = font

  25. # 取消序号(索引)的边框
  26. border = Border(left=Side(border_style=None),
  27.                 right=Side(border_style=None),
  28.                 top=Side(border_style=None),
  29.                 bottom=Side(border_style=None))

  30. for cell in ws["A"]:  # 假设"A"列是序号(索引)列
  31.     cell.border = border

  32. # 保存修改后的工作簿
  33. wb.save('modified_file.xlsx')
复制代码

这个例子中,我们首先加载了一个现有的Excel文件,然后选取了名为'Sheet1'的工作表。我们遍历工作表中的每一列,计算每一列的最大长度,然后设置列宽。接着,我们遍历每一个单元格,设置字体大小,并取消加粗。最后,我们针对序号(索引)列取消了边框。最后,我们将修改后的工作簿保存为一个新的文件。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-6-29 14:28:53 | 显示全部楼层
isdkz 发表于 2023-6-29 11:32
如果你需要读取和修改现有的Excel文件,那么可以使用 openpyxl 库。下面的例子将演示如何读取一个现有的E ...

只有首行加粗,代码怎么写
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-6-29 15:57:31 | 显示全部楼层    本楼为最佳答案   
冰菲 发表于 2023-6-29 14:28
只有首行加粗,代码怎么写

如果你只想让首行加粗,你可以修改之前的代码,只对首行的字体设置为加粗。这是如何做到的:

  1. import pandas as pd
  2. from openpyxl import load_workbook
  3. from openpyxl.styles import Font, Border, Side

  4. # 加载现有的工作簿
  5. wb = load_workbook('existing_file.xlsx')

  6. # 选择一个工作表
  7. ws = wb['Sheet1']

  8. # 设置列宽
  9. for column in ws.columns:
  10.     max_length = 0
  11.     column = [cell for cell in column]
  12.     for cell in column:
  13.         try:
  14.             if len(str(cell.value)) > max_length:
  15.                 max_length = len(cell.value)
  16.         except:
  17.             pass
  18.     adjusted_width = (max_length + 2)
  19.     ws.column_dimensions[column[0].column_letter].width = adjusted_width

  20. # 设置字体大小,并取消加粗
  21. font = Font(name='Calibri', size=11, bold=False)
  22. for row in ws.iter_rows(min_row=2):  # 从第二行开始,将所有行的字体设置为非加粗
  23.     for cell in row:
  24.         cell.font = font

  25. # 只对首行设置加粗字体
  26. font_bold = Font(name='Calibri', size=11, bold=True)
  27. for cell in ws["1"]:  # 这是首行
  28.     cell.font = font_bold

  29. # 取消序号(索引)的边框
  30. border = Border(left=Side(border_style=None),
  31.                 right=Side(border_style=None),
  32.                 top=Side(border_style=None),
  33.                 bottom=Side(border_style=None))

  34. for cell in ws["A"]:  # 假设"A"列是序号(索引)列
  35.     cell.border = border

  36. # 保存修改后的工作簿
  37. wb.save('modified_file.xlsx')
复制代码


在这段代码中,我们使用 iter_rows(min_row=2) 来遍历从第二行开始的所有行,将这些行的字体设置为非加粗。然后我们创建一个加粗的字体对象,并只对首行设置这个加粗字体。这样,只有首行的字体是加粗的,其它行的字体是非加粗的。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-27 22:36

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表