遍历Excel工作表中的列

时间:2018-11-27 10:49:56

标签: python-3.x openpyxl

我正在努力达到这个结果

| method | | passed | | datetime
| method | | passed | | datetime
| method | | passed | | datetime
| method | | passed | | datetime

要实现这一目标,我目前有一个课程XLWriter

class XLWriter:
    def __init__(self, file):
        self.workbook = load_workbook(file)
        self.worksheet = self.workbook['Sheet1']
        self.file = file

    def write(self, row):
        index = 0
        try:
            # func name, test passed, date
            values = [[inspect.stack()[0][3]], True, datetime.date]

            columns = [4, 6, 8]

            # 3 writes to perform
            while index < 2:
                cell = self.worksheet.cell(row=row, column=columns[index])
                cell.value = values[index]
                index += 1
        except:
            # function name, declare test failed, date
            values = [[inspect.stack()[0][3]], False, datetime.date]
            columns = [4, 6, 8]
            while index < 2:
                cell = self.worksheet.cell(row=row, column=columns[index])
                cell.value = values[index]
                index += 1

    def save(self):
        self.workbook.save(self.file)

test.py调用此类时,如下所示

from xlwriter import XLWriter
xl = XLWriter('File.xlsx')

r = self.driver.current_url
self.assertEqual(r, url)
# write to row 14
xl.write(14)
xl.save()

我遇到了以下ValueError

ValueError: Cannot convert ['write'] to Excel

我确定这是一个小而愚蠢的东西,任何帮助都将不胜感激。

修改

完整错误堆栈

Error
Traceback (most recent call last):
  File "D:\...\xlwriter.py", line 21, in write
    cell.value = values[index]
  File "D:\...\env\lib\site-packages\openpyxl\cell\cell.py", line 294, in value
    self._bind_value(value)
  File "D:\...\env\lib\site-packages\openpyxl\cell\cell.py", line 207, in _bind_value
    raise ValueError("Cannot convert {0!r} to Excel".format(value))
ValueError: Cannot convert ['write'] to Excel

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\Users\...\AppData\Local\Programs\Python\Python37-32\lib\unittest\case.py", line 59, in testPartExecutor
    yield
  File "C:\Users\...\AppData\Local\Programs\Python\Python37-32\lib\unittest\case.py", line 615, in run
    testMethod()
  File "D:\...\test.py", line 40, in test
    xl.write(14)
  File "D:\...\xlwriter.py", line 29, in write
    cell.value = values[index]
  File "D:\...\env\lib\site-packages\openpyxl\cell\cell.py", line 294, in value
    self._bind_value(value)
  File "D:\...\env\lib\site-packages\openpyxl\cell\cell.py", line 207, in _bind_value
    raise ValueError("Cannot convert {0!r} to Excel".format(value))
ValueError: Cannot convert ['write'] to Excel

1 个答案:

答案 0 :(得分:1)

尝试将列表写入单元格时代码失败。

请更新您的代码,使列表“值”的第一个元素为inspect.stack()[0] [3],而不是[inspect.stack()[0] [3]]。

更新的代码:

class XLWriter:
    def __init__(self, file):
        self.workbook = load_workbook(file)
        self.worksheet = self.workbook['Sheet1']
        self.file = file

    def write(self, row):
        index = 0
        try:
            # func name, test passed, date
            values = [inspect.stack()[0][3], True, datetime.date]

            columns = [4, 6, 8]

            # 3 writes to perform
            while index < 2:
                cell = self.worksheet.cell(row=row, column=columns[index])
                cell.value = values[index]
                index += 1
        except:
            # function name, declare test failed, date
            values = [inspect.stack()[0][3], False, datetime.date]
            columns = [4, 6, 8]
            while index < 2:
                cell = self.worksheet.cell(row=row, column=columns[index])
                cell.value = values[index]
                index += 1

    def save(self):
        self.workbook.save(self.file)