xlsx write cell_value error, escribiendo en nueva hoja de trabajo

Intento crear un generador de informes que lea hojas de Excel y devuelva filas que contengan valores. Construí una versión que funciona como lo requiero, pero que solo funciona para csv, esta es solo mi primera combinación de códigos, pero funcionó. Ahora me gustaría include el formatting condicional también (resaltar ciertos valores de celdas, por ejemplo, si el formatting <65 es rojo) y eso requería que reescribiera con hojas xlsx en lugar de csv. Debajo está mi bash de hacer que esto funcione … Puedo encontrar los valores y devolver la fila, pero en el segundo bash devuelve un error

AttributeError: el object 'Hoja de trabajo' no tiene el atributo 'cell_value'

Lo cual es sorprendente porque funcionó justo antes y al pasar por el código se vuelven a los valores que quiero … He intentado cambiarlo a .value, pero me devuelve:

AttributeError: el object 'function' no tiene atributo 'value'

Ayuda, no tengo idea de lo que estoy haciendo ahora. Si no tiene sentido, me complace publicar mi código original para que la csv "explique"

Gracias

import xlsxwriter import xlrd import os import xlwt # open original excelbook and access first sheet for excelDocs in os.listdir('.'): if not excelDocs.endswith('.xlsx'): continue # skip non-xlsx files workbook = xlrd.open_workbook(excelDocs) sheet = workbook.sheet_by_index(0) cellslist = [] i = 0 #########WORKS!##################### for row in range(sheet.nrows): for col in range(sheet.ncols): if sheet.cell_value(row, col) == 'CP' or sheet.cell_value(row, col) == 'LNA' or sheet.cell_value(row, col) == 'Last Name': i = i + 1 data = [sheet.cell_value(0, col) for col in range(sheet.ncols)] workbook = xlsxwriter.Workbook() sheet = workbook.add_worksheet('excelDocs') for index, value in enumerate(data): sheet.write(i, index, value) workbook = xlrd.open_workbook(excelDocs) 

No tengo experiencia con xlsxwriter, xlrd o xlwt. Como este es su "1er código combinado", pensé que ofrecería una alternativa usando openpyxl. No tengo tus datos, por lo que las testings son un poco difíciles, pero cualquier error de syntax puede ser reparado. Por favor, avíseme si esto no se ejecuta y lo ayudaré a solucionar si es necesario.

Supongo que su salida está en un file separado (informe.xlsx aquí) y una pestaña para cada libro de trabajo marcado (cada pestaña nombrada para el nombre del libro fuente).

  import openpyxl from openpyxl import * from openpyxl.utils import get_column_letter interestingValues = ['CP','LNA', 'LastName'] report = Workbook() dest_filename = 'report.xlsx' # open original excelbook and access first sheet for excelDocs in os.listdir('.'): if not excelDocs.endswith('.xlsx'): continue # skip non-xlsx files workbook = load_workbook(excelDocs) sheet = workbook.active workingReportSheet = report.create_sheet(str(excelDocs.split('.')[0])) i = 0 for row in range(1,sheet.max_row): for col in range(sheet.max_column): columnLetter = get_column_letter(col +1) if str(sheet['%s%s' % (columnLetter,row)].value) in interestingValues: i += 1 data = [sheet['%s%s' % (str(get_column_letter(col)),i)].value for col in range(1,sheet.max_column +1)] for index, value in enumerate(data): workingReportSheet['%s%s' % (str(get_column_letter(index+1)),i)].value = value report.save(filename = dest_filename) 

Al volver a leer su código, es posible que esté descartando su resultado. Pruebe lo siguiente.

 import xlsxwriter import xlrd import os import xlwt #Create output sheet outputworkbook = xlsxwriter.Workbook() # open original excelbook and access first sheet for excelDocs in os.listdir('.'): if not excelDocs.endswith('.xlsx'): continue # skip non-xlsx files workbook = xlrd.open_workbook(excelDocs) sheet = workbook.sheet_by_index(0) cellslist = [] i = 0 outputsheet = outputworkbook.add_worksheet('excelDocs') for row in range(sheet.nrows): for col in range(sheet.ncols): if sheet.cell_value(row, col) == 'CP' or sheet.cell_value(row, col) == 'LNA' or sheet.cell_value(row, col) == 'Last Name': i = i + 1 data = [sheet.cell_value(0, col) for col in range(sheet.ncols)] for index, value in enumerate(data): outputsheet.write(i, index, value)