class ExcelApp: def init(self, master): self.master = master master.title("Excel App")# 创建工具栏 toolbar = tk.Frame(master, height=30) tk.Button(toolbar, text="打开", command=self.open_file).pack(side=tk.LEFT, padx=2, pady=2) tk.Button(toolbar, text="保存", command=self.save_file).pack(side=tk.LEFT, padx=2, pady=2) toolbar.pack(side=tk.TOP, fill=tk.X) def save_file(self): def show_sheet(self, sheet_name): self.textbox.tag_configure("left", justify="left") sheet = self.workbook[sheet_name] rows = sheet.max_row # 清空文本框 self.textbox.delete(1.0, tk.END) # 添加表名并设置居中标签 self.textbox.insert(tk.END, sheet_name + ":\n", "center") # 显示工作表内容,并在相应数据后面添加下拉输入框 for row in sheet.iter_rows(values_only=True): for i, cell in enumerate(row): line = str(cell) + "\t" if i == 0: # 在第一列数据后面添加下拉输入框 combobox = tk.ttk.Combobox(self.textbox, values=["下拉选项1", "下拉选项2", "下拉选项3"]) combobox.pack(side=tk.TOP, padx=10, pady=5) self.textbox.window_create(tk.END, window=combobox) self.textbox.insert(tk.END, line, "left") self.textbox.insert(tk.END, "\n") # 设置居中标签的样式 self.textbox.tag_configure("center", justify="center", font=("Arial", 14, "bold")) 根據這個代碼,在用戶點擊保存按鈕后獲取窗口中文本框中下拉輸入框内容和數據内容按列寫入一個excel中,其中文本框中第一行内容單獨寫入一列的完整代碼
时间: 2023-11-01 13:07:35 浏览: 118
以COM对象方式显示或隐藏Excel的工具栏
抱歉,您的代码中存在一些缩进问题,我无法直接运行。但是,根据您的代码,我可以看出您是在使用 Python 的 tkinter 和 openpyxl 库来实现一个 Excel App。在用户点击保存按钮后,您将从文本框中获取下拉输入框的内容和数据内容,并将其按列写入一个 Excel 文件中。以下是一些可能有用的提示:
1. 使用 tkinter 的 filedialog 模块来获取保存文件的路径。
2. 使用 openpyxl 库中的 Workbook 类来创建一个新的 Excel 文件。
3. 使用 Workbook.create_sheet() 方法创建一个新的工作表。
4. 使用 Worksheet.cell() 方法将数据逐行写入 Excel 文件中。
下面是一个可能的代码实现:
```python
import tkinter as tk
from tkinter import ttk, filedialog
import openpyxl
class ExcelApp:
def __init__(self, master):
self.master = master
master.title("Excel App")
# 创建工具栏
toolbar = tk.Frame(master, height=30)
tk.Button(toolbar, text="打开", command=self.open_file).pack(side=tk.LEFT, padx=2, pady=2)
tk.Button(toolbar, text="保存", command=self.save_file).pack(side=tk.LEFT, padx=2, pady=2)
toolbar.pack(side=tk.TOP, fill=tk.X)
# 创建文本框
self.textbox = tk.Text(master)
self.textbox.pack(side=tk.TOP, fill=tk.BOTH, expand=True)
# 初始化 Workbook 对象
self.workbook = openpyxl.Workbook()
def open_file(self):
# 打开文件对话框
filename = filedialog.askopenfilename(defaultextension=".xlsx", filetypes=[("Excel 文件", "*.xlsx")])
if filename:
# 读取 Excel 文件并显示在文本框中
self.workbook = openpyxl.load_workbook(filename)
sheet_names = self.workbook.sheetnames
self.show_sheet(sheet_names[0])
def save_file(self):
# 打开文件对话框
filename = filedialog.asksaveasfilename(defaultextension=".xlsx", filetypes=[("Excel 文件", "*.xlsx")])
if filename:
# 创建新的工作表并写入数据
sheet_name = "Sheet1"
sheet = self.workbook.create_sheet(title=sheet_name)
# 写入第一行数据
first_row = self.textbox.get("1.0", "1.end").split("\t")
for i, cell in enumerate(first_row):
sheet.cell(row=1, column=i+1, value=cell.strip())
# 写入其他数据
row_num = 2
for line in self.textbox.get("2.0", tk.END).split("\n"):
row_data = line.split("\t")
for i, cell in enumerate(row_data):
if i == 0:
# 写入下拉输入框的内容
sheet.cell(row=row_num, column=i+1, value=cell.strip())
else:
# 写入数据
sheet.cell(row=row_num, column=i+1, value=cell.strip())
row_num += 1
# 保存 Excel 文件
self.workbook.save(filename)
def show_sheet(self, sheet_name):
self.textbox.tag_configure("left", justify="left")
sheet = self.workbook[sheet_name]
rows = sheet.max_row
# 清空文本框
self.textbox.delete(1.0, tk.END)
# 添加表名并设置居中标签
self.textbox.insert(tk.END, sheet_name + ":\n", "center")
# 显示工作表内容,并在相应数据后面添加下拉输入框
for row in sheet.iter_rows(values_only=True):
for i, cell in enumerate(row):
line = str(cell) + "\t"
if i == 0:
# 在第一列数据后面添加下拉输入框
combobox = ttk.Combobox(self.textbox, values=["下拉选项1", "下拉选项2", "下拉选项3"])
combobox.pack(side=tk.TOP, padx=10, pady=5)
self.textbox.window_create(tk.END, window=combobox)
self.textbox.insert(tk.END, line, "left")
else:
self.textbox.insert(tk.END, line, "left")
self.textbox.insert(tk.END, "\n")
# 设置居中标签的样式
self.textbox.tag_configure("center", justify="center", font=("Arial", 14, "bold"))
# 创建主窗口并启动应用程序
root = tk.Tk()
app = ExcelApp(root)
root.mainloop()
```
阅读全文