es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Utilice win32com para abrir un archivo de Excel con fórmulas, agregue un poco de retardo, y guárdelo como CSV.

Tengo un archivo de Excel que tiene un montón de fórmulas. Se necesita un tiempo para que las fórmulas carguen correctamente (entre 1 y 2 minutos), por lo que estoy tratando de agregar una pausa entre la apertura del archivo y la grabación del archivo cargado. Después de esto, espero guardar una copia del archivo de Excel completamente cargado como un nuevo CSV con un nombre diferente, para que tenga tanto el archivo de Excel completamente cargado como el nuevo archivo CSV.

Para ser claro, estoy tratando de hacer las siguientes tareas en este orden:

  1. Abra el archivo de Excel
  2. Agregue una pausa de ~1-2 minutos
  3. Guarde el archivo de Excel completamente cargado
  4. Guarde una copia del archivo de Excel completamente cargado como un CSV con un nombre diferente.

He logrado hacer los Pasos 1 y 3 que se ven a continuación, pero tengo problemas con los Pasos 2 y 4. He notado que el Paso 2 es bastante importante, ya que la forma en que mi código está escrito actualmente no permite suficiente tiempo para que las fórmulas se carguen, lo que lleva a un archivo incompletamente cargado.

¿Cuál es la mejor manera de hacer los Pasos 2 y 4, es decir, agregar una pausa y luego guardar el archivo completo como CSV?

import win32com.client as win32

excel = win32.gencache.EnsureDispatch('Excel.Application')

# Abre el archivo indicado por PATH
workbook = excel.Workbooks.Open(PATH)

# Guarda el archivo
workbook.Save()

# Cierra y sale de Excel
workbook.Close()
excel.Quit()

Tenga en cuenta que este código se basa en esta publicación.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para agregar un retraso entre la apertura del archivo Excel y guardar el archivo completamente cargado, se puede usar la función time.sleep () del módulo time. Por ejemplo, para agregar un retraso de 2 minutos, puede usar time.sleep (120) después de abrir el libro de trabajo:

    import win32com.client as win32
    import time
    
    excel = win32.gencache.EnsureDispatch('Excel.Application')
    workbook = excel.Workbooks.Open(PATH)
    
    # agregar un retraso de 2 minutos
    time.sleep(120)
    
    # guardar el archivo de Excel completamente cargado
    workbook.Save()
    
    # guardar una copia del archivo de Excel completamente cargado como CSV con un nombre diferente
    new_file_path = 'new_file.csv'
    workbook.SaveAs(new_file_path, 6) # use 6 for CSV file format
    
    # cerrar y salir de Excel
    workbook.Close()
    excel.Quit()
    

    Para guardar una copia del archivo de Excel completamente cargado como CSV con un nombre diferente después del retraso, se puede usar el método SaveAs () del objeto de libro de trabajo. El primer argumento es la ruta del archivo del nuevo archivo, y el segundo argumento especifica el formato del archivo. Puede usar 6 para el formato de archivo CSV.

    En general, el código modificado debería verse como el de arriba.

Comments are closed.