Python 为什么xlrd读取的列数错误?

Python 为什么xlrd读取的列数错误?,python,excel,xlrd,Python,Excel,Xlrd,当我读取一个.xls文件时,xlrd的作用就像在位置0处有一个空列一样,而最后一列(数字58,如果从0开始计数)永远不会被读取;第一列被跳过,最后一列消失 当我保存文件(以.xls或.xlsx格式)并再次执行整个过程时,问题就消失了。保存时,Excel告诉我可能存在兼容性问题。我需要自动化这个过程,这就是为什么我想避免手动保存文件 #加载“已转换”文件 wb=xlrd.打开工作簿(转换的文件路径) 工作表=工作表。工作表按索引(0) 打印('行',透镜(第页第(3)行),第页第(3)行) #打印

当我读取一个.xls文件时,xlrd的作用就像在位置0处有一个空列一样,而最后一列(数字58,如果从0开始计数)永远不会被读取;第一列被跳过,最后一列消失

当我保存文件(以.xls或.xlsx格式)并再次执行整个过程时,问题就消失了。保存时,Excel告诉我可能存在兼容性问题。我需要自动化这个过程,这就是为什么我想避免手动保存文件

#加载“已转换”文件
wb=xlrd.打开工作簿(转换的文件路径)
工作表=工作表。工作表按索引(0)
打印('行',透镜(第页第(3)行),第页第(3)行)
#打印:第59行[文本:'客户编号'。。。
#加载原始文件
wb=xlrd.打开工作簿(原始文件路径)
打印('行',透镜(第页第(3)行),第页第(3)行)
#打印:第58行[空:'',文本:'Client Number'。。。
打印(单张单元格_值(0,5))
#当单元格(0,5)上有一个数字时,不打印任何内容

如果您在Windows上,并且您发现使用Excel加载/保存文件在某种程度上修复了您的文件,那么您可以使用Excel本身来执行此初始转换。然后应使用
xlrd
使用现有代码正确加载。例如:

import win32com.client as win32
import xlrd

excel = win32.gencache.EnsureDispatch('Excel.Application')

wb = excel.Workbooks.Open(r'input.xls')
excel.DisplayAlerts = False
wb.DoNotPromptForConvert = True
wb.CheckCompatibility = False
wb.SaveAs(r"output.xlsx", FileFormat=51, ConflictResolution=2)
excel.Application.Quit()

# Loading the 'converted' file
wb = xlrd.open_workbook('output.xlsx') 
sheet = wb.sheet_by_index(0)

print('Row',len(sheet.row(3)),sheet.row(3))
# Prints: Row 59 [text:'Client Number', ...

感谢Martin提出的
win32com
修复方案,但我发现了实际问题。这与
xlrd
如何在内存中加载Python工作表有关。加载工作簿时,可能会乱动
on_demand
参数,但无论如何,发生了以下情况:

我需要一张名为“Report X”的表格,其中X是一些数字,所以我像这样查找它:

wb.sheets()中的工作表的
:
如果sheet.name中有“报告”:
报告表
打破
然后,我把它改成了

wb.sheets()中的工作表的
:
如果sheet.name中有“报告”:
报告表
#删除了中断

现在它可以工作了。

你能用pastebin之类的东西给我们一个链接到一个不工作的文件吗?我很想,但我不能;它包含我工作的公司非常合理的数据。我不能编辑它,因为这样文件就可以工作了。如果你在Windows上,你可以自动加载并保存到
.xlsx
格式使用Excel本身使用Python
win32com
。然后使用
xlrd
应该可以正常读取。我将尝试调整设置,看看是否有帮助。好的,现在它可以了,我不知道为什么。我将试着找出原因并发布更新