python-openpyxl和win32-修改excel
excel文件是以月份作为sheet页,日作为首行列,实现每日巡检正常后对该日列下第3和16行赋值对号。
当excel多页时,openpyxl库修改excel打开后无法默认显示在修改页,为此可借鉴方法2--win32库(但此库只能在window下使用),后来换了种思路:每月1号将模板进行排序,然后将当月sheet页放在第一页,目前只能想到这么多。
openpyxl库实现
from datetime import datetime from openpyxl import load_workbook import pandas as pd def change_excel(): try: today = datetime.today() sheet_name = today.strftime("%Y年%m月") #excel页名 col_name = today.strftime("%d日") #excel列名 # 打开Excel文件 workbook=load_workbook("文件路径") #读取excel print("读取文件开始修改") # 选择指定的页 sheet = workbook[sheet_name] #指定excel页名 # 读取首行作为列名 df = pd.DataFrame(sheet.values) df.columns = df.iloc[0] df = df[1:] col=(df.columns.get_loc(col_name)) # 将指定范围内的单元格内容改为"√",第{col+1}列下第3-16单元格改为√ for row in sheet.iter_rows(min_row=3, max_row=16, min_col=col+1, max_col=col+1): for cell in row: cell.value = "√" workbook.save("文件路径") #覆盖保存 print("修改完成,保存本地") except Exception as e: print(f"-修改excel异常{e}")
win32和openpyxl结合范例
import pandas as pd from openpyxl import load_workbook from datetime import datetime import win32com.client as win32 def change_excel_test(): try: today = datetime.today() sheet_name = today.strftime("%Y年%m月") #页名 col_name = today.strftime("%d日") #列名 workbook_moban = load_workbook(excel_moban_path) #读取模板文件 print(f"打开模板文件{excel_moban_path}") workbook_moban.save(filename=excel_path) #另存为附件 print(f"另存为文件为{excel_path}") excel = win32.gencache.EnsureDispatch('Excel.Application') workbook = excel.Workbooks.Open(excel_path) sheet = workbook.Sheets(sheet_name) sheet.Select() #使用Select方法选择了指定的工作表,以达到默认显示的效果 # 获取列号 col = None for i, value in enumerate(sheet.Rows(1).Value[0]): if value == col_name: col = i + 1 break if col is None: bad_resules.append("excel日期列名未找到,修改excel失败") # # 获取单元格范围 range_start = sheet.Cells(3, col) range_end = sheet.Cells(16, col) cell_range = sheet.Range(range_start, range_end) # 将单元格范围内的值改为"√" cell_range.Value = "√" excel.DisplayAlerts = False # 禁止显示警告对话框 excel.Visible = False # 后台运行Excel excel.ScreenUpdating = False # 禁止屏幕刷新 # 保存并关闭Excel文件 workbook.Save() workbook.Close() excel.Quit() print("修改完成,保存本地完成") workbook_fujian = load_workbook(excel_path) #读取附件 workbook_fujian.save(filename=excel_moban_path) #另存为模板 print("另存为模板完成") except Exception as e: bad_resules.append("巡检结果正常---修改excel异常") print(f"巡检结果正常---修改excel异常{e}")
每月1号模板排序
def change_moban(): try: today = datetime.today() sheet_name = today.strftime("%Y年%m月") #页名 col_name = today.strftime("%d日") #列名 # 打开Excel文件 workbook_moban = load_workbook(excel_moban_path) #读取模板文件 # 获取所有 sheet 页,并按名称排序 sorted_sheets = sorted(workbook_moban.sheetnames) # 将指定的 sheet 名称移动到第二个位置(即索引为 1) sorted_sheets.remove(sheet_name) # 先从列表中移除该 sheet 名称 sorted_sheets.insert(1, sheet_name) # 再将其插入到所需位置 # 重新排序后的 sheet 页名称列表 print(sorted_sheets) # 将 sheet 页按排序后的顺序写回 Excel 文件 workbook_moban._sheets.sort(key=lambda x: sorted_sheets.index(x.title)) workbook_moban.save(excel_moban_path) if __name__ == '__main__': # 获取现在的时间 date = datetime.now().date() date_str = date.strftime("%d") if date_str == "01": change_moban() if SYSTEM_select=="windows_system": os.system("pip install -U chinesecalendar") elif SYSTEM_select=="linux_system": os.system("/opt/miniconda3/bin/pip3 install -U chinesecalendar") if is_workday(date): main() else: pass
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· AI与.NET技术实操系列(六):基于图像分类模型对图像进行分类