Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从Excel电子表格中读取手动插入的文本_Java_Python_Excel_Apache Poi_Xlrd - Fatal编程技术网

Java 从Excel电子表格中读取手动插入的文本

Java 从Excel电子表格中读取手动插入的文本,java,python,excel,apache-poi,xlrd,Java,Python,Excel,Apache Poi,Xlrd,我有一个.xlsx文件,里面有我的大学时间表。我正在开发一个利用时间表的应用程序。但我不想将这个Excel电子表格中的时间表内容“复制”成更“程序员友好”的格式,相反,我想编写一个程序/脚本来解析这个.xlsx表格,并自动将其转换为我需要的格式(例如,在代码中的某些对象中) 阅读电子表格的“普通”单元格对我来说没有问题。但是,创建此时间表文件的人员不是简单地在每个单元格中输入一个文本条目,而是手动将一些单元格“划分”为“子单元格”,并在每个单元格中手动插入一些文本。这看起来像: 该如何解释:学生

我有一个
.xlsx
文件,里面有我的大学时间表。我正在开发一个利用时间表的应用程序。但我不想将这个Excel电子表格中的时间表内容“复制”成更“程序员友好”的格式,相反,我想编写一个程序/脚本来解析这个
.xlsx
表格,并自动将其转换为我需要的格式(例如,在代码中的某些对象中)

阅读电子表格的“普通”单元格对我来说没有问题。但是,创建此时间表文件的人员不是简单地在每个单元格中输入一个文本条目,而是手动将一些单元格“划分”为“子单元格”,并在每个单元格中手动插入一些文本。这看起来像:

该如何解释:学生分为4组。在
15.20-16.50时
只有第1组和第2组有特定的等级。在
17.00-18.30
时,只有第1组、第3组和第4组有该等级

正如人们所看到的,这些“单元”不是真实的单元——它们似乎是手动创建的(“分割”),就像图片中选择的文本一样

问题是:我如何找到和读取像图片中那样的“单元格”(手动插入的文本组件)(最好也知道它们的位置,这样我不仅可以读取存在的类,还可以读取它们开始的时间(时间在电子表格的最左边)


我尝试使用了Python
xlrd
模块,但未能达到我的要求。我在Java
apachepoi
方面也没有取得任何成功-我就是找不到如何阅读这样的文本条目。无论使用何种库和方法,这两种语言上的解决方案对我来说都是不错的。

xls和xslx都是专有格式。微软在法庭上不厌其烦地解释说xslx是开放的,但不幸的是,没有一位法官知道任何有关计算机科学的重要知识,律师也知道这一点,所以不要被他们误导性的案例分散注意力。XSLX允许“供应商”添加一块“自定义二进制BLOB”,并且绝大多数excel功能都在这些二进制BLOB中,这些功能并不是最常见、最低级的东西。毫无疑问,这里发生的“将一个文本表对象粘贴到一个单元格”的事情就是这样

微软从未发布过关于这些二进制blob的任何文档,也没有任何可以解析它们的库

因此,Apache POI、xlrd和所有其他用于读取XLS文件的库都是基于逆向工程的,这些文件并不明确要求在运行“库”的计算机上安装和运行Excel(如果您有一台基于linux的服务器,这是一种很难拉的东西!),而且这种格式很糟糕。从字面上看——查看Apache POI的“HSSF”代表什么。官方上没有什么,但从词源上说,H代表恐怖。(可怕的电子表格格式-HSSF)

要说:对不起——你可能不能。这不是POI或xlrd的错,而是微软的错。使用这种封闭的、专有的和未记录的格式来传输任何有意义的内容是不合适的。错误存在于任何导致您现在无法编写软件来解析奇怪excel文件的过程中

如果必须的话,在excel中运行的脚本很可能会解决这个问题,并以文档格式写出csv文件或json或其他内容。或者,您可以用C#编写一些东西,但这只是将工作分配给excel,因此,您仍然无法将此代码移植到其他平台

ApachePOI确实为您提供了一种更低级的方法,您可以在其中读取二进制blob。您可以尝试自己对“cell-with-a-table-in-it”中发生的任何事情进行反向工程,但xlrd团队和Apache POI团队都没有为此烦恼,至少POI团队有记录说,格式似乎被设计成模糊的——这听起来像是一项需要花费您很多、很多周时间的工作

这让我回到了我之前建议的解决方案:除非花费数周时间构建一个非常脆弱的堆栈,它需要一个完整的windows和一个excel许可证,与人类行为的简单改变(不太可能)相比,它的危害更小,否则解决方法在于解决这个过程(如中所示,excel用于传输此信息的地址,或者至少使excel工作表muuuch比这更简单),而不是通过了解如何在java或python中读取这些混乱的内容