Python XLSX到XML的模式映射

Python XLSX到XML的模式映射,python,xml,excel,xlsx,openpyxl,Python,Xml,Excel,Xlsx,Openpyxl,我在映射到XML模式的XLSX工作簿上使用XML工具构建了两个基本工作流。您可以将数据输入电子表格,导出XML,我有一些脚本可以处理数据 现在,我正试图消除这一步骤,构建一个更加集成和可移植的工具,通过从XSLT/XQuery迁移到Python,其他人可以轻松使用它。我仍然希望使用Excel进行数据输入,但是让Python脚本直接读取XLSX文件 我发现有很多易于使用的库可以从Excel中读取,但它们需要明确说明数据所在的单元格,如“A1:C2”范围等。使用XML映射的有用之处在于,用户可以调整

我在映射到XML模式的XLSX工作簿上使用XML工具构建了两个基本工作流。您可以将数据输入电子表格,导出XML,我有一些脚本可以处理数据

现在,我正试图消除这一步骤,构建一个更加集成和可移植的工具,通过从XSLT/XQuery迁移到Python,其他人可以轻松使用它。我仍然希望使用Excel进行数据输入,但是让Python脚本直接读取XLSX文件

我发现有很多易于使用的库可以从Excel中读取,但它们需要明确说明数据所在的单元格,如“A1:C2”范围等。使用XML映射的有用之处在于,用户可以调整表的大小,甚至移动表以适应不同的行,并重命名表。他们的库是否允许我选择表作为单位


我尝试的另一种方法是解压XLSX并直接解析XML。问题是,我们的数据非常复杂,最多需要30-50张表,在未压缩的XLSX结构中解析这些数据非常困难。我确实在未压缩的XLSX中找到了我的XML模式,那么有没有办法在Excel之外将数据重新格式化为该模式?基本上是Excel在将工作簿保存为.xml文件时所做的工作。Excel格式由于组件之间的依赖关系而非常复杂,例如,您无法确保文件夹“工作表”中工作表的顺序与文件在Excel中的外观有任何关系

我不太清楚您到底想做什么,但是现有的库提供了一个隐藏XML层的客户机代码接口。如果你不想这样,你就必须寻找那些你觉得有用的部分。在openpyxl中,您希望查看openpyxl/reader.py中的内容


但是,使用lxml可能会更幸运,因为在后台使用libxml2将允许您将单个XML加载到Python中,并直接使用.objectify方法对其进行操作。我们在openpyxl中不这样做,因为XML树消耗大量内存,许多人有非常大的工作表,但是使用Powerpoint的库显示了这是多么容易。

如果您的工作流可以导出到.csv,那么会让您的工作更轻松。微软有一个很好的既得利益,就是不让其他人使用他们的格式。也就是说,有一个win32 api存在,您可能会发现它很有用。或者搜索“python xlsx到csv”。或者,如果你真的想让事情变得更好,只需在Tkinter或flask+html中创建一个简单的UI来输入数据。@WayneWerner:恕我直言,你的评论让你听起来好像从未尝试过直接读取Excel文件的可用库,主要是xlrd和OpenPyXL。使用这些工具阅读Excel非常容易,在某些方面比首先转换为CSV更容易。CSV也因不能存储类型信息而出名,因此您甚至无法区分数字和看起来像数字的字符串。OP关于Excel库的问题并不是通过先转换为CSV就能解决的。如果有什么不同的话,首先转换成CSV会让生活变得更加困难。@JohnY True story-我最近没有尝试过任何Excel库。如果有新的库使这一点变得更容易,那么这对Python来说是非常棒的:@WayneWerner您关于文件格式的观点是有效的–规范似乎是不称职和混淆的组合–但是文件格式仍然比CSV有很多优势,值得注意的是,某种程度的打字和人们已经有了可以处理大部分内容的GUI:OpenOffice、LibreOffice、Google文档都做得很好。这不仅仅是关于数据输入的,所以Tkinter/Flask的建议是不正确的。@Charlichtlark如果我的评论是一个答案,那么是的,它将完全不正确-这就是为什么我把它作为一个评论。但OP表示,我正试图消除这一步骤,构建一个更集成、更便携的工具,其他人可以轻松使用,你可以将数据输入电子表格,导出XML,我有一些脚本可以处理数据。我不知道数据输入有多复杂,但制作一个UI并完全跳过整个XML过程可能是合理的。它可能无法回答OP提出的问题,但可能会解决他们的问题。