使用Python中的xlrd将数字Excel数据作为文本读取

Bri*_*ian 17 python csv excel xls xlrd

我正在尝试使用xlrd读取Excel文件,我想知道是否有办法忽略Excel文件中使用的单元格格式,并只是将所有数据导入为文本?

这是我正在使用的代码:

import xlrd

xls_file = 'xltest.xls'
xls_workbook = xlrd.open_workbook(xls_file)
xls_sheet = xls_workbook.sheet_by_index(0)

raw_data = [['']*xls_sheet.ncols for _ in range(xls_sheet.nrows)]
raw_str = ''
feild_delim = ','
text_delim = '"'

for rnum in range(xls_sheet.nrows):
    for cnum in range(xls_sheet.ncols):
        raw_data[rnum][cnum] = str(xls_sheet.cell(rnum,cnum).value)

for rnum in range(len(raw_data)):
    for cnum in range(len(raw_data[rnum])):
        if (cnum == len(raw_data[rnum]) - 1):
            feild_delim = '\n'
        else:
            feild_delim = ','
        raw_str += text_delim + raw_data[rnum][cnum] + text_delim + feild_delim

final_csv = open('FINAL.csv', 'w')
final_csv.write(raw_str)
final_csv.close()
Run Code Online (Sandbox Code Playgroud)

此代码是有效的,但是某些字段(例如邮政编码)作为数字导入,因此它们具有十进制零后缀.例如,Excel文件中是否有"79854"的邮政编码,它将导入为"79854.0".

我试过在这个xlrd规范中找到一个解决方案,但是没有成功.

ktd*_*drv 23

这是因为Excel中的整数值在Python中作为浮点数导入.因此,sheet.cell(r,c).value返回一个浮点数.尝试将值转换为整数,但首先要确保这些值在Excel中以整数开头:

cell = sheet.cell(r,c)
cell_value = cell.value
if cell.ctype in (2,3) and int(cell_value) == cell_value:
    cell_value = int(cell_value)
Run Code Online (Sandbox Code Playgroud)

所有在xlrd规范.

  • xlrd报告它发现的内容.Excel中唯一的"整数值"是具有零分数部分的浮点数.Excel及其用户只是没有将整数的概念作为单独的类型.XLS文件中某些RK单元记录中包含的整数仅仅是序列化的工件,xlrd正确地将它们转换为浮点数. (4认同)