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

Python 尝试替换从xlrd创建的sheet.row列表中的值,python,sql,excel,xlrd,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 (xls

我导入了一个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)
代码spits没有返回任何错误,但是没有更新任何内容,并且我尝试更新的单元格仍然为空

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

                for row_index in range(1, sheet.nrows):
                if sheet.row(1)[4] == "empty:''":
                    sheet.row(1)[4] = "number:0.0"
运行此更新后打印时,列表未更改

print(sheet.row(1))
[文本:u'FRFHF',文本:u',编号:0.15,编号:0.15,空:“”,空:“”,编号:2.5,编号:2.5,空:“”,空:“”]


感谢您的帮助,如果您有任何问题,请告诉我。

xlrd并没有真正设置为在内存中保存电子表格后编辑它。您可以这样做,但必须使用未记录的内部实现

在我的版本(0.7.1)中,单元格以两种不同的二维数组形式存储在工作表的内部-
工作表。
工作表。值是主要的两种。这些类型由
biffh.py
中的一组常量定义,
xlrd
模块导入这些常量。调用
cell
时,它使用为给定行/列对查找的值和类型构造一个新的
cell
实例。您可以直接更新这些内容,也可以使用
put\u 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
或者:

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

如果您使用的是其他版本,您可能需要查看代码,以确保此代码没有更改。

这太棒了,让我试试,我会回来的。感谢您的快速回复!!!!你在哪里找到这种方法??!我到处找,但找不到。谢谢,您可以发布一个链接吗。看起来像是当前版本的
工作表。在工作表初始化过程中,put\u cell
被分配到以下两种实现之一: