错误:时间数据“1/1/21”与格式“%m/%d/%Y”不匹配

问题描述 投票:0回答:1

我不知道我的程序发生了什么。我想从 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。预先感谢您的帮助。

我尝试调整查询功能。我尝试调整其中的日期格式。我实现了解析函数作为解决问题的手段,但我什么也没实现。

python excel string datetime
1个回答
-1
投票

也许不是答案,更多的是帮助指导您解决问题所在。

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”。这并不能修复月份和日期,但也许它不需要完整的格式,无法确定。

希望这有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.