我正在尝试构建一个报告生成器,它读取excel表并返回包含值的行。我构建了一个可以按照我的要求工作的版本,但只适用于csv,这只是我的第一个代码混搭,但它有效。我现在也希望包括条件格式(突出显示某些单元格值,例如。如果< 65格式为红色),所以我需要用xlsx表而不是csv重写。 以下是我尝试让它发挥作用...... 我可以找到值并返回行,但在第二次运行时会返回错误
AttributeError:'Worksheet'对象没有属性'cell_value'
这是令人惊讶的,因为它之前有效,并且逐步执行代码会重新调整我想要的值....我尝试将其更改为.value,但返回:
AttributeError:'function'对象没有属性'value'
帮助,我不知道我现在在做什么。如果它没有任何意义我很高兴将我的csv原始代码发布到'explain'
由于
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)
答案 0 :(得分:1)
我没有使用xlsxwriter,xlrd或xlwt的经验。因为这是你的第一个代码 - 混搭"我想我会使用openpyxl提供替代方案。 我没有您的数据,因此测试有点困难,但任何语法错误都可以修复。如果没有,请告诉我,如果需要,我会帮忙解决。
我假设你的输出是一个单独的文件(report.xlsx here)和每个工作簿的选项卡(每个选项卡都以源书名命名)。
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)
答案 1 :(得分:1)
再次阅读您的代码,可能是您丢弃了输出。 试试下面的内容。
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)