- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我在使用 PHP 和 python 编辑一些 Excel 文件时遇到了非常困难的事情。
我最初在 PHP 中使用 PHPExcel 完成了所有工作,但我正在处理非常大的文件,PHPExcel 在内存不足时崩溃了。所以我将其更改为使用 PHP 完成一些工作,并使用 python 完成其余工作。
所以流程是:
python upload.py Example.xls data.xml
PHP调用我遇到的问题是,如果 python 脚本修改了我手动创建的常规 .xls 文件,它会完美运行。但是一旦PHP excel修改Excel文件,python脚本就会产生如下错误:
_locate_stream(Workbook): seen
0 5 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4
20 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4
100= 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4
120 4 4 4 4 4 4 4 4 4 4 4 4 4 3 2 2
File "upload.py", line 63, in <module>
workbook_readonly = open_workbook(excel,formatting_info=True,on_demand=True)
File "/home/student/eamorde/public_html/dining/xlrd/__init__.py", line 435, in open_workbook
ragged_rows=ragged_rows,
File "/home/student/eamorde/public_html/dining/xlrd/book.py", line 87, in open_workbook_xls
ragged_rows=ragged_rows,
File "/home/student/eamorde/public_html/dining/xlrd/book.py", line 619, in biff2_8_load
cd.locate_named_stream(UNICODE_LITERAL(qname))
File "/home/student/eamorde/public_html/dining/xlrd/compdoc.py", line 390, in locate_named_stream
d.tot_size, qname, d.DID+6)
File "/home/student/eamorde/public_html/dining/xlrd/compdoc.py", line 418, in _locate_stream
raise CompDocError("%s corruption: seen[%d] == %d" % (qname, s, self.seen[s]))
xlrd.compdoc.CompDocError: Workbook corruption: seen[2] == 4
所以我翻遍了 xlrd 的源代码,找到了产生错误的行:
def _locate_stream(self, mem, base, sat, sec_size, start_sid, expected_stream_size, qname, seen_id):
# print >> self.logfile, "_locate_stream", base, sec_size, start_sid, expected_stream_size
s = start_sid
if s < 0:
raise CompDocError("_locate_stream: start_sid (%d) is -ve" % start_sid)
p = -99 # dummy previous SID
start_pos = -9999
end_pos = -8888
slices = []
tot_found = 0
found_limit = (expected_stream_size + sec_size - 1) // sec_size
while s >= 0:
if self.seen[s]:
print("_locate_stream(%s): seen" % qname, file=self.logfile); dump_list(self.seen, 20, self.logfile)
raise CompDocError("%s corruption: seen[%d] == %d" % (qname, s, self.seen[s]))
最后一行是引发异常的那一行:
raise CompDocError("%s corruption: seen[%d] == %d" % (qname, s, self.seen[s]))
谁能解释一下?该文件没有损坏,因为在 Excel 中打开它可以正常工作,但 xlrd 似乎无法读取它。
我的 PHP 脚本执行以下操作(粗略):
$phpExcel = new PHPExcel();
$file = "MyFile.xls";
$reader = new PHPExcel_Reader_Excel5();
$phpExcel = $reader->load($file);
//(... insert rows based on xml)
$writer = new PHPExcel_Writer_Excel5();
$writer->save('MyFile.xls');
exec("python upload.py MyFile.xls data.xml");
如果有人知道为什么会发生这种情况,或者知道我的问题(PHPExcel 内存问题)的更好解决方案,我们将不胜感激。
编辑:可以找到引发错误的文件的源代码 here .
编辑:我创建了一个例子,基本上是拿了我的 excel 文件并删除了任何识别信息。要亲自尝试,请参阅要点 here .
最佳答案
我的一个 .xls
文件出现了同样的错误(excel 可以很好地打开它们,但 xlrd 失败)。正如我猜测的那样,Compdoc.seen
数组跟踪已读取的“FAT”扇区。在我的例子中,根条目读取 block (SSCS) 将所有扇区标记为已看到,从而导致将来引发异常。你可以尝试在读取逻辑的扇区中找到错误并为 xlrd 做出贡献 :) 或者只是用异常 raise 评论这行,这可能会解决你的问题(就像我的情况一样)并等待 xlrd 更新。
关于php - 读取由 PHPExcel 修改的 .xls 文件时 xlrd 崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16618672/
xlrd 模块可以更改文件属性吗?如作者、标题、主题等。 我想更改 .xls 文件的属性,但不知道该怎么做。 最佳答案 据我所知,xlrd 是不可能的. rd名称的一部分表示“只读”。您需要使用 xl
我正在尝试使用 xlrd 操作 .xls 文件,如下所示: >>> import xlrd >>> workbook = xlrd.open_workbook('6h.xls') 我得到: Trace
我想将一个 excel 范围分配给一个变量: import xlrd file = r"C:\Users\Lisa\Desktop\Frank\export.XLSX" book = xlrd.ope
import xlrd wb = xlrd.open_workbook("file.xls") wb.sheet_names() sh = wb.sheet_by_index(0) for item
根据XLRD模块的文档, row_values(rowx, start_colx=0, end_colx=None) “返回给定行中单元格值的一部分。” 并给出以下 python 代码: impor
我有特定结构的 exel 文件。第一行是标题,第二行是名称,最后一行是值。我只需要标题和值,如果 Excel 文件只有 3 行,这并不难,但它可以是 100 行和列,我只需要获取标题和值,而不是任何名
我正在尝试编写一个 python 程序,用于使用 xlrd 和 xlwt 将 csv 文件中的实时股票报价附加到 excel 文件(已打开)。 任务概述如下。 从我的股票经纪人应用程序中,我的硬盘上不
嗨,我刚刚拿起 xlrd。关于访问工作表和单元格属性,我指的是Xlrd Column 那里的代码显示。 for crange in thesheet.col_label_ranges: rlo
我有一个脚本,如果我传递文件名,我就可以打开文件,但现在文件的数量正在增加,并且必须在每个文件上单独运行该脚本是没有意义的。所以我决定让python读取目录中的所有文件。 for root, dirs
我有一个具有以下结构的电子表格(数据从 B 列开始。A 列为空) A B C D Name city salary J
我正在使用 xlrd 和 python 来提取 Excel 数据,一切都很好,数据提取也很好,但代码只提取最后一行数据。 这是我的 Excel +-------------------+-------
我是 python 的新手,我正在尝试读取 .xls 文件并查看每行的第一列以查看它是否与我的变量匹配。我不确定我做错了什么,希望有人可以帮助我。我的最终目标是找到第一列中以此变量开头的每一行,然后删
我在 API 中找不到任何内容。有没有办法根据字符串匹配返回单元格的行号或坐标?例如:您给脚本一个字符串,它会扫描整个 .xls 文件,当它找到具有匹配字符串的单元格时,它会返回坐标或行号。 最佳答案
在 Python 中使用 XLRD 从 Excel 中读取。 简单的场景。我有一个带有值的单元格,它与命名范围相关联。 NamedRange "Foo"= Sheet1!$A$1A1中的值为“Bar”
有没有办法处理程序中的xlrd错误?我对数以千计的 excel 文件有一个复杂的问题。我正在尝试解析文件列表,打开每个电子表格并确定电子表格是否具有特定的选项卡或工作表。使用匹配的工作表名称创建一个新
我正在尝试从 xls 文件中读取一个长数字 (6425871003976),但 python 在将其读取为数字而不是字符串 (6.42587100398e+12) 之前一直在中继它。有什么方法可以直接
我正在使用 xlrd 读取 xls 文件。问题是,当 xlrd 读取这样的值时 "12/09/2012",我得到这样的结果 "xldate:41252.0"。当我使用 xlrd.xldate_as_t
我在 xlrd 中从 Excel 中读取特定单元格值时遇到困难。我正在读取的任何值(日期值)都将转换为数字。我知道有将其转换为 python 日期格式的解决方案,但我可以直接读取 xlrd 中的字符串
我使用 pip3 install 安装了 pandas 和 matplotlib。然后我运行了这个脚本: import pandas as pd import matplotlib.pyplot as
先用xlrd读excel文件--》book对象a 拿到指定的sheet页 xlrd对象 用xlutils copy 的copy方法复制 a得到b 通过判断a的列值,来修改b 保存b 得到结果
我是一名优秀的程序员,十分优秀!