import pandas as pd from datetime import datetime from openpyxl.styles import Font, Alignment, PatternFill, Border, Side import schedule import time import utils as Utils # 获取excel文件路径和excel的工作表头 FILE_PATH = Utils.FILE_PATH HEADER = Utils.HEADER # 获取工作表数量以及名称 sheet_names = Utils.sheet_names def write_to_excel(results,source=""): # 检查文件是否存在,如果不存在则创建一个新的Excel文件 try: df_existing = pd.read_excel(FILE_PATH, sheet_name=None) except FileNotFoundError: df_existing = {name: pd.DataFrame(columns=HEADER) for name in sheet_names} today_str = datetime.now().strftime('%Y-%m-%d') aditional_item=0 # 记录本次爬取新增的公告数量 # 将爬取的公告对号入座填充至excel文件的工作表中 for result in results: sheet_name = result["来源栏目"] if result["来源栏目"] in sheet_names else "其他" df_sheet = df_existing[sheet_name] # 检查是否已存在相同内容链接的记录 if not df_sheet[df_sheet["内容链接"] == result["内容链接"]].empty: continue # 添加新记录 new_row = pd.DataFrame([result]) df_sheet = pd.concat([df_sheet, new_row], ignore_index=True) aditional_item+=1 # 若有新增公告,则加1 # 按时间降序排列 df_sheet.sort_values(by='发布时间', ascending=False, inplace=True) # 更新现有数据 df_existing[sheet_name] = df_sheet # 写入Excel文件 with pd.ExcelWriter(FILE_PATH, engine='openpyxl') as writer: for sheet_name, df in df_existing.items(): df.to_excel(writer, sheet_name=sheet_name, index=False) # 获取工作表对象 worksheet = writer.sheets[sheet_name] # 设置列宽 for col_idx, column_width in enumerate([40, 15, 20, 30, 20]): worksheet.column_dimensions[chr(65 + col_idx)].width = column_width # 创建红色填充 red_fill = PatternFill(start_color="FF0000", end_color="FF0000", fill_type="solid") # 创建边框样式 thin_border = Border(left=Side(style='thin'), right=Side(style='thin'), top=Side(style='thin'), bottom=Side(style='thin')) # 应用样式 for row in worksheet.iter_rows(min_row=1, max_col=len(HEADER), max_row=worksheet.max_row): publish_date = row[1].value if len(row) > 1 else None # print("这是publish_date",publish_date) # 若公告发布日期为今天,则将其单元格背景填充至红色 if publish_date == today_str: for cell in row: cell.fill = red_fill for idx, cell in enumerate(row): alignment = Alignment(horizontal='left' if idx < 4 else 'general', vertical='top', wrap_text=True) cell.alignment = alignment cell.border = thin_border print(f"<{source}> 新增 {aditional_item} 条公告,已保存至excel文件中")