我有一个基于数据透视表的Excel电子表格,它定期更新(每月)并上传到我的服务器(由一个对输出中的任何更改都非常犹豫的小组生成)。我希望能够写一个脚本,我可以通过cron作业运行,以处理和加载从透视表到我的数据库的原始数据。
然而,我不知道如何获得底层数据,而不手动进入windows,在excel中打开文件,双击total单元格,获得一个新的工作表,其中包含填充该单元格的所有原始数据,并将该工作表保存为csv,然后我可以通过某种语言(在我的情况下是python)加载到我的数据库中。看起来他们应该是一些可脚本化的方法来提取底层数据。
我只有Linux机器(在VM中运行Windows/Office;但我更喜欢一个不涉及Windows的解决方案)。我熟悉像xls 2csv这样的工具(它不能访问原始数据),也熟悉使用python-unoconv这样的工具从python编辑openoffice文档。然而,即使是手动使用openoffice,我也看不到一种获取底层数据的方法。
编辑:在花了几个小时没有取得任何进展之后(在发布这篇文章之前),我没有开始通过unoconv将其转换为ODS,并且可能能够使用python-odf来提取最后一张表(称为“DPCache”)。
所以现在的问题是从ODS中获取一张表转换成CSV;这对我来说应该不难理解(尽管非常感谢帮助)。
2条答案
按热度按时间klsxnrf11#
我以前也有同样的问题。您可以通过解压缩xlsx并阅读/解释xml文件来解决。最重要的两个文件是。
第一个,具有pivotCacheRecords1.xml中原始数据的关系,您需要通过索引号访问,我的意思是,通过pivotCacheRecords1.xml中具有标记
<x>
的每个列,您需要通过标记<x>
的索引号获得pivotCacheDefinition1.xml中的数据,为了更好地理解,您需要查看xml文件。pivotCacheDefinition1.xml
pivotCacheRecords1.xml
看到CacheRecords 1标记中的
<x>
是CacheDefinition 1中的<s>
标记的关系,现在如果你理解了这一点,就不会很难在记录的迭代中使用它。我们最后还是这样。
然后,您所要做的就是迭代CacheRecords 1,并在标记为
<x>
时将列的索引与defdict中的键进行匹配然后你可以把dfdata放在dataframe中
剩下的都是历史,希望能对你有所帮助。
快乐编码!!!
fkaflof62#
你试过xlrd吗?另请参阅python-excel website中提供的教程。
就这么简单