Essayer de replace une valeur dans une list sheet.row que j'ai créée à partir de xlrd

J'ai importé une feuille de calcul Excel et j'essaie de nettoyer des valeurs vides avec des valeurs par défaut dans toutes les lignes de ma feuille de calcul. Je n'ai pas besoin de mettre à jour la feuille de calcul, j'ai juste besoin de définir des valeurs par défaut parce que j'utilise ces informations pour l'insert dans une database locale. Chaque fois que j'essaie de le faire, il ne se traite jamais correctement. Voici mon itération originale du code:

for root,dirs,files in os.walk(path): xlsfiles=['1128CNLOAD.xlsx'] #xlsfiles=[ _ for _ in files if _.endswith('CNLOAD.xlsx') ] print (xlsfiles) for xlsfile in xlsfiles: book=xlrd.open_workbook(os.path.join(root,xlsfile)) sheet=book.sheet_by_index(0) cell=sheet.cell(1,1) print (sheet) sheet0 = book.sheet_by_index(0) #sheet1 = book.sheet_by_index(1) for rownum in range(sheet0.nrows): print sheet0.row_values(rownum) values=() print sheet0.nrows for row_index in range(1, sheet.nrows): if sheet.cell(row_index,4).value == '': sheet.cell(row_index,4).value = 0.0 print sheet.row(row_index) 

Le code crache ne renvoie aucune erreur, mais rien n'est mis à jour et les cellules que je tente de mettre à jour sont encore vides.

J'ai également essayé de modifier la boucle pour simplement replace une valeur par la list ci-dessous:

  for row_index in range(1, sheet.nrows): if sheet.row(1)[4] == "empty:''": sheet.row(1)[4] = "number:0.0" 

Lorsque j'imprime après avoir exécuté cette mise à jour, la list n'a pas changé.

 print(sheet.row(1)) 

[text: u'FRFHF ', text: u' ', nombre: 0.15, nombre: 0.15, vide:' ', vide:' ', nombre: 2.5, nombre: 2.5, vide:' ', vide:' ']

Merci de votre aide et faites-moi savoir si vous avez des questions.

xlrd n'est pas vraiment configuré pour éditer la feuille de calcul une fois que vous l'avez en memory. Vous pouvez le faire, mais vous devez utiliser la mise en œuvre interne sans papiers.

Sur ma version (0.7.1), les cellules sont stockées en interne sur la feuille dans plusieurs arrays bidimensionnels différents – les sheet._cell_types et les sheet._cell_values de la feuille. Les sheet._cell_types sheet._cell_values sont les deux principales. Les types sont définis par un set de constantes dans biffh.py , que le module xlrd importe. Lorsque vous appelez une cell , il construit une nouvelle instance de Cell utilisant la valeur et le type recherchés pour la paire de lignes / colonnes donnée. Vous pouvez les mettre à jour directement, ou vous pouvez utiliser la méthode put_cell .

Il semble donc que cela fonctionnerait:

 if sheet.cell_type(1, 4) == xlrd.XL_CELL_EMPTY: sheet._cell_types[1][4] = xlrd.XL_CELL_NUMBER sheet._cell_values[1][4] = 0.0 

Alternativement:

 if sheet.cell_type(1, 4) == xlrd.XL_CELL_EMPTY: sheet.put_cell(1, 4, xlrd.XL_CELL_NUMBER, 0.0, sheet.cell_xf_index(1, 4)) 

Vous devrez peut-être examiner le code pour vous assurer que cela ne change pas si vous êtes sur une autre version.