【问题标题】:Find Cell address of a date in a Excel sheet using Python使用 Python 在 Excel 工作表中查找日期的单元格地址
【发布时间】:2020-10-01 05:24:22
【问题描述】:

我有一个 Excel 表,其中包含每月每个日期的数据。我正在创建一个 python 代码来将该数据转换为所需的格式。为此,我需要给定日期的单元格地址

例如 - Dummy data

如果我想要 2020 年 10 月 3 日的单元格地址,那么它应该返回 C1 作为输出,即工作表中该日期的单元格地址。

提前致谢

【问题讨论】:

标签: python excel date openpyxl xlrd


【解决方案1】:

尝试 VBA 代码:

Function Calc(objRange As Range, strDatr As Date)
  For Each objCell in objRange
    If objCell.Value == strDate Then
      Calc = objCell.Address
    End If
  Next
End Function

然后这样称呼它:

myCell = Calc("A1:G7","10/3/2020")

【讨论】:

    【解决方案2】:

    如果你想用 python 来做,我会使用库 openpyxl,我会这样做:

    import openpyxl
    
    path = r'C:\PathToTheExcelFile\test.xlsx'
    wb = openpyxl.load_workbook(path)
    ws = wb.active
    

    首先我检查 excel 文件的大小(为了避免检查所有空单元格, 也许它有比这个更好的选择。但我假设你的 excel 文件不是很大。如果是这样,肯定有更好的选择。

    i =1
    j =1
    cell_value = ws.cell(i, j).value
    last_j = j
    while cell_value is not None:
        last_j = j
        j+=1
        cell_value = ws.cell(i, j).value
    
    i =1
    j =1
    last_i = i
    while cell_value is not None:
        last_i = i
        i+=1
        cell_value = ws.cell(i, j).value
    

    当我知道 Excel 文件的大小后,我会检查每个单元格是否包含我们搜索的值:

    My_value = datetime(2020, 3, 10, 0, 0)
    for col in range(1,last_j+1):
        for row in range(1,last_i+1):
            cell_value = ws.cell(row, col).value
            if cell_value == My_value :
                i_goal = col
                j_goal = row 
    

    我假设您的 Excel 文件是 .XLSX。第二部分也可以优化。如果您有一个很大的 excel 文件,您将失去检查所有单元格的时间。您当然可以在 for 循环中添加一个中断。

    i_goal 和 j_goal 分别是您要查找的行号和列号。如果您愿意,可以将 j_goal 转换为字母以获得 Excel 格式。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-30
      • 1970-01-01
      相关资源
      最近更新 更多