Как копировать данные об одной колонне до другой в openpyxl?

Я работаю с openpyxl и я нуждаюсь в помощи.

Я хочу скопировать данные о колонне A - B в Колонну C - D, но что данные B были разделены из-за 10, в то время как данные A останутся такими каков.

Здесь задержание экрана, чтобы делать предыдущее видимым:

introducir la descripción de la imagen aquí

Как я могу решать это? другие шаги уже у меня есть они, здесь код:

from openpyxl import load_workbook

wb = load_workbook(filename='fig37.xlsx')
ws = wb["Fig37"]

deformation = ((ws['A3'].value)-(ws['A2'].value))
tiempo = ((ws['B3'].value)-(ws['B2'].value))

ws["E2"] = deformation / tiempo

wb.save("Resultado2.xlsx")

Вышеупомянутых шагов достигли создавая 2 переменные, на которые разделяется стоимость и результат копируется в колонне E и создается архив Resultado2.xlsxно эти шаги уже не необходимы, чтобы он включился в ответ, исключая спасания архива раньше упомянутый.

3
задан 17.03.2019, 00:45
1 ответ

Как он не показывает себе количество линий, у которых есть колонны interГ©s, mГЎs указанный состоит в том, чтобы использовать это цикл while, что, обнаружив у себя ячейку vacГ - в в колонне A или сломали B. Для предыдущего, просят

у двух функций помощи, которая позволяла бы повторно использовать cГіdigo, так, когда копируется стоимость как таковой, asГ - как стили и форматы соответствующих ячеек.

cГіdigo с соответствующими комментариями quedarГ - в asГ-:

import openpyxl
from openpyxl import Workbook
from copy import copy   # se usa para los estilos

#  ----------------------------------------
#  Funcion de Ayuda
#  Mantener estilos y formatos
#  Entre celdas
#  requiere importar copy
#  ----------------------------------------
def copyStyle(newCell, cell):
    if cell.has_style:
        newCell.style = copy(cell.style)
        newCell.font = copy(cell.font)
        newCell.border = copy(cell.border)
        newCell.fill = copy(cell.fill)
        newCell.number_format = copy(cell.number_format)
        newCell.protection = copy(cell.protection)
        newCell.alignment = copy(cell.alignment)


#  ----------------------------------------
#  Funcion de Ayuda
#  Para copiar valores entre columnas
#  Con numero de filas variables 
#  ----------------------------------------
def copyFromTo(Fro, To, start=1, num=1):

    i = start                               # indica la fila incial                         

    while (True):                           # iterar
        a = ws[Fro + str(i)].value          # se coge el valor de la celda origen
        if a == None:                       # cuando no hay nada en la celda
            return                          # se sale de while con return
        else:
            # Esta parte para este caso indica
            # 1 no tiene sentido dividir pero
            # al mismo tiempo se le puede emplear
            # cuando se copian valores del
            # tipo string o date
            if num != 1:                    
                ws[To + str(i)].value = a / num
            else:
                ws[To + str(i)].value = a

            # se mantienen los estilos y formatos
            copyStyle(ws[To + str(i)], ws[Fro + str(i)])

            # Efectos de control
            print(i,':',a, ws[To + str(i)].value)

        # Se actualiza para la siguiente fila
        i += 1


#  ----------------------------------------
#  Configuracion del Entorno de Trabajo
#  ----------------------------------------
libro = 'fig37.xlsx'                    # Nombre del Fichero (Libro)
libroDestino = 'Resultado2.xlsx'        # Nombre del Fichero a Guardarse

wb = openpyxl.load_workbook(libro)      # Se abre el Fichero (Libro)
ws = wb["Fig37"]                        # Se selecciona la hoja "Fig37"


#  ----------------------------------------
#  Operaciones en la Hoja 'Fig37'
#  ----------------------------------------

# Se Copia los valores de A a C
# en este caso no hay que hacer
# de ningún tipo
copyFromTo('A', 'C')
ws.column_dimensions['C'].width = 20   # Se asjuata el ancho de columna


# Se Copia los valores de A a C
ws['D1'].value = ws['B1'].value         # Primero las Cabeceras
copyStyle(ws['D1'], ws['B1'])           # Se mantiene los estilos

copyFromTo('B', 'D', 2, 10)             # Todas las Filas divididas por 10
ws.column_dimensions['D'].width = 20    # Se asjuata el ancho de columna

# Se guarda
wb.save(libroDestino)

Результат - следующий:

introducir la descripción de la imagen aquí

1
ответ дан 03.12.2019, 09:14