[PYTHON] Entrer simultanément des données spécifiques sur une feuille spécifique dans de nombreux Excel

problème

Avez-vous déjà mis à jour la date au même endroit dans divers EXCEL? Le problème que je veux résoudre cette fois est: Je veux saisir la même feuille, le même emplacement et les mêmes données dans divers EXCEL.

environnement

window 10 python 3.7.2 Excel (extension xlsx) * Puisque la bibliothèque openpyxl utilisée veut uniquement prendre en charge xlsx voir / comparaison des bibliothèques qui gèrent les fichiers Excel avec Python

Diagramme d'effet

  1. Premier état Excel Le fichier python est enregistré dans le même répertoire que le fichier Excel. Sinon, vous devez à nouveau spécifier le chemin dans lequel python lira le fichier. Pour le dire autrement, si vous placez ce fichier python dans le répertoire du fichier Excel que vous souhaitez mettre à jour, vous pouvez l'exécuter. image.png

Je veux mettre la date dans la cellule A1 de EXCEL avec un nom différent. image.png

  1. Écran de saisie des données Entrez les données que vous souhaitez saisir, le nom de la feuille et l'emplacement de la cellule sur l'écran créé avec python TK. image.png

  2. Entrez les données et appuyez sur le bouton Exécuter pour écrire les données dans chaque EXCEL. [point] Lors de l'exécution, assurez-vous de fermer l'Excel que vous souhaitez mettre à jour et de l'exécuter, sinon vous ne pourrez pas modifier dans l'Excel ouvert et une erreur se produira. image.png

image.png

  1. Si le nom de feuille spécifié n'existe pas dans le fichier Excel, il ne peut pas être mis à jour et le nom de fichier est affiché ci-dessous. image.png

Il est enfin temps d'entrer dans le code, d'abord le code global, puis chaque partie.

# -*- coding: utf-8 -*-
"""
Saisissez plusieurs feuilles en même temps
"""
import glob
from openpyxl import load_workbook
import tkinter as tk
import tkinter.messagebox as tkm

def batExcel(term, sheet, cell):
	#Spécifiez la feuille principale à remplir
	Sheet = sheet

	#Sélectionnez plusieurs fichiers
	files = glob.glob('*.xlsx')
	successFile = []
	failFile = []

	#Parcourez tous les fichiers
	for file in files:
		wb = load_workbook(file)
		#Lire toutes les fiches
		sheetnames = (wb.sheetnames)
		
		#Déterminer si une table de feuille principale existe
		if Sheet in sheetnames:
			#Sélectionnez la feuille
			ws = wb[Sheet]
			#Sélectionnez la cellule
			ws[cell] = term
			wb.save(file)
			wb.close()
			successFile.append(file)
		else:
			failFile.append(file)

	#Renvoie le nom EXCEL de la saisie réussie ou non
	return successFile,failFile


#Que se passe-t-il lorsque vous cliquez sur Bodan
#Trois arguments, texte->Données que vous souhaitez saisir, maître->Feuille que vous souhaitez saisir, cellule->Cellule que vous souhaitez saisir
def button_click(text, master, cell):
	#Effacez les données d'origine de la liste chaque fois que vous appuyez sur le bouton
	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)

#Créer un écran GUI
root = tk.Tk()

#Définir le titre
root.title("Période comptable")

#Définir la taille de l'écran
root.geometry('400x500')

#Définir le libellé de la période comptable
Static1 = tk.Label(text='Veuillez saisir la période comptable au format AAAAMM')
Static1.pack()

#Définir le champ de saisie de la période comptable
Entry1_term = tk.Entry()
Entry1_term.pack()

#Définir l'étiquette de la feuille principale
Static2 = tk.Label(text='Veuillez saisir le nom du maître à mettre à jour')
Static2.pack()

#Définir le champ de saisie de la feuille principale
Entry2_sheet = tk.Entry()
Entry2_sheet.pack()

