2017-09-18 2 views
1

J'ai donc du code qui applique une mise en forme conditionnelle à un fichier Excel basé sur des valeurs de cellule. Je voulais en ajouter quelques-unes à la même gamme basée sur le type "texte" en utilisant le critère "contenant". Ces colonnes sont remplies avec des chaînes de dates, et je voulais appliquer un format aux dates qui contiennent "2017".Le formatage conditionnel avec xlsx writer génère un fichier corrompu avec "text: containing"

est ici tout le bloc, et il fonctionne très bien avec la mise en forme conditionnelle des cellules si je commente la mise en forme conditionnelle pour le texte:

mtbook = mytrials_writer.book 
header_format = mtbook.add_format({'bg_color': '#7e98f7','bold': True}) 
notFoundFormat = sitebook.add_format({'bg_color':'red'}) 
notExpFormat = sitebook.add_format({'bg_color':'silver'}) 
foundFormat = sitebook.add_format({'bg_color':'lime'}) 
for worksheet in mtbook.worksheets(): 
    # for every column 
    for i in range(len(subreportCols)): 
     # write the value of the first cell in the column to the first cell of that column 
     worksheet.write(0, i, subreportCols[i], header_format) 
     worksheet.set_column(0, 50, 17) 
     worksheet.set_row(0, 25, None) 
     worksheet.conditional_format('A2:Z100', {'type':'text', 'criteria': 'containing', 'value':'2017','format':notFoundFormat}) 
     #worksheet.conditional_format('A2:Z100', {'type':'text', 'criteria': 'containing', 'value':'"2016-"','format':foundFormat}) 
     #worksheet.conditional_format('A2:Z100', {'type':'text', 'criteria': 'containing', 'value':'"2015-"','format':foundFormat}) 
     worksheet.conditional_format('A2:Z100', {'type':'cell', 'criteria': '==', 'value':'"Miss/Inc"','format':notFoundFormat}) 
     worksheet.conditional_format('A2:Z100', {'type':'cell', 'criteria': '==', 'value':'"NotExp."','format':notExpFormat}) 

Si activer les lignes comme suit, le code sera exécuté , mais le fichier Excel s'ouvrira, demandez si je veux réparer parce que c'est corrompu; Si je dis oui, alors il n'y a pas de formatage dans le document.

worksheet.conditional_format('A2:Z100', {'type':'text', 'criteria': 'containing', 'value':'2017','format':notFoundFormat}) 

L'erreur dit: « Nous avons trouvé un problème avec un contenu dans le fichier. Voulez-vous essayer de récupérer autant que possible? Si vous faites confiance à la source de ce classeur, cliquez sur Oui »

Ceci est le journal des erreurs qui est retourné:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<recoveryLog xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main"><logFileName>error255040_01.xml</logFileName><summary>Errors were detected in file 'C:\Users\mgancsos\Documents\Data Sources\Python\Testing\TQ_MyTrials_upload.xlsx'</summary><repairedRecords><repairedRecord>Repaired Records: Conditional formatting from /xl/worksheets/sheet1.xml part</repairedRecord><repairedRecord>Repaired Records: Conditional formatting from /xl/worksheets/sheet2.xml part</repairedRecord><repairedRecord>Repaired Records: Conditional formatting from /xl/worksheets/sheet3.xml part</repairedRecord><repairedRecord>Repaired Records: Conditional formatting from /xl/worksheets/sheet4.xml part</repairedRecord><repairedRecord>Repaired Records: Conditional formatting from /xl/worksheets/sheet5.xml part</repairedRecord><repairedRecord>Repaired Records: Conditional formatting from /xl/worksheets/sheet6.xml part</repairedRecord><repairedRecord>Repaired Records: Conditional formatting from /xl/worksheets/sheet7.xml part</repairedRecord><repairedRecord>Repaired Records: Conditional formatting from /xl/worksheets/sheet8.xml part</repairedRecord><repairedRecord>Repaired Records: Conditional formatting from /xl/worksheets/sheet9.xml part</repairedRecord><repairedRecord>Repaired Records: Conditional formatting from /xl/worksheets/sheet10.xml part</repairedRecord><repairedRecord>Repaired Records: Conditional formatting from /xl/worksheets/sheet11.xml part</repairedRecord><repairedRecord>Repaired Records: Conditional formatting from /xl/worksheets/sheet12.xml part</repairedRecord><repairedRecord>Repaired Records: Conditional formatting from /xl/worksheets/sheet13.xml part</repairedRecord><repairedRecord>Repaired Records: C</repairedRecord><repairedRecord>Repaired Records: C</repairedRecord><repairedRecord>Repaired Records: C</repairedRecord><repairedRecord xml:space="preserve">Repaired Records: </repairedRecord></repairedRecords></recoveryLog> 

Merci!

+0

Vous ne savez pas exactement pourquoi vous utilisez 'text' si 'cell' fonctionne On dirait que celui qui échoue est une date, alors as-tu essayé d'utiliser le type 'date'? – MrE

+0

"Contenant" n'est pas quelque chose répertorié pour "cellule", seulement pour "texte". http://xlsxwriter.readthedocs.io/working_with_conditional_formats.html?highlight=conditionnel – Korzak

+0

avez-vous essayé la date? – MrE

Répondre

2

Je pense que le problème réside dans les guillemets autour de la chaîne que vous voulez faire correspondre. Essayez ceci à la place:

worksheet.conditional_format('A2:Z100', 
    {'type': 'text', 
    'criteria': 'containing', 
    'value':'2016-', 
    'format': foundFormat}) 
+0

Ceci l'a résolu. Le code précédent que j'avais ne fonctionnait pas, et en cherchant des solutions, j'ai lu dans un autre post que les doubles guillemets étaient nécessaires. Après quelques autres essais, je me suis retrouvé avec ça, mais j'ai gardé les doubles guillemets. Les sortir a fixé ceci. Je vous remercie!!! – Korzak