我不知道我的程序发生了什么。我想从 Excel 表格生成报告。看看这两个函数:
def query_data(self):
try:
# Realiza la consulta basada en los criterios seleccionados
codigo = self.codigo.get()
recibido_por = str(self.recibido_por.get())
fecha_inicio = datetime.strptime(str(self.fecha_inicio.get()), "%m/%d/%Y")
fecha_fin = datetime.strptime(str(self.fecha_fin.get()), "%m/%d/%Y")
# Filtra los datos en la hoja de Excel
filtered_data = []
for row in self.tblSource.data_body_range.rows:
row_fecha = self.parse_date(str(row[0].value))
row_codigo = str(int(row[1].value)) if isinstance(row[1].value, float) else str(row[1].value).strip()
row_recibido_por = str(row[10].value).strip()
if (codigo in row_codigo) and (recibido_por in row_recibido_por) and (fecha_inicio <= row_fecha <= fecha_fin):
filtered_data.append((row_fecha.strftime("%m/%d/%y"), row_codigo, row[2].value, row_recibido_por))
# Limpia el Treeview
for item in self.tree.get_children():
self.tree.delete(item)
# Inserta los datos filtrados en el Treeview
for data in filtered_data:
self.tree.insert("", "end", values=data)
except Exception as e:
print(f"Error: {e}")
def parse_date(self, date_str):
for fmt in ("%m/%d/%Y", "%m/%d/%y"):
try:
return datetime.strptime(date_str, fmt)
except ValueError:
continue
raise ValueError(f"Date format for '{date_str}' is not supported")
注意:我使用 xlwings 模块。以下是初始化的代码:
def __init__(self, root):
self.root = root
self.root.title("Generar Reporte")
self.root.geometry("800x600")
# Variables globales
self.codigo = tk.StringVar()
self.reporte_tipo = tk.StringVar()
self.recibido_por = tk.StringVar()
self.fecha_inicio = tk.StringVar()
self.fecha_fin = tk.StringVar()
currentDate = datetime.today()
try:
# Ruta al archivo de Excel
self.file_path = my_path # Here goes a local path which I prefer not to display.
# Verifica si el archivo existe
if not os.path.exists(self.file_path):
raise FileNotFoundError(f"No such file: '{self.file_path}'")
# Abre el libro de Excel
self.wb = xw.Book(self.file_path)
self.ws = self.wb.sheets["Entra y Sali"]
self.tblSource = self.ws.tables["Tabla2"]
# Obtener las columnas de la tabla
self.codigoColumn = self.tblSource.range.columns[1]
self.materialColumn = self.tblSource.range.columns[2]
self.receivedByColumn = self.tblSource.range.columns[10]
# Construye los widgets
self.create_widgets()
# Rellenar ComboBoxes
self.populate_combobox(self.codigoColumn, self.cmb_codigo)
self.populate_combobox(self.receivedByColumn, self.cmb_recibido_por)
except Exception as e:
print(f"Error al inicializar el formulario: {str(e)}")
终端中弹出此错误:
Error: time data '1/1/21' does not match format '%m/%d/%Y'
我的Excel文件中的日期格式如下:%d%m%y。预先感谢您的帮助。
我尝试调整查询功能。我尝试调整其中的日期格式。我实现了解析函数作为解决问题的手段,但我什么也没实现。
也许不是答案,更多的是帮助指导您解决问题所在。
strptime 有很多不同的格式,如以下链接所示; https://docs.python.org/3/library/datetime.html#strftime-and-strptime-behavior
从中您可以看到给定的日期格式 '%m/%d/%Y' 期望的值与 mm/dd/yyyy 完全相同,但您的输入为 m/d/yy。
我知道您可以通过将格式从 Y 更改为 y 来修复年份,而日期格式为“%m/%d/%y”。这并不能修复月份和日期,但也许它不需要完整的格式,无法确定。
希望这有帮助。