Spaces:
Runtime error
Runtime error
| from docxtpl import DocxTemplate | |
| import pandas as pd | |
| import gradio as gr | |
| import os | |
| from dotenv import load_dotenv | |
| # Load environment variables at the start of your script | |
| load_dotenv() | |
| def process_excel_and_generate_docs(excel_file, term, start_year, end_year, start_month, start_day, end_month, end_day): | |
| # Read the Excel file | |
| df = pd.read_excel(excel_file.name) | |
| # Initialize the news dictionary | |
| news_dict = {'news': {}} | |
| # Group by area and convert to the desired format | |
| for area, group in df.groupby('area'): | |
| news_dict['news'][area.lower()] = [ | |
| { | |
| 'title': row['translated_title'], | |
| 'date': row['date'], | |
| 'content': str(row['translated_content']).replace('\r\n', '\n').replace('\r', '\n').replace('\n', '\r\n'), # 统一转换为 Word 兼容的换行符 | |
| 'comment': row['comment'], | |
| 'country': row['country'] | |
| } | |
| for _, row in group.iterrows() | |
| ] | |
| # Create the context dictionary with all required fields | |
| context = { | |
| 'term': term, | |
| 'start_year': start_year, | |
| 'end_year': end_year, | |
| "start_month": start_month, | |
| "start_day": start_day, | |
| "end_month": end_month, | |
| "end_day": end_day, | |
| **news_dict | |
| } | |
| # Render PDF template | |
| pdf_output_path = "pdf.docx" | |
| pdf_tpl = DocxTemplate("v1.1 周报模板.docx") | |
| pdf_tpl.render(context) | |
| pdf_tpl.save(pdf_output_path) | |
| # Render Email template | |
| email_output_path = "email.docx" | |
| email_tpl = DocxTemplate("v1.1 周报邮件格式调整.docx") | |
| email_tpl.render(context) | |
| email_tpl.save(email_output_path) | |
| return [pdf_output_path, email_output_path] | |
| def create_gradio_interface(): | |
| # Define authentication credentials | |
| with gr.Blocks() as app: | |
| gr.Markdown("# Weekly Report Generator") | |
| with gr.Row(): | |
| excel_file = gr.File(label="Upload Excel File") | |
| with gr.Row(): | |
| term = gr.Textbox(label="期数", value="201") | |
| start_year = gr.Textbox(label="起始年", value="2024") | |
| end_year = gr.Textbox(label="结束年", value="2024") | |
| with gr.Row(): | |
| start_month = gr.Textbox(label="起始月份", value="9") | |
| start_day = gr.Textbox(label="起始日", value="1") | |
| end_month = gr.Textbox(label="结束月份", value="9") | |
| end_day = gr.Textbox(label="结束日", value="15") | |
| generate_btn = gr.Button("Generate Reports") | |
| with gr.Row(): | |
| pdf_output = gr.File(label="Download PDF Report") | |
| email_output = gr.File(label="Download Email Template") | |
| generate_btn.click( | |
| fn=process_excel_and_generate_docs, | |
| inputs=[excel_file, term, start_year, end_year, start_month, start_day, end_month, end_day], | |
| outputs=[pdf_output, email_output] | |
| ) | |
| return app | |
| if __name__ == "__main__": | |
| app = create_gradio_interface() | |
| app.launch( | |
| share=True, | |
| auth=auth, | |
| max_threads=3, # Limit concurrent processing | |
| show_error=True | |
| ) | |