#python #excel #pandas #openpyxl
#python #excel #панды #openpyxl
Вопрос:
Я новичок в Python. Я хотел бы обрабатывать данные Excel с помощью Python. Я создал приведенный ниже код. Код работает при первом запуске. Он обнаруживает все данные, присутствующие в файле Excel, даже формулы. Проблема в том, что это не работает во второй раз. Это означает, что отсутствует столбец данных. Это столбец, в котором есть формулы. Я хотел бы, чтобы мой код работал постоянно. Я заметил, что он больше не обнаруживает формулы при втором запуске всего моего кода. Мой код интерпретирует формулы как ‘NaN’, и при чтении моих данных я прошу не отображать ‘NaN’. Вот почему ничего нет. Второе замечание: если я сохраню свой файл Excel после первого запуска моего кода, мой код снова заработает. Я хотел бы, чтобы мой код работал постоянно. Мой код:
import pandas as pd
import numpy as np
import xlsxwriter
from openpyxl import load_workbook
from pandas import ExcelWriter
from pandas import ExcelFile
data=pd.read_excel("site.xlsx","Feuille1", keep_default_na=False, skiprows = [0,1],usecols=[1,2,3,4])
print(data)
totalballon=[]
b=[]
espece=np.where(data['Unnamed: 1']=='TOTAL Espèces')[0]
carte=np.where(data['Unnamed: 1']=='TOTAL CB')[0]
cheque=np.where(data['Unnamed: 1']=='TOTAL Chèque')[0]
articles=["Ballon bleu", "CH24 jaune", "Ballon rouge", "Chapeau", "Ballon vert", "Pantalon", "Fleurs"]
print(np.sum(data['Unnamed: 3'][espece]))
print(np.sum(data['Unnamed: 3'][carte]))
print(np.sum(data['Unnamed: 3'][cheque]))
for i in articles:
nb=np.where(data['Unnamed: 1']==i)[0]
b.append(np.sum(data['Unnamed: 0'][nb]))
print(b)
ballon=["Ballon bleu", "Ballon rouge", "Ballon vert"]
for j in ballon:
nb=np.where(data['Unnamed: 1']==j)[0]
totalballon.append(np.sum(data['Unnamed: 0'][nb]))
totalballon=[sum(totalballon)]
print(totalballon)
with pd.ExcelWriter('site.xlsx', engine='openpyxl') as writer:
writer.book = load_workbook('site.xlsx')
TOTALespece = np.sum(data['Unnamed: 3'][espece])
TOTALcarte = np.sum(data['Unnamed: 3'][carte])
TOTALcheque = np.sum(data['Unnamed: 3'][cheque])
df1 = pd.DataFrame({'articles':articles})
df2 = pd.DataFrame({'nombres':b})
df3 = pd.DataFrame({'Total ballon':totalballon})
dfe = pd.DataFrame({'TOTAL Espèces':[TOTALespece]})
dfcarte = pd.DataFrame({'TOTAL CB':[TOTALcarte]})
dfcheque = pd.DataFrame({'TOTAL Chèque':[TOTALcheque]})
df1.to_excel(writer, "Feuille2", index=False)
df2.to_excel(writer, "Feuille2", index=False, startcol=1)
df3.to_excel(writer, "Feuille2", index=False, startcol=2)
dfe.to_excel(writer, "Feuille2", index=False, startcol=3)
dfcarte.to_excel(writer, "Feuille2", index=False, startcol=4)
dfcheque.to_excel(writer, "Feuille2", index=False, startcol=5)
writer.book.save('site.xlsx')
writer.book.close()
Печать (данных) во второй раз после запуска кода
Безымянный столбец 3 больше не отображается. Именно в этом столбце находятся все формулы Excel. Мой github с файлом Excel и кодом python
Комментарии:
1. Это связано с ограничениями
xlsxwriter
и работой с формулами."XlsxWriter doesn’t calculate the result of a formula and instead stores the value 0 as the formula result. It then sets a global flag in the XLSX file to say that all formulas and functions should be recalculated when the file is opened."
Ознакомьтесь с документацией . Формулы интерпретируются только после сохранения файла, а затем повторного открытия. Вот почему это работает после сохранения файла, открытия его и повторного запуска кода.2. Да, я вижу, но он не дает мне решения моей проблемы. Так что у меня нет выбора. Должен ли я записывать каждый раз? другого способа сделать это нет. ?