2012-06-07 34 views
0

我想搜索一個excel文檔,並且如果在excel文檔中匹配了mp3文件的名稱,它會打印出名稱實例在該行上找到的行。openpyxl基本搜索

這是我有:

所有的
from mutagen.easyid3 import EasyID3 
from openpyxl import load_workbook 
import glob 
import re 
import os 
for name in glob.glob('*.mp3'): 
    audio = EasyID3(name) 
    wb = load_workbook('xl.xlsx') 
    sh = wb.get_sheet_by_name('Russian') 
    for row in sh: 
    if row.value == name: 
     print row.number 
+1

請考慮[*改善您的問題*](http://www.catb.org/~esr/faqs/smart-questions.html#beprecise) –

+0

並且?你有什麼問題? –

回答

2

首先您加載的工作簿,並找到片,每.mp3文件。將該代碼移到循環外部。

第二個問題是您嘗試迭代不可迭代的工作表sh

第三個問題是,您測試row.value平等的名字,你可能想sh.cell[0].value

你的代碼也許應該更像:

from mutagen.easyid3 import EasyID3 
from openpyxl import load_workbook 
import glob 
import re 
import os 
wb = load_workbook('xl.xlsx') 
sh = wb.get_sheet_by_name('Russian') 
for name in glob.glob('*.mp3'): 
    audio = EasyID3(name) 
    for row_index in range(sh.get_highest_row()): 
     if sh.cell(row=row_index, column=0).value == name: 
      print(row_index) 

由於@Bill基德表示,在openpyxl 2.4.2你必須用.max_row替換.get_highest_row()(沒有大括號!)。

+0

Anthon的回答大多是正確的。 在「if row.cell(row = row_index,column = 0).value == name:」 中將「row.cell」替換爲「sh.cell」,因爲沒有行對象。 出於同樣的原因,另外將「print row.number」替換爲「print(row_index)」。 在openpyxl 2.4.2中沒有工作表方法「get_highest_row()」,而是使用屬性「max_row」。 –

+0

@BillKidd更新了答案,謝謝。 – Anthon

+0

工作表可作爲行進行迭代。 –