如何使用openpyxl遍历电子表格并查找用户分配给他们的内容



>我有一个电子表格,其中用户名在一列中,他们的设备在另一列("B"和"E")。这是工作表中编造的示例:

A          B           C           E         F
CI Number  Username   Department   Equipment  Model
  1423    Mike Brandt   Sales        iPhone    8
  5345    Mike Brandt   Sales        iPad      Air
  8473    Christina      HR          iPhone    6s
  8474    Christina      HR          Laptop   T500
  0983    Christina      HR          iPhone    8

我的想法是遍历 B 中的每一行,如果是同一个用户,则检查它们是否具有相同的设备。

Mike Brandt --> iPhone
Mike Brandt --> iPad

这将是错误的,因为迈克有iPhone和iPad。然而与克里斯蒂娜

Christina --> iPhone
Christina --> Laptop
Christina --> iPhone

将为真,并在单元格 G 中放置一个"*"以标记用户具有重复的项目。

这是我的工作,我们有时必须手动阅读 excel 工作表,并查看用户在收到新设备之前是否没有退回他们的设备。(可能有多达 1000 个用户,所以这就是我尝试它的原因)我无法弄清楚我必须做什么才能比较用户并查看他们是否拥有两个相同的设备。

import openpyxl
path = '/home/steven/Documents/Python/Arbejde/test.xlsx'
# Open Workbook & Worksheet
wb = openpyxl.load_workbook(path)
ws = wb.get_active_sheet()
def clean_list(ws):
    #Loop over e rows, and check each cell for a match.
    for row in range(2, ws.max_row+1):
        for column in "BE":
            cell_name = "{}{}".format(column, row)
            if ws[cell_name].value == ws[cell_name].value:
                #Check code should be here
print(clean_list(ws))

我预计输出是这样的:

8473    Christina      HR          iPhone    6s *
8474    Christina      HR          Laptop   T500
0983    Christina      HR          iPhone    8

解决方案

import pandas as pd
path = '/home/steven/Documents/Python/Arbejde/Altudstyr.xlsx'
xlsx = pd.ExcelFile(path)
df = pd.read_excel(xlsx, 'Ark1') # Reads the excel_sheet
#If dup, print a "*" to column Duplet.
df['Duplet'] = df.duplicated(['End user', 'Standard']).map({True: '*', False: ''})
df.to_excel('Sorted_List.xlsx')

作为替代方案,您可以使用pandas包:

import pandas as pd
df = pd.read_excel('test.xlsx')
mask = df.duplicated(subset=['Username', 'Equipment'])
users = df.loc[mask, 'Username']
result = df[df['Username'].isin(users)]
print(result)

作为打印输出给出:

   CI Number   Username Department Equipment Model
2       8473  Christina         HR    iPhone    6s
3       8474  Christina         HR    Laptop  T500
4        983  Christina         HR    iPhone     8

我建议做一个映射,比如用户使用可以删除重复项的设备进行一组映射。稍后,您可以使用该集合编写单独的行。

相关内容

最新更新