#Définir l'étiquette d'emplacement de cellule sur la feuille principale
Static3 = tk.Label(text='Veuillez saisir l'emplacement de la cellule à mettre à jour')
Static3.pack()

#Définir le champ de saisie de l'emplacement de la cellule sur la feuille principale
Entry3_cell = tk.Entry()
Entry3_cell.pack()

#Configurer un bouton d'exécution
Button = tk.Button(text='Bouton Exécuter', command=lambda: button_click(Entry1_term.get(), Entry2_sheet.get(), Entry3_cell.get()))
Button.pack()

#Zone de liste de réussite de l'installation installée
ListBox1 = tk.Listbox(width=50, height=10)
ListBox1.insert(tk.END,'Renouvellement réussi de la période comptable EXCEL:')
ListBox1.pack()

#Zone de liste des échecs d'installation installée
ListBox2 = tk.Listbox(width=50, height=10)
ListBox2.insert(tk.END,'Échec de la mise à jour de la période comptable EXCEL car la feuille principale n'existe pas:')
ListBox2.pack()

#Réagit aux écrans de l'interface graphique active, tels que les clics de montage, la fermeture de l'écran, etc.
root.mainloop()

Créons un écran de saisie de données tkinter voir / copier et coller! Tkinter


import tkinter as tk
import tkinter.messagebox as tkm

#Créer un écran GUI
root = tk.Tk()

#Définir le titre
root.title("Période comptable")

#Définir la taille de l'écran
root.geometry('400x500')

#Définir le libellé de la période comptable
Static1 = tk.Label(text='Veuillez saisir la période comptable au format AAAAMM')
Static1.pack()

#Définir le champ de saisie de la période comptable
Entry1_term = tk.Entry()
Entry1_term.pack()

#Définir l'étiquette de la feuille principale
Static2 = tk.Label(text='Veuillez saisir le nom du maître à mettre à jour')
Static2.pack()

#Définir le champ de saisie de la feuille principale
Entry2_sheet = tk.Entry()
Entry2_sheet.pack()

#Définir l'étiquette d'emplacement de cellule sur la feuille principale
Static3 = tk.Label(text='Veuillez saisir l'emplacement de la cellule à mettre à jour')
Static3.pack()

#Définir le champ de saisie de l'emplacement de la cellule sur la feuille principale
Entry3_cell = tk.Entry()
Entry3_cell.pack()

#Configurer un bouton d'exécution
Button = tk.Button(text='Bouton Exécuter', command=lambda: button_click(Entry1_term.get(), Entry2_sheet.get(), Entry3_cell.get()))
Button.pack()

#Zone de liste de réussite de l'installation installée
ListBox1 = tk.Listbox(width=50, height=10)
ListBox1.insert(tk.END,'Renouvellement réussi de la période comptable EXCEL:')
ListBox1.pack()

#Zone de liste des échecs d'installation installée
ListBox2 = tk.Listbox(width=50, height=10)
ListBox2.insert(tk.END,'Échec de la mise à jour de la période comptable EXCEL car la feuille principale n'existe pas:')
ListBox2.pack()

#Réagit aux écrans de l'interface graphique active, tels que les clics de montage, la fermeture de l'écran, etc.
root.mainloop()

Définissez le cas où l'écran est terminé et le bouton d'exécution est lié


Button = tk.Button(text='Bouton Exécuter', command=lambda: button_click(Entry1_term.get(), Entry2_sheet.get(), Entry3_cell.get()))
#Le code ci-dessous a le même effet
Button = tk.Button(text='Bouton Exécuter', command= button_click(Entry1_term.get(), Entry2_sheet.get(), Entry3_cell.get()))

[point] Cependant, l'argument doit être Entry1_term.get (), une fois enregistré dans une variable et utilisé à nouveau comme argument, la valeur ne peut pas être bien passée (probablement parce que c'est un problème de portée, je ne suis pas familier avec elle, donc je suis désolé ...) , J'obtiens une erreur dans le code ci-dessous


#Définir le champ de saisie
Entry1 = tk.Entry()
#Récupérez les données saisies
Entry1_value = Entry1.get()
#Configurer un bouton d'exécution
Button = tk.Button(text='Bouton Exécuter', command=lambda: button_click(Entry1_value)) #error

Lorsqu'un bouton est cliqué, des données spécifiques sont entrées dans une feuille spécifique en même temps dans de nombreux Excel, et un cas button_click est défini.


#Que se passe-t-il lorsque vous cliquez sur Bodan
#Trois arguments, texte->Données que vous souhaitez saisir, maître->Feuille que vous souhaitez saisir, cellule->Cellule que vous souhaitez saisir
def button_click(text, master, cell):
	#Effacez les données d'origine de la liste chaque fois que vous appuyez sur le bouton
	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)

La fonction [point] doit être définie avant de pouvoir être utilisée, c'est-à-dire que la fonction button_click est Button = tk.Button (text = 'execute button', command = button_click (Entry1_term.get (), Entry2_sheet.get () ), Entry3_cell.get ())) Écrivez ci-dessus

Définir une fonction pour saisir simultanément des données spécifiques dans une feuille spécifique dans un grand nombre d'Excel Le flux est le suivant. -Pour écrire dans tous les fichiers, lisez l'ordre de tous les fichiers → feuille → cellule, et obtenez d'abord [Feuille] [A1] de tous les fichiers.


import glob
from openpyxl import load_workbook

def batExcel(term, sheet, cell):
	#Spécifiez la feuille principale à remplir
	Sheet = sheet

	#Sélectionnez plusieurs fichiers
	files = glob.glob('*.xlsx')
	successFile = []
	failFile = []

	#Parcourez tous les fichiers
	for file in files:
		wb = load_workbook(file)
		#Lire toutes les fiches
		sheetnames = (wb.sheetnames)
		
		#Déterminer si une table de feuille principale existe
		if Sheet in sheetnames:
			#Sélectionnez la feuille
			ws = wb[Sheet]
			#Sélectionnez la cellule
			ws[cell] = term
			wb.save(file)
			wb.close()
			successFile.append(file)
		else:
			failFile.append(file)

	#Renvoie le nom EXCEL de la saisie réussie ou non
	return successFile,failFile

Recommended Posts

Entrer simultanément des données spécifiques sur une feuille spécifique dans de nombreux Excel
Comment compter les nombres dans une plage spécifique
Comment appliquer des marqueurs uniquement à des données spécifiques avec matplotlib
Pour extraire des données dans une colonne spécifique dans une feuille spécifique dans plusieurs fichiers Excel à la fois et mettre les données dans chaque colonne sur une ligne
Je veux ajouter un joli complément à input () en python
<Pandas> Comment gérer les données de séries chronologiques dans le tableau croisé dynamique
Comment créer une grande quantité de données de test dans MySQL? ??
Compter des chaînes spécifiques dans un fichier
Enregistrer une variable spécifique dans tensorflow.session
Essayez de mettre des données dans MongoDB
Comment obtenir un nom de colonne et un nom d'index spécifiques avec Pandas DataFrame
Comment envoyer une image visualisée des données créées en Python à Typetalk
Créez une commande pour supprimer tous les fichiers temporaires générés dans un dossier spécifique
Comment stocker des données CSV dans Amazon Kinesis Streams avec une entrée standard
Comment arrêter le programme jusqu'à une date et une heure spécifiques en python
Je veux imprimer dans la notation d'inclusion
Comment obtenir stacktrace en python
[V11 ~] Un mémorandum à mettre dans Misskey
Livres sur la science des données à lire en 2020
Que faire si vous recevez une erreur d'appel avec trop d'arguments d'entrée à faire et retourner dans un test de golang