Este script automatiza el proceso de descarga de reportes diarios desde Google Drive, procesamiento de datos desde archivos Excel, generación de reportes resumen y envío de estos reportes por correo electrónico a las tiendas correspondientes. Realiza tres tareas principales:
- Descargar Archivos desde Google Drive
- Procesar Archivos Excel
- Enviar Reportes Resumen por Correo Electrónico
- Python 3.6 o superior
- Bibliotecas de Python requeridas:
pandas
xlsxwriter
fpdf
google-auth
google-auth-oauthlib
google-auth-httplib2
google-api-python-client
smtplib
email
numpy
glob
warnings
xlsx2csv
-
Configuración de la API de Google:
- Asegúrese de tener
credentials.json
para la API de Google en su directorio de trabajo. - Configure un ID de cliente OAuth 2.0 desde la Consola de Google Cloud.
- Asegúrese de tener
-
Configuración del Entorno:
- Cree un entorno virtual de Python y actívelo:
python -m venv venv source venv/bin/activate # En Windows: venv\Scripts\activate
- Instale las bibliotecas requeridas:
pip install pandas xlsxwriter fpdf google-auth google-auth-oauthlib google-auth-httplib2 google-api-python-client smtplib email numpy glob warnings xlsx2csv
- Cree un entorno virtual de Python y actívelo:
-
Estructura del Directorio:
- Asegúrese de que exista la siguiente estructura de directorios:
C:\Users\<username>\Falabella\<ruta> ├── PRD_Tienda │ ├── Lista_PRD │ └── Lista_STORE_PICKUP
- Asegúrese de que exista la siguiente estructura de directorios:
-
Credenciales:
- Reemplace los marcadores de posición en el script con valores reales:
usuario
: Su nombre de usuario.ruta
: Subdirectorio para Falabella.- Credenciales de correo electrónico y configuraciones SMTP.
- IDs y URLs de los archivos de Google Sheets.
- Reemplace los marcadores de posición en el script con valores reales:
La función main
maneja la autenticación de Google Drive y descarga hojas de cálculo específicas de Google como archivos Excel:
SCOPES = ["https://www.googleapis.com/auth/drive"]
def download_sheet(service, sheet_id, output_filename):
# Función para descargar una hoja de cálculo de Google como un archivo Excel
...
def main():
creds = None
...
try:
service = build(API_SERVICE_NAME, API_VERSION, credentials=creds)
download_sheet(service, sheet_id_1, os.path.join(ruta_lista_PRD,'Personal Recoleccion diaria '+ str(fecha_hoy)+'.xlsx'))
download_sheet(service, sheet_id_2, 'Dato_tienda_Dev_C&C.xlsx')
except HttpError as error:
print(f"An error occurred: {error}")
if __name__ == "__main__":
main()
El script lee y procesa datos de los archivos Excel descargados, fusiona la información necesaria y crea reportes resumen:
def read_excel(path: str, sheet_name: str) -> pd.DataFrame:
buffer = StringIO()
Xlsx2csv(path, outputencoding="utf-8", sheet_name=sheet_name).convert(buffer)
buffer.seek(0)
df = pd.read_csv(buffer)
return df
# Procesamiento de datos
...
El script genera un reporte resumen para cada tienda, adjunta los archivos Excel correspondientes y envía un correo electrónico:
# Configuración del correo electrónico
email_usuario = 'su_email@example.com'
contrasena = 'su_contraseña'
servidores_smtp = 'smtp.office365.com'
puertos_smtp = 587
# Iterar sobre las tiendas y enviar correos electrónicos
for tienda in PICKUP_TIENDA['Nombre_Tienda'].unique():
...
# Crear el contenido del correo y adjuntar archivos
...
try:
# Enviar el correo electrónico
server.sendmail(email_usuario, destinatarios_str_to.split(',') + destinatarios_str_CC.split(','), msg.as_string())
registro_correos = pd.concat([registro_correos, pd.DataFrame({"Tienda": tienda, "Resultado": "Correo enviado correctamente"}, index=[0])])
print(f"Correo electrónico enviado correctamente a {tienda}")
except smtplib.SMTPDataError as e:
registro_correos = pd.concat([registro_correos, pd.DataFrame({"Tienda": tienda, "Resultado": f"Error al enviar correo electrónico: {e}"}, index=[0])])
print(f"Error al enviar correo electrónico a {tienda}: {e}")
finally:
server.quit()
Este script automatiza la descarga, el procesamiento y la distribución de reportes diarios, asegurando que los interesados reciban datos actualizados de manera oportuna. Asegúrese de actualizar los marcadores de posición con datos y credenciales reales antes de ejecutar el script.