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 计算,这样读取单元格值时就会返回计算后的结果,而非公式。