关于#Python讀取excel顯示在GUI窗口問題#的问题,如何解决?

def show_excel(self):
    # 创建一个 ttk 样式对象
    style = ttk.Style()
    # 配置样式对象,设置 Treeview 控件的行高、边框、字体等
    style.configure("MyTreeview1.Treeview", rowheight=25, borderwidth=2, relief="solid", font=('Arial', 10))
    # 配置样式对象,设置 Treeview 控件的表头字体
    style.configure("MyTreeview1.Treeview.Heading", font=('Arial', 10, 'bold'))
    # 配置样式对象,设置 Treeview 控件布局
    style.layout("MyTreeview1.Treeview", [('MyTreeview1.Treeview.treearea', {'sticky': 'nswe'})])
    # 通过 iter_rows() 函数读取第一个工作表的列名
    columns1 = next(self.record_sheet.iter_rows(min_row=1, max_row=1, values_only=True))
    # 创建第一个 Treeview 控件,用于显示第一个工作表的内容
    treeview1 = ttk.Treeview(self.container1, columns=columns1, show="headings", style="MyTreeview1.Treeview")
    # 设置第一个 Treeview 控件的位置、行列跨度、边距等
    treeview1.grid(row=1, column=3, rowspan=1, padx=5, pady=5, sticky="nsew")
    # 设置第一个 Treeview 控件列的标题和宽度
    for col in columns1:
        treeview1.heading(col, text=col)
        treeview1.column(col, width=100, anchor="center")
    # 通过 iter_rows() 函数读取第二个工作表的列名
    columns2 = next(self.data_sheet.iter_rows(min_row=1, max_row=1, values_only=True))
    # 创建第二个 Treeview 控件,用于显示第二个工作表的内容
    treeview2 = ttk.Treeview(self.container1, columns=columns2, show="headings")
    # 设置第二个 Treeview 控件的位置、行列跨度、边距等
    treeview2.grid(row=3, column=3, padx=5, pady=5, sticky="nsew")
    # 设置第二个 Treeview 控件列的标题和宽度
    for col in columns2:
        treeview2.heading(col, text=col)
        treeview2.column(col, width=100, anchor="center")
    # 通过 iter_rows() 函数读取第一个工作表的内容,并将其插入到第一个 Treeview 控件中
    for row in self.record_sheet.iter_rows(min_row=2, values_only=True):
        row_values = [cell if cell is not None else "" for cell in row]
        # 如果一行中所有单元格都为空,则跳过该行
        if all(not bool(cell) for cell in row_values):
            continue
        treeview1.insert("", tk.END, values=row_values)
    # 通过 iter_rows() 函数读取第二个工作表的内容,并将其插入到第二个 Treeview 控件中
    for row in self.data_sheet.iter_rows(min_row=2, values_only=True):
        row_values = [cell if cell is not None else "" for cell in row]
        # 如果一行中所有单元格都为空,则跳过该行
        if all(not bool(cell) for cell in row_values):
            continue
        treeview2.insert("", tk.END, values=row_values)

    # 设置文本框大小一致
    self.material_name1.config(width=20)
    self.material_qty.config(width=20)

我需要將讀取excel中數據顯示在文本框中,但excel中有的寫有公式,顯示時數據把公式顯示出來了,怎麽修改


要解决这个问题,需要在读取excel数据时判断单元格是否包含公式,如果包含公式则读取计算后的值,而不是公式本身。
可以这样修改代码:
python
for row in sheet.iter_rows(min_row=2, values_only=True):
    row_values = []
    for cell in row:
        if sheet[cell.row, cell.column].data_type == 'formula':
            row_values.append(sheet[cell.row, cell.column].value)
        else:
            row_values.append(cell if cell is not None else "")

    # 后续代码...
这里我们判断单元格的 data_type 属性,如果是 formula 表示包含公式,那么读取 value 属性获取计算后的值。否则直接读取 cell 的值。
这样就可以避免公式显示在界面上,而是显示计算后的结果。
除此之外,你还需要在读取 excel 文件时启用 formula 计算,可以这样做:
python 
wb = openpyxl.load_workbook(filename, data_only=True)
sheet = wb['Sheet1']
data_only=True 参数可以启用 formula 计算,这样读取单元格值时就会返回计算后的结果,而非公式。