# 在筛选后的数据中再筛选出当天日期的数据 today = now.strftime('%Y/%m/%d') filtered_data = filter(lambda x: x[2].value == today, filtered_data) # 将筛选后的数据的第1列数据复制到新的工作表2中的第一列 wb3 = openpyxl.Workbook() ws3 = wb3.active for i, row in enumerate(filtered_data): ws3.cell(row=i+1, column=1, value=row[8].value)
时间: 2024-03-28 22:42:02 浏览: 112
你的代码已经实现了将筛选出来的当天日期的数据复制到新的工作表2中的第一列。以下是你的代码和解释:
```python
# 获取当天日期
today = now.strftime('%Y/%m/%d')
# 筛选出当天日期的数据
filtered_data = filter(lambda x: x[2].value == today, filtered_data)
# 将筛选后的数据的第1列数据复制到新的工作表2中的第一列
wb3 = openpyxl.Workbook()
ws3 = wb3.active
for i, row in enumerate(filtered_data):
ws3.cell(row=i+1, column=1, value=row[8].value)
```
首先,使用 `now.strftime('%Y/%m/%d')` 获取当天日期,并将其赋值给变量 `today`。
然后,使用 `filter()` 函数筛选出 `filtered_data` 中日期为当天日期的行数据,并将结果赋值给 `filtered_data`。
最后,使用 `openpyxl` 库创建一个新的工作簿 `wb3`,获取它的活动工作表 `ws3`,并将筛选后的数据的第1列数据复制到新的工作表2中的第一列。
相关问题
在筛选后的数据中再筛选出当天日期的数据 today = now.strftime('%Y/%m/%d') filtered_data = filter(lambda x: x[2].value == today, filtered_data) # 将筛选后的数据的第9列数据复制到新的工作表2中的第一列 wb3 = openpyxl.Workbook() ws3 = wb3.active for i, row in enumerate(filtered_data): ws3.cell(row=i+1, column=1, value=row[8].value)根據這段代碼在將複製過去的數據清除重複保留唯一值
如果你想将复制到新工作簿的数据去除重复项,可以使用 `set()` 函数将数据转换为集合,从而去除重复项,然后将结果写入新工作簿中。以下是修改后的代码:
```python
import openpyxl
# 打开原始工作簿和工作表
wb1 = openpyxl.load_workbook('原始工作簿.xlsx')
ws1 = wb1.active
# 筛选数据
today = now.strftime('%Y/%m/%d')
filtered_data = filter(lambda x: x[2].value == today, ws1.rows)
# 创建新的工作簿和工作表
wb3 = openpyxl.Workbook()
ws3 = wb3.active
# 将筛选后的数据的第9列数据复制到新的工作表2中的第一列
values = set([row[8].value for row in filtered_data])
for i, value in enumerate(values):
ws3.cell(row=i+1, column=1, value=value)
# 保存工作簿
wb3.save('新工作簿3.xlsx')
```
首先,使用 `now.strftime('%Y/%m/%d')` 获取当天日期,并将其赋值给变量 `today`。
然后,使用 `filter()` 函数筛选出 `ws1` 中日期为当天日期的行数据,并将结果赋值给 `filtered_data`。
接着,创建一个新的工作簿 `wb3`,获取它的活动工作表 `ws3`。
然后,将筛选后的数据的第9列数据转换为集合并赋值给 `values`,使用 `set()` 函数去除重复项。
最后,使用 `for` 循环遍历去重后的所有值,并将每个值写入新工作簿wb3的第一列。
在右下側添加文本標簽 for i, sheet_name in enumerate(self.sheet_names): label = tk.Label(self.unique_listbox, text=sheet_name) # 打开文件并筛选当天日期 workbook = xl.load_workbook(filepath) for sheet_name in self.sheet_names: sheet = workbook.active today = datetime.datetime.now().strftime('%Y/%m/%d') filtered_rows = [] for row in sheet.iter_rows(min_row=3): if row[2].value == today and row[8].value == sheet_name: filtered_rows.append(row) # 在右下側添加文本標簽 label = tk.Label(self.unique_listbox, text=sheet_name) if filtered_rows: label.config(text=f"{sheet_name} - 已點檢") else: label.config(text=f"{sheet_name} - 未點檢") label.grid(row=i // 5, column=i % 5, sticky="ew", padx=1, pady=1)這句代碼中爲什麽只有一個工作表標簽名稱比對
这段代码中只有一个工作表标签名称比对,是因为在循环中,每次都重新赋值了`sheet_name`变量,导致在比对时只能拿到最后一个工作表的名称。如果要比对多个工作表的名称,可以将比对的代码放在`enumerate`循环中。例如:
```
for i, sheet_name in enumerate(self.sheet_names):
# 打开文件并筛选当天日期
workbook = xl.load_workbook(filepath)
for sheet in workbook:
if sheet.title == sheet_name:
today = datetime.datetime.now().strftime('%Y/%m/%d')
filtered_rows = []
for row in sheet.iter_rows(min_row=3):
if row[2].value == today:
filtered_rows.append(row)
# 在右下側添加文本標簽
label = tk.Label(self.unique_listbox, text=sheet_name)
if filtered_rows:
label.config(text=f"{sheet_name} - 已點檢")
else:
label.config(text=f"{sheet_name} - 未點檢")
label.grid(row=i // 5, column=i % 5, sticky="ew", padx=1, pady=1)
```
这样就可以比对多个工作表的名称了。
阅读全文