繁体   English   中英

select 个单元格来自 excel 表 python

[英]select cells from an excel table python

我有一个 excel 表,其中包含:

身份证产品 03/1/2021 16/1/2022 12/2/2022 14/3/2023
一种 4个 1个 2个 5个
6个 1个 3个
C 7 6个

在同一张表中,我有一个包含(年份和月份)的下拉列表

在此处输入图像描述

  • 如果我 select 在下拉列表中,例如年 = 2020 和月 = 1,

它会返回这样的东西:

身份证产品 03/1/2021
一种 4个
6个
C

然后它将计算单元格的 som:在这种情况下为 som = 10

这是我的代码:

# import load_workbook
import pandas as pd
import numpy as np
from openpyxl import load_workbook
from openpyxl.worksheet.datavalidation import DataValidation
from openpyxl import Workbook
from openpyxl.styles import PatternFill

# set file path
filepath= r'test.xlsx'

wb=load_workbook(filepath)
ws=wb["sheet1"]


#Generates 10 year in the Column MK;
for number in range(1,10): 
    ws['MK{}'.format(number)].value= "202{}".format(number)
    
data_val = DataValidation(type="list",formula1='=MK1:MK10') 
ws.add_data_validation(data_val)

# drop down list with all the values from the column MK
data_val.add(ws["E2"]) 

#Generates the numbers of month in the Column MN;
for numbers in range(1,12): 
    ws['MN{}'.format(numbers)].value= "{}".format(numbers)
    

data_vals = DataValidation(type="list",formula1='=MN1:MN14') 
ws.add_data_validation(data_vals)


# drop down list with all the values from the sheet list column MK
data_vals.add(ws["E3"]) 
      
# add a color to the cell 'year' and 'month'
ws['E2'].fill = PatternFill(start_color='FFFFFF00', end_color='FFFFFF00', fill_type = 'solid')
ws['E3'].fill = PatternFill(start_color='FFFFFF00', end_color='FFFFFF00', fill_type = 'solid')


# save workbook
wb.save(filepath)

有什么建议么?

感谢您的帮助。

假设您的 excel 文件如下所示:

在此处输入图像描述


最终代码如下所示:

import xlrd
file = r'C:\path\test_exl.xlsx'
sheetname='Sheet1'
n=2
df = pd.read_excel(file,skiprows=[*range(2)],index_col=[0])

workbook = xlrd.open_workbook(file)
worksheet = workbook.sheet_by_name(sheetname)
year = worksheet.cell(0,0).value
month = worksheet.cell(1,0).value

datetime_cols= pd.to_datetime(df.columns,dayfirst=True,errors='coerce')
out = (df.loc[:,(datetime_cols.year == year) & (datetime_cols.month == month)]
       .reset_index())

print(out)

  ID Product  03-01-2021
0          A         4.0
1          B         6.0
2          C         NaN

分解:

您可以先使用pd.read_excel阅读 pandas 中的表格:

file = r'C:\path\test_exl.xlsx'
sheetname='Sheet1'
n=2 #change n to how many lines to skip to read the table. 
#In the above image my dataframe starts at line 3 onwards so I put n=2

df = pd.read_excel(file,skiprows=[*range(n)],index_col=[0])

然后使用xlrd访问单元格值:

import xlrd
workbook = xlrd.open_workbook(file)
worksheet = workbook.sheet_by_name(sheetname)
year = worksheet.cell(0,0).value #A1 is 0,0
month = worksheet.cell(1,0).value #A2 is 1,0 and so on..
#print(year,month) gives 2021 and 1

然后将列转换为日期时间并过滤:

datetime_cols= pd.to_datetime(df.columns,dayfirst=True,errors='coerce')
out = (df.loc[:,(datetime_cols.year == year) & (datetime_cols.month == month)]
      .reset_index())

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM