代码之家  ›  专栏  ›  技术社区  ›  barciewicz

如何在openpyxl和xlrd中获取单元格值?

  •  0
  • barciewicz  · 技术社区  · 6 年前

    我有以下在Excel文件中搜索关键字并打印其位置的工作代码:

    import openpyxl as xl 
    import os 
    import xlrd
    
    file_extensions = ('.xlsx', '.xlsm', '.xls') 
    keyword = 'EUROBUS' 
    directory = 'M:\\moje makra'
    
    def filenames(directory): 
        for root, dirs, filenames in os.walk(directory): 
            for filename in filenames: 
                if filename.endswith(file_extensions): 
                    yield os.path.join(root, filename) 
    
    for filename in filenames(directory):
        if filename.endswith(file_extensions):
            try:
                wb = xl.load_workbook(filename)
                print('Opened ' + filename)
                for sheet in wb.worksheets: 
                    rows = sheet.max_row 
                    columns = sheet.max_column
                    for row in range(1,rows + 1): 
                        for column in range(1,columns + 1): 
                            if keyword in str(sheet.cell(row=row, column=column).value):
                                print('FOUND IN ' + filename)
                            else:
                                print("NOT FOUND")
            except:
                    print('Failed to open ' + filename)
    

    但是,openpyxl模块不支持.xls格式,因此我需要重写脚本以使用xlrd。

    我尝试了以下方法:

    for filename in filenames(directory):
        if filename.endswith(file_extensions):
            try:
                wb = xlrd.open_workbook(filename)
                print('Opened ' + filename)
                for sheet in wb.sheets(): 
                    rows = sheet.nrows
                    columns = sheet.ncols
                    for row in range(1,rows + 1):
                        for column in range(1,column +1):
                            if keyword in str(sheet.cell(row, column).value):
                                print('FOUND IN ' + filename)
                            else:
                                print("NOT FOUND")
            except:
                    print('Failed to open ' + filename)
    

    但是代码无法打开工作簿(“打开…”然后“失败…”,每个文件都会被打印)。

    我也试着改变 if keyword 行至 str(sheet.cell_value(row,column)) 但无济于事。

    我该怎么解决这个问题?

    1 回复  |  直到 6 年前
        1
  •  0
  •   AcK    6 年前

    改变

                for row in range(1,rows + 1):
                    for column in range(1,column +1):
    

                for row in range(rows):  # rows + 1 will result in 'out of range'
                    for column in range(columns):  # note 'columns'  not 'column'
    

    移除(或缩小) try 如梅尔所述。