繁体   English   中英

Python填充数据时无法将输出保存到Excel工作簿

[英]Cannot save output to Excel Workbook when Python fills the data

当我运行以下代码时,一切正常:

wb7 = load_workbook('define2.xlsx')
ws = wb7.worksheets[0]
ws.cell(row=3,column=2).value = "hey"
wb7.save('define2.xlsx')

但是,当我将最后一行代码放在其他代码的末尾时,我会收到一条错误消息。 当我越过该行时,就会产生错误:

wb7.save('define2.xlsx')

我收到的错误消息是

TypeError: %d format: a number is required, not tuple

我觉得很奇怪,因为我看不出为什么wb7必须是数字。 我要做的就是将一些数据输出到Excel,然后保存Excel工作簿。 我已经做了很多次了,没有任何问题。 在某些情况下,一定是wb7变量被更改了,但显然它没有被更改。 在调试器中,没有证据表明在运行代码后wb7被更改。 我在控制台中也得到以下内容:

/Library/Python/2.7/site-packages/openpyxl/reader/worksheet.py:322: UserWarning: Unknown extension is not supported and will be removed
  warn(msg)
Traceback (most recent call last):

  File "/Applications/PyCharm CE.app/Contents/helpers/pydev/pydevd.py", line 2357, in <module>
    globals = debugger.run(setup['file'], None, None, is_module)

  File "/Applications/PyCharm CE.app/Contents/helpers/pydev/pydevd.py", line 1777, in run
    pydev_imports.execfile(file, globals, locals)  # execute the script

  File "/Users/kylefoley/PycharmProjects/untitled3/temp5.py", line 1682, in <module>
    wb7.save('define2.xlsx')

  File "/Library/Python/2.7/site-packages/openpyxl/workbook/workbook.py", line 263, in save
    save_workbook(self, filename)

  File "/Library/Python/2.7/site-packages/openpyxl/writer/excel.py", line 239, in save_workbook
    writer.save(filename, as_template=as_template)

  File "/Library/Python/2.7/site-packages/openpyxl/writer/excel.py", line 222, in save
    self.write_data(archive, as_template=as_template)

  File "/Library/Python/2.7/site-packages/openpyxl/writer/excel.py", line 80, in write_data
    self._write_worksheets(archive)

  File "/Library/Python/2.7/site-packages/openpyxl/writer/excel.py", line 163, in _write_worksheets
    xml = sheet._write(self.workbook.shared_strings)

  File "/Library/Python/2.7/site-packages/openpyxl/worksheet/worksheet.py", line 778, in _write
    return write_worksheet(self, shared_strings)

  File "/Library/Python/2.7/site-packages/openpyxl/writer/worksheet.py", line 198, in write_worksheet
    dim = Element('dimension', {'ref': '%s' % worksheet.calculate_dimension()})

  File "/Library/Python/2.7/site-packages/openpyxl/worksheet/worksheet.py", line 420, in calculate_dimension
    get_column_letter(max_col), max_row

这是完整的代码:

wb7 = load_workbook('define2.xlsx')
ws = wb7.worksheets[0]
temp_list = []
category = ['r','s','t']
relat = []
srelat = []
trelat = []
word_type = []
atomic_relations = []
list1 = []
list4 = []
det = []
adj = []
adv = []
noun = []
cor = []
lcon = []
subo = []
synon = []
redundant = []
aux = []
atomic_relata = []
negg = []
dnoun = []
det_pairs = []
definitions = []
syn_pairs = []
relations = []
relations2 = []
ind_words = []
ind_num = []
particles = []
osent = []
sn = 1

i = 0
for row in ws.rows:
    i += 1
    if i == 430:
        pp = 5
    str1 = row[0].value
    str5 = copy.copy(str1)
    str2 = row[1].value
    if str1 != None and str2 != None:

        str3 = row[2].value
        defin = row[3].value
        if str2 != None:
            str2 = str2.strip()
        if str3 != None:
            str3 = str3.strip()
        atom = copy.copy(str1)
        str5 = str1[0:1]
        atom = atom[1:2]
        str8 = copy.copy(str1)
        str8 = str1[3:]
        if str5 in category:
            word_type.append([str3,str5])
        elif str5 != 'z':
            word_type.append([str2, str5])

        if str5 in category:
            if str5 == 'r':
                relat.append(str3)
            elif str5 == 's':
                srelat.append(str3)
            elif str5 == 't':
                trelat.append(str3)
            if atom == 'a':
                atomic_relations.append(str3)
                atom = 'b'
            list2a = [str2,str3]
            relations.append(list2a)
            relations2.append(str2)
        elif str5 == 'a':
            adj.append(str2)
        elif str5 == 'b':
            aux.append(str2)
        elif str5 == 'c':
            cor.append(str2)
        elif str5 == 'd':
            det.append(str2)
        elif str5 == 'e':
            adv.append(str2)
        elif str5 == 'l':
            lcon.append(str2)
        elif str5 == 'm':
            negg.append(str3)
        elif str5 == 'n':
            noun.append(str2)
        elif str5 == 'u':
            subo.append(str2)
        if atom == 'n':
            dnoun.append(str2)
        elif atom == 'a':
            atomic_relata.append(str2)
        elif atom == 'q':
            particles.append(str2)
        elif atom == 'r':
            redundant.append(str2)
        if atom == 'p' or atom == 'd':
            if atom == 'p':
                atom = 7
            elif atom == 'd':
                atom = 5
            list1a = [str2, atom]
            ind_words.append(str2)
            ind_num.append(list1a)
        elif atom == 's':
            str6 = defin[defin.find("=")+1:-1]
            str6 = str6.strip()
            str7 = defin[1:defin.find("=")]
            str7 = str7.strip()
            list3a = [str7, str6, defin]
            syn_pairs.append(list3a)
            synon.append(str7)
        elif atom == 'n':
            str6 = defin[defin.find(".")+1:]
            str7 = defin[:defin.find(".")]
            det_pairs.append([str7, str6, str2])
        if atom != 'a':
            if str5 in category:
                definitions.append([str3, defin])
            else:
                definitions.append([str2, defin])

words = [adj, cor, det, adv, lcon, noun, relat, srelat, trelat, subo, aux, negg, dnoun]
word_type.sort()
syn_pairs.sort()

del word_type[0]
test_sent = []

j = 0
for i in ws.rows:
    j += 1
    if j > 263:
        break
    if j == 169:
        pp = 7
    str1 = i[0].value
    str2 = i[1].value
    if str1 != None:
        str2 = str2.strip()
        if str1[1:2] == 's' and j>139:
            str3 = findinlist(str2,syn_pairs,0,1)
            if str3 == None:
                pp = 7
            str4 = findinlist(str3, word_type,0,1)
            if str4 == None:
                pp = 7
            ws.cell(row=i,column=1).value = str4 + 'sx'


wb7.save('define2.xlsx')

解决的问题:代替

ws.cell(row=i,column=1).value = str4 + 'sx' 

我应该写:

ws.cell(row=j,column=1).value = str4 + 'sx'

=符号右边的值必须是数字,而i是行而不是数字。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM