xlsx写入cell_value错误,写入新工作表

时间:2017-08-21 01:50:52

标签: python excel csv

我正在尝试构建一个报告生成器,它读取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)

2 个答案:

答案 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)