#python-3.x #openpyxl
#python-3.x #openpyxl
Вопрос:
Я начал работать с openpyxl, и я очень новичок в этом.
Цель состоит в том, чтобы скопировать все строки на новый лист, когда условие выполняется, код, который у меня есть, работает, но вместо копирования значений на новый лист в соответствии с условием, он копирует все значения на тот же лист.
PS: пожалуйста, простите мой английский
import openpyxl as excel
def trata_excel(nomeficheiro):
# variable declaration
livro = excel.load_workbook(nomeficheiro)
folha = livro['Folha1']
# it stores the headers and respective column
cabeçalhos = {}
alvos = []
# i'm retriving all the headers from the column
for coluna in range(1,folha.max_column 1):
celula = folha.cell(row=1, column=coluna)
# And add it to the dictionary
cabeçalhos.update({celula.value:coluna})
# checking if header "Alvo" in the dictionary
if "Alvo" in cabeçalhos:
# Getting the column number for the header Alvo
coluna_alvo = cabeçalhos["Alvo"]
# check all the rows to see
for linha in range(2,folha.max_row 1):
# How many Alvo
celula_alvo = folha.cell(linha,coluna_alvo)
# Check if the Alvo is not already in the list
if celula_alvo.value not in alvos:
#if not i'm adding it
alvos.append(celula_alvo.value)
else:
return "Não encontrei a coluna referente a 'Alvo"
#checking whats the "Tipo de Produto" column number
coluna_produto = cabeçalhos["Tipo de Produto"]
# i'm going to check for each Alvo
for alvo in alvos:
# Creating a new sheet with Alvo name
nova_folha = livro.create_sheet(str(alvo))
# for each alvo going to see each line
nova_linha = 1 # variable to add all the lines in consecutive line
for linha in range(2,folha.max_row 1):
produto = folha.cell(linha, coluna_produto)
# here i select the values that i want
if (alvo == celula_alvo.value and produto.value =="Voz" or
alvo == celula_alvo.value and produto.value == "SMS" or
alvo == celula_alvo.value and produto.value=="MMS"):
nova_linha = 1
for coluna in range(1, folha.max_column 1):
valor = folha.cell(row=linha, column=coluna).value
livro[str(alvo)].cell(row=nova_linha,column=coluna, value= valor)
livro.save("novo.xlsx")
#print(cabeçalhos)
# just to control
print(alvos)
Комментарии:
1. В этом коде нет второго листа.
2. Да, это не так. Цель состоит в том, чтобы для каждого Alvo создать рабочий лист с именем Alvo и добавить те значения, которые принадлежат этому Alvo, на его рабочий лист
3. Почему
livro[str(alvo)]
вместо использованияnova_folha
?4. Цель состояла в том, чтобы легко идентифицировать Alvo, но это может быть nova_folha, и тогда я переименую его вручную.