Я бы хотел многое сделать, но у меня сегодня не хватает времени.
Похоже, есть сообщение об ошибке этой проблемы с index_col=None
согласно этой записи .
Связанные отчеты об ошибках: GH18792 и GH20480
Что я сделал, чтобы обойти эту проблему, чтобы преобразовать данные в строку, то разбить его на составляющие. Получив их, я мог снова запустить split (), чтобы избавиться от индекса.
А пока вот исправление, которое вы ищете:
Заменить:
global dfM
global dfB
global dfQ
global dfSN1
global dfSN2
dfM.set(pd.read_excel('weekexport.xlsx', sheet_name='Foaie1', header=None, usecols="D",index_col=None))
dfB.set(pd.read_excel('weekexport.xlsx', sheet_name='Foaie1', header=None, usecols="E",index_col=None))
dfQ.set(pd.read_excel('weekexport.xlsx', sheet_name='Foaie1', header=None, usecols="F",index_col=None))
dfSN1.set(pd.read_excel('weekexport.xlsx', sheet_name='Foaie1', header=None, usecols="G",index_col=None))
dfSN2.set(pd.read_excel('weekexport.xlsx', sheet_name='Foaie1', header=None, usecols="H",index_col=None))
С:
var_lst = [dfM, dfB, dfQ, dfSN1, dfSN2]
for ndex, i in enumerate(['D', 'E', 'F', 'G', 'H']):
final_string = ''
build_list = str(pd.read_excel('weekexport.xlsx', sheet_name='Foaie1',
header=None, usecols=i, index_col=None)).split('\n')
for string in build_list:
x = ' '.join(string.split()).split()
if len(x) > 1:
final_string = '{} {}\n'.format(final_string, ' '.join(string.split()).split()[1])
var_lst[ndex].set(final_string)
Результаты:
О дальнейшем рассмотрении:
Там это то, что вы можете изменить. Например, вы можете использовать глобальные все в одной строке, если это будет необходимо. global var1, var2, var3 ...
Однако в вашем глобальном коде вообще нет необходимости.
Вы уже создали информацию о входе динамически, поэтому давайте сделаем то же самое для ваших меток и других переменных.
Я также прокомментировал несколько строк, которые вообще не использовались, и ваш код, кажется, все еще работает, поэтому дайте мне знать, если у вас есть какие-либо проблемы.
Я удалил импорт, который не использовался, и произвел некоторую общую очистку вашего кода чтобы более точно следовать PEP8.
Пересмотренный код:
import tkinter as tk
from tkinter import font
from datetime import date, datetime
from openpyxl.styles import Alignment
from warnings import simplefilter
from pandas import ExcelWriter
import pandas as pd
import openpyxl
def export_excel():
# wb_sales = pd.ExcelFile("excel.xlsx") # line not used
sheet_3 = pd.read_excel("excel.xlsx", sheet_name=2, dtype=str)
pd.set_option('display.max_rows', 500)
pd.set_option('display.max_columns', 500)
pd.set_option('display.width', 500)
# read_sheets_name = wb_sales.sheet_names # line not used
weekenter = var.get()
if weekenter == "6":
writer = ExcelWriter('weekexport.xlsx')
sheet_3.query("['6'] in Week").to_excel(writer, 'Foaie1', index=False)
writer.save()
if weekenter == "7":
writer = ExcelWriter('weekexport.xlsx')
sheet_3.query("['7'] in Week").to_excel(writer, 'Foaie1', index=False)
writer.save()
for ndex, i in enumerate(['D', 'E', 'F', 'G', 'H']):
final_string = ''
build_list = str(pd.read_excel('weekexport.xlsx', sheet_name='Foaie1',
header=None, usecols=i, index_col=None)).split('\n')
for string in build_list:
x = ' '.join(string.split()).split()
if len(x) > 1:
final_string = '{} {}\n'.format(final_string, ' '.join(string.split()).split()[1])
var_list[ndex].set(final_string)
def write_to_xlsx():
wb = openpyxl.load_workbook('excel.xlsx')
sheet = wb["Productie"]
# week_number = date.today().isocalendar()[1] # line not used.
ws = wb.active
maxim = ws.max_row + 1
for i in range(8):
ws.merge_cells(start_row=maxim, start_column=i+1, end_row=maxim + 1, end_column=i+1) # A
ws.merge_cells(start_row=maxim, start_column=24, end_row=maxim + 1, end_column=24) # X
ws.merge_cells(start_row=maxim, start_column=25, end_row=maxim + 1, end_column=25) # Y
week_number = date.today().isocalendar()[1]
ws.cell(column=1, row=maxim, value=week_number)
now = datetime.now()
dt_string = now.strftime('%d/%m')
ws.cell(column=2, row=maxim, value=dt_string)
for ndex, entry in enumerate(entry_list):
ws.cell(column=ndex+3, row=maxim, value=entry_list[ndex].get())
entry_list[ndex].delete(0, 'end')
rows = range(1, maxim + 1)
columns = range(1, 8)
for row in rows:
for col in columns:
sheet.cell(row, col).alignment = Alignment(horizontal='center', vertical='center', wrap_text=True)
wb.save("excel.xlsx")
root = tk.Tk()
root.title("Main Menu")
root.geometry("1000x500")
font_mare = font.Font(family='Helvetica', size=14, weight='bold')
var = tk.StringVar()
simplefilter("ignore")
wb = openpyxl.load_workbook('excel.xlsx')
sheet = wb["Productie"]
week_number = date.today().isocalendar()[1]
label_list = ['Model', 'Etapa', 'Batch', 'Cantitate', 'S/N']
entry_list = []
for i in range(len(label_list)):
tk.Label(root, text=label_list[i]).grid(row=i, column=0, sticky='w')
entry_list.append(tk.Entry(root, width=10))
entry_list[-1].grid(row=i, column=1, sticky='w')
tk.Button(root, text='Submit', command=write_to_xlsx).grid(row=2, column=2, sticky='W')
tk.Button(root, text='Week:', command=export_excel).grid(row=6, column=0, sticky='W')
entry = tk.Entry(root, textvariable=var, width=10).grid(row=7, column=0, sticky='w')
label_list_2 = ['Model', 'Batch', 'Cantitate', 'Serial', 'Number']
var_list = []
for ndex, i in enumerate(label_list_2):
var_list.append(tk.StringVar(root))
var_list[-1].set(i)
tk.Label(root, textvariable=var_list[-1], font=font_mare).grid(row=8, column=ndex, sticky="w")
root.mainloop()