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.

Copiando y pegando valores de celdas secuenciales de Excel utilizando openpyxl.

Soy relativamente nuevo en el uso de Python. Estoy intentando escribir un script que copie un valor específico de una hoja de cálculo (por ejemplo, A1), me permita pegarlo usando pyautogui en una barra de búsqueda de una base de datos que estoy utilizando, y luego copiar el texto en una ubicación específica en la celda contigua a A1, es decir, B1.

Luego quiero repetir esta búsqueda, pero esta vez con el valor de A2 copiando el texto resultante en B2.

Hasta ahora tengo esto (ver abajo) pero me estoy atascando en el punto en el que copia esto en la barra de búsqueda, ya que solo está repitiendo todos los valores de la hoja de cálculo en la barra de búsqueda de una vez. Por favor, ¿alguien puede ayudarme? Gracias de antemano y espero que esto tenga sentido.

import pyautogui
import openpyxl
import pyperclip

wb = openpyxl.load_workbook('test.xlsx')
sheet = wb.active
max_row = sheet.max_row
max_column = sheet.max_column

def start_program():
    # Abre Chrome haciendo clic en el icono de la barra de herramientas
    pyautogui.click(925, 774)

# Hace clic en la barra de búsqueda de Google
pyautogui.click(638, 577)

# Pausa el módulo durante 3 segundos
pyautogui.sleep(3)

def loop_excel_sheet():
    for i in range(1, max_row + 1):
        for j in range(1, max_column + 1):
            cell_obj = sheet.cell(row=i, column=j)
            pyperclip.copy(str(cell_obj.value))
            pyautogui.typewrite(pyperclip.paste())

start_program()
loop_excel_sheet()
Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para cumplir con tu tarea, puedes modificar la función loop_excel_sheet de la siguiente manera:

    def loop_excel_sheet():
        for i in range(1, max_row + 1):
            # obtener el valor de la celda en la columna A y la fila i
            search_value = sheet.cell(row=i, column=1).value
            # copiar el valor al portapapeles
            pyperclip.copy(str(search_value))
            # hacer clic en la barra de búsqueda
            pyautogui.click(638, 577)
            # pegar el valor del portapapeles
            pyautogui.hotkey('ctrl', 'v')
            # presionar enter para realizar la búsqueda
            pyautogui.press('enter')
            # esperar a que la búsqueda se complete
            pyautogui.sleep(3)
            # obtener el resultado de la base de datos y escribirlo en la celda de la columna B y la fila i
            result_text = 'algún resultado de la base de datos para ' + str(search_value)
            sheet.cell(row=i, column=2).value = result_text
            # guardar los cambios en la hoja de cálculo
            wb.save('test.xlsx')
    

    Esta función iterará a través de cada fila en la hoja de cálculo y realizará las siguientes operaciones:

    1. Obtener el valor de la celda en la columna A y la fila actual.
    2. Copiar este valor al portapapeles.
    3. Hacer clic en la barra de búsqueda y pegar el valor del portapapeles usando el atajo ‘ctrl’+’v’.
    4. Presionar la tecla ‘enter’ para realizar la búsqueda.
    5. Esperar a que la búsqueda se complete (en este caso esperamos 3 segundos).
    6. Obtener el resultado de la base de datos (con fines de demostración, simplemente establecemos el texto del resultado como una cadena codificada).
    7. Escribir el texto del resultado en la celda de la columna B y la fila actual.
    8. Guardar los cambios en la hoja de cálculo.

    Puedes llamar a esta función después de llamar a la función start_program para realizar la tarea deseada.

Comments are closed.