[PYTHON] Geben Sie in vielen Excel gleichzeitig bestimmte Daten in ein bestimmtes Blatt ein

Problem

Haben Sie jemals das Datum in verschiedenen EXCEL an derselben Stelle aktualisiert? Das Problem, das ich dieses Mal lösen möchte, ist: Ich möchte dasselbe Blatt, denselben Ort und dieselben Daten in verschiedenen EXCELs eingeben.

Umgebung

window 10 python 3.7.2 Excel (Erweiterung xlsx) * Da die verwendete Bibliothek openpyxl nur xlsx unterstützen möchte siehe / Vergleich von Bibliotheken, die Excel-Dateien mit Python verarbeiten

Effekt-Diagramm

  1. Erster Excel-Status Die Python-Datei wird im selben Verzeichnis wie die Excel-Datei gespeichert. Wenn nicht, sollten Sie den Pfad erneut angeben, in den Python die Datei einliest. Um es anders herum auszudrücken: Wenn Sie diese Python-Datei in das Verzeichnis der Excel-Datei legen, die Sie aktualisieren möchten, können Sie sie ausführen. image.png

Ich möchte das Datum in Zelle A1 von EXCEL mit einem anderen Namen einfügen. image.png

  1. Dateneingabebildschirm Geben Sie die Daten, die Sie eingeben möchten, den Blattnamen und den Zellenstandort auf dem mit Python TK erstellten Bildschirm ein. image.png

  2. Geben Sie die Daten ein und drücken Sie die Execute-Taste, um die Daten in jedes EXCEL zu schreiben. [Punkt] Schließen Sie beim Ausführen unbedingt das Excel, das Sie aktualisieren möchten, und führen Sie es aus. Andernfalls können Sie das geöffnete Excel nicht bearbeiten, und es tritt ein Fehler auf. image.png

image.png

  1. Wenn der angegebene Blattname in der Excel-Datei nicht vorhanden ist, kann er nicht aktualisiert werden und der Dateiname wird unten angezeigt. image.png

Es ist endlich Zeit, sich mit dem Code zu befassen, zuerst mit dem Gesamtcode und dann mit jedem Teil.

# -*- coding: utf-8 -*-
"""
Geben Sie mehrere Blätter gleichzeitig ein
"""
import glob
from openpyxl import load_workbook
import tkinter as tk
import tkinter.messagebox as tkm

def batExcel(term, sheet, cell):
	#Geben Sie das Master-Blatt an, das ausgefüllt werden soll
	Sheet = sheet

	#Wählen Sie mehrere Dateien aus
	files = glob.glob('*.xlsx')
	successFile = []
	failFile = []

	#Durchlaufen Sie alle Dateien
	for file in files:
		wb = load_workbook(file)
		#Lesen Sie alle Blätter
		sheetnames = (wb.sheetnames)
		
		#Stellen Sie fest, ob eine Master-Sheet-Tabelle vorhanden ist
		if Sheet in sheetnames:
			#Blatt auswählen
			ws = wb[Sheet]
			#Zelle auswählen
			ws[cell] = term
			wb.save(file)
			wb.close()
			successFile.append(file)
		else:
			failFile.append(file)

	#Gibt den EXCEL-Namen der erfolgreichen oder nicht erfolgreichen Eingabe zurück
	return successFile,failFile


#Was passiert, wenn Sie auf Bodan klicken?
#Drei Argumente, Text->Daten, die Sie eingeben möchten, Master->Blatt, das Sie eingeben möchten, Zelle->Zelle, die Sie eingeben möchten
def button_click(text, master, cell):
	#Löschen Sie die Originaldaten in der Liste jedes Mal, wenn Sie die Taste drücken
	ListBox1.delete(1, tk.END)
	ListBox2.delete(1, tk.END)
	files = batExcel(text, master, cell)
	for i in range(len(files[0])):
		ListBox1.insert(tk.END, files[0][i])
	for j in files[1]:
		ListBox2.insert(tk.END, j)

#GUI-Bildschirm erstellen
root = tk.Tk()

#Titel einstellen
root.title("Abrechnungszeitraum")

#Bildschirmgröße einstellen
root.geometry('400x500')

#Legen Sie die Bezeichnung für den Abrechnungszeitraum fest
Static1 = tk.Label(text='Bitte geben Sie den Abrechnungszeitraum im Format JJJJMM ein')
Static1.pack()

#Eingabefeld für Abrechnungszeitraum festlegen
Entry1_term = tk.Entry()
Entry1_term.pack()

#Hauptblattetikett festlegen
Static2 = tk.Label(text='Bitte geben Sie den Masternamen ein, der aktualisiert werden soll')
Static2.pack()

