尝试替换我从xlrd创建的sheet.row列表中的值

Chr*_*ris 3 python sql excel xlrd

我导入了一个Excel电子表格,我正在尝试使用电子表格中所有行的默认值清理空值.我不需要更新电子表格,我只需要设置默认值,因为我使用此信息插入本地数据库.每当我尝试这样做时,它永远不会被正确处理.这是我原始的代码迭代:

for root,dirs,files in os.walk(path):
xlsfiles=['1128CNLOAD.xlsx']
#xlsfiles=[ _ for _ in files if _.endswith('CNLOAD.xlsx') ]
print (xlsfiles)
for xlsfile in xlsfiles:
    book=xlrd.open_workbook(os.path.join(root,xlsfile))
    sheet=book.sheet_by_index(0)
    cell=sheet.cell(1,1)
    print (sheet)

    sheet0 = book.sheet_by_index(0)
    #sheet1 = book.sheet_by_index(1)

    for rownum in range(sheet0.nrows):
        print sheet0.row_values(rownum)

    values=()

    print sheet0.nrows 

    for row_index in range(1, sheet.nrows):
        if sheet.cell(row_index,4).value == '':
            sheet.cell(row_index,4).value = 0.0
        print sheet.row(row_index)
Run Code Online (Sandbox Code Playgroud)

代码spits没有返回错误,但没有任何更新,我尝试更新的单元格仍为空.

我还尝试将循环更改为只对列表执行值替换,如下所示:

                for row_index in range(1, sheet.nrows):
                if sheet.row(1)[4] == "empty:''":
                    sheet.row(1)[4] = "number:0.0"
Run Code Online (Sandbox Code Playgroud)

在运行此更新后打印时,列表未更改.

print(sheet.row(1))
Run Code Online (Sandbox Code Playgroud)

[text:u'FRFHF',text:u'',number:0.15,number:0.15,empty:'',empty:'',number:2.5,number:2.5,empty:'',empty:'']

感谢您的帮助,如果您有任何疑问,请与我们联系.

Pet*_*per 5

一旦将电子表格存储在内存中,xlrd就不会真正设置为编辑电子表格.您可以这样做,但您必须使用未记录的内部实现.

在我的版本(0.7.1)中,单元格以几个不同的二维数组内部存储在工作表中 - sheet._cell_types并且sheet._cell_values是主要的两个.类型是由一组在常量的定义biffh.py,其中所述xlrd模块的进口.当您调用时cell,它会Cell使用为给定行/列对查找的值和类型构造一个新实例.您可以直接更新它们,也可以使用该put_cell方法.

所以它看起来会起作用:

if sheet.cell_type(1, 4) == xlrd.XL_CELL_EMPTY:
    sheet._cell_types[1][4] = xlrd.XL_CELL_NUMBER
    sheet._cell_values[1][4] = 0.0
Run Code Online (Sandbox Code Playgroud)

交替:

if sheet.cell_type(1, 4) == xlrd.XL_CELL_EMPTY:
    sheet.put_cell(1, 4, xlrd.XL_CELL_NUMBER, 0.0, sheet.cell_xf_index(1, 4))
Run Code Online (Sandbox Code Playgroud)

您可能需要查看代码,以确保如果您使用的是其他版本,则不会更改.