#Stellen Sie das Eingabefeld für das Masterblatt ein
Entry2_sheet = tk.Entry()
Entry2_sheet.pack()

#Legen Sie die Zellenposition auf dem Masterblatt fest
Static3 = tk.Label(text='Bitte geben Sie den zu aktualisierenden Zellenstandort ein')
Static3.pack()

#Legen Sie das Eingabefeld für die Zellenposition auf dem Masterblatt fest
Entry3_cell = tk.Entry()
Entry3_cell.pack()

#Richten Sie eine Run-Taste ein
Button = tk.Button(text='Schaltfläche "Ausführen"', command=lambda: button_click(Entry1_term.get(), Entry2_sheet.get(), Entry3_cell.get()))
Button.pack()

#Installationserfolgslistenfeld installiert
ListBox1 = tk.Listbox(width=50, height=10)
ListBox1.insert(tk.END,'Erfolgreiche Verlängerung des Abrechnungszeitraums EXCEL:')
ListBox1.pack()

#Installationsfehler-Listenfeld installiert
ListBox2 = tk.Listbox(width=50, height=10)
ListBox2.insert(tk.END,'Fehler beim Aktualisieren des Abrechnungszeitraums EXCEL, da das Master Sheet nicht vorhanden ist:')
ListBox2.pack()

#Reagiert auf aktive GUI-Bildschirme wie Mount-Klicks, Schließen des Bildschirms usw.
root.mainloop()

Lassen Sie uns einen tkinter-Dateneingabebildschirm erstellen siehe / Kopieren und Einfügen! Tkinter


import tkinter as tk
import tkinter.messagebox as tkm

#GUI-Bildschirm erstellen
root = tk.Tk()

#Titel einstellen
root.title("Abrechnungszeitraum")

#Bildschirmgröße einstellen
root.geometry('400x500')

#Legen Sie die Bezeichnung für den Abrechnungszeitraum fest
Static1 = tk.Label(text='Bitte geben Sie den Abrechnungszeitraum im Format JJJJMM ein')
Static1.pack()

#Eingabefeld für Abrechnungszeitraum festlegen
Entry1_term = tk.Entry()
Entry1_term.pack()

#Hauptblattetikett festlegen
Static2 = tk.Label(text='Bitte geben Sie den Masternamen ein, der aktualisiert werden soll')
Static2.pack()

#Stellen Sie das Eingabefeld für das Masterblatt ein
Entry2_sheet = tk.Entry()
Entry2_sheet.pack()

#Legen Sie die Zellenposition auf dem Masterblatt fest
Static3 = tk.Label(text='Bitte geben Sie den zu aktualisierenden Zellenstandort ein')
Static3.pack()

#Legen Sie das Eingabefeld für die Zellenposition auf dem Masterblatt fest
Entry3_cell = tk.Entry()
Entry3_cell.pack()

#Richten Sie eine Run-Taste ein
Button = tk.Button(text='Schaltfläche "Ausführen"', command=lambda: button_click(Entry1_term.get(), Entry2_sheet.get(), Entry3_cell.get()))
Button.pack()

#Installationserfolgslistenfeld installiert
ListBox1 = tk.Listbox(width=50, height=10)
ListBox1.insert(tk.END,'Erfolgreiche Verlängerung des Abrechnungszeitraums EXCEL:')
ListBox1.pack()

#Installationsfehler-Listenfeld installiert
ListBox2 = tk.Listbox(width=50, height=10)
ListBox2.insert(tk.END,'Fehler beim Aktualisieren des Abrechnungszeitraums EXCEL, da das Master Sheet nicht vorhanden ist:')
ListBox2.pack()

#Reagiert auf aktive GUI-Bildschirme wie Mount-Klicks, Schließen des Bildschirms usw.
root.mainloop()

Stellen Sie den Fall ein, in dem der Bildschirm abgeschlossen und die Schaltfläche Ausführen gebunden ist


Button = tk.Button(text='Schaltfläche "Ausführen"', command=lambda: button_click(Entry1_term.get(), Entry2_sheet.get(), Entry3_cell.get()))
#Der folgende Code hat den gleichen Effekt
Button = tk.Button(text='Schaltfläche "Ausführen"', command= button_click(Entry1_term.get(), Entry2_sheet.get(), Entry3_cell.get()))

[point] Das Argument sollte jedoch Entry1_term.get () sein. Sobald es in einer Variablen gespeichert und erneut als Argument verwendet wurde, kann der Wert nicht gut übergeben werden (wahrscheinlich, weil es sich um ein Bereichsproblem handelt, bin ich damit nicht vertraut, es tut mir leid ...). Ich erhalte eine Fehlermeldung im folgenden Code


#Eingabefeld einstellen
Entry1 = tk.Entry()
#Holen Sie sich die eingegebenen Daten
Entry1_value = Entry1.get()
#Richten Sie eine Run-Taste ein
Button = tk.Button(text='Schaltfläche "Ausführen"', command=lambda: button_click(Entry1_value)) #error

Wenn Sie auf eine Schaltfläche klicken, werden in vielen Excel gleichzeitig bestimmte Daten in ein bestimmtes Blatt eingegeben und ein case_click-Fall definiert.


#Was passiert, wenn Sie auf Bodan klicken?
#Drei Argumente, Text->Daten, die Sie eingeben möchten, Master->Blatt, das Sie eingeben möchten, Zelle->Zelle, die Sie eingeben möchten
def button_click(text, master, cell):
	#Löschen Sie die Originaldaten in der Liste jedes Mal, wenn Sie die Taste drücken
	ListBox1.delete(1, tk.END)
	ListBox2.delete(1, tk.END)
	files = batExcel(text, master, cell)
	for i in range(len(files[0])):
		ListBox1.insert(tk.END, files[0][i])
	for j in files[1]:
		ListBox2.insert(tk.END, j)

Die [point] -Funktion muss definiert werden, bevor sie verwendet werden kann, dh die button_click-Funktion lautet Button = tk.Button (text = 'execute button', command = button_click (Entry1_term.get (), Entry2_sheet.get () ), Entry3_cell.get ())) Schreiben Sie oben

Definieren Sie eine Funktion zum gleichzeitigen Eingeben bestimmter Daten in ein bestimmtes Blatt in einer großen Anzahl von Excel Der Fluss ist wie folgt.


import glob
from openpyxl import load_workbook

def batExcel(term, sheet, cell):
	#Geben Sie das Master-Blatt an, das ausgefüllt werden soll
	Sheet = sheet

	#Wählen Sie mehrere Dateien aus
	files = glob.glob('*.xlsx')
	successFile = []
	failFile = []

	#Durchlaufen Sie alle Dateien
	for file in files:
		wb = load_workbook(file)
		#Lesen Sie alle Blätter
		sheetnames = (wb.sheetnames)
		
		#Stellen Sie fest, ob eine Master-Sheet-Tabelle vorhanden ist
		if Sheet in sheetnames:
			#Blatt auswählen
			ws = wb[Sheet]
			#Zelle auswählen
			ws[cell] = term
			wb.save(file)
			wb.close()
			successFile.append(file)
		else:
			failFile.append(file)

	#Gibt den EXCEL-Namen der erfolgreichen oder nicht erfolgreichen Eingabe zurück
	return successFile,failFile

Recommended Posts

Geben Sie in vielen Excel gleichzeitig bestimmte Daten in ein bestimmtes Blatt ein
So zählen Sie Zahlen in einem bestimmten Bereich
So wenden Sie mit matplotlib Marker nur auf bestimmte Daten an
So extrahieren Sie Daten in einer bestimmten Spalte in einem bestimmten Blatt in mehreren Excel-Dateien gleichzeitig und fügen Sie die Daten in jede Spalte in einer Zeile ein
Ich möchte eine schöne Ergänzung zu input () in Python hinzufügen
<Pandas> Umgang mit Zeitreihendaten in der Pivot-Tabelle
Wie erstelle ich eine große Menge an Testdaten in MySQL? ??
Zählen Sie bestimmte Zeichenfolgen in einer Datei
Speichern Sie eine bestimmte Variable in tensorflow.session
Versuchen Sie, Daten in MongoDB abzulegen
So erhalten Sie mit pandas DataFrame einen bestimmten Spaltennamen und Indexnamen
So senden Sie ein visualisiertes Bild der in Python erstellten Daten an Typetalk
Erstellen Sie einen Befehl zum Löschen aller temporären Dateien, die in einem bestimmten Ordner generiert wurden
Speichern von CSV-Daten in Amazon Kinesis Streams mit Standardeingabe
So stoppen Sie das Programm bis zu einem bestimmten Datum und einer bestimmten Uhrzeit in Python
Ich möchte in der Einschlussnotation drucken
Wie bekomme ich Stacktrace in Python?
[V11 ~] Ein Memorandum für Misskey
Bücher über Datenwissenschaft, die 2020 gelesen werden sollen
Was tun, wenn bei Do and Return in einem Golang-Test ein Fehler mit zu vielen Eingabeargumenten auftritt?