我最近向openpyxl投稿,这是一个非常有趣的图书馆
然而,至少对我来说,有一些方面减缓了我最初的进度,因为我必须学习一些新的工具和概念等。当然,如果你有动力做出贡献,你会发现这些事情,但如果有人策划了一系列提示/说明/常见问题解答等,我本可以更快地做出贡献
因此,我决定在openpyxl上为这个问题打开一个话题(在我通过贡献提交-MR 384,以解决issue 1003)在issue 1530下。当我在计划写什么以及以什么格式时,我也认为在stackoverflow上解决这个问题会很好,因为有几个不同的原因。首先,当我陷入与编程相关的问题时,我总是搜索stackoverflow,所以其他人可能也会这样做。第二,这是一个很好的方式来测试水,看看人们对这个问题的看法;A、 在提交给heptapod/openpyxl之前。最后,它可能会激励一些人不仅消费开源和stackoverflow,而且也为他们做出贡献:)
下面是我的逐步指南,介绍如何设置提交openpyxl
stackoverflow的美妙之处在于,如果有什么不清楚的地方,很容易评论并让我知道,我应该可以在这里直接解决它。因此,随着时间的推移,答案应该会变得更好,并提供一个简单的替代渠道来询问关于openpyxl贡献的问题
一步一步(以下各方面的详细信息):
open_workbook()
这样的初始方法开始,通过代码库跟踪它们,了解它们是如何连接的李>hg topic topic-name
)更多详情:
与源代码管理相关:
hg up
是hg update
或hg checkout
的别名https://{username}:{accessToken}@foss.heptapod.net/openpyxl/openpyxl
)https://heptapod.net/pages/tuto-repo-http-access-token.html与库本身相关:
descriptors
文件夹包含启用类型系统的类(使用Typed
等类)以及启用XML与XML之间的序列化和反序列化&;XML的字符串表示形式(使用Serlializable
和to_tree()
方法和from_tree()
类)。类型系统很重要,因为OOXML规范相当严格,而且python是一种动态语言,因此我们需要一种以可伸缩的方式强制执行类型的方法。此外,由于.xlsx或.xlsm(2007年后)工作簿本质上只是一个包含XML文件的Zip文件,因此XML序列化和反序列化当然至关重要workbook
文件夹包含Workbook
类,该类是工作簿的python表示形式。此类的属性与实际工作簿的属性相对应packaging
文件夹包含用于存储工作簿文档属性(如作者、创建时间等)的类reader
文件夹包含用于将工作簿从磁盘读入内存(读入Workbook
类)的类writer
文件夹包含用于将内存中工作簿(在Workbook
类中)写入磁盘的类还有很多文件夹和类,但在我研究这些领域之前,我不会讨论它们。不过,一旦我这么做了,我会回来更新这个
库的文件夹结构,在本地克隆后:
与Excel文件本身相关:
(仅谈及2007/10年后的.xlsx和.xlsm品种)
对于一个相当简单的工作簿,工作簿结构如下所示。通常,根文件夹只包含一个文件
[Content_Types].xml
,这也称为“清单”。其中包含默认类型和替代类型的列表。本质上,当您向工作簿中添加越来越多的功能时,此类型列表将展开。例如,我实现了对Workbook.CustomDocumentProperties的支持,这些属性保存在docProps/custom.xml
中,一旦您添加一个CustomDocumentProperty,Excel就会添加此文件,但也会向清单中添加一个类型覆盖,以让Excel知道这是什么类型的XML文件:此外,在根文件夹中,通常有3个子文件夹,
_rels
、docProps
和xl
。文件夹_rels
通常称为“根rels”或“根关系”。此文件夹包含一个文件_rels/.rels
,它是整个文档的XML关系文件。这些“rels”文件(或关系文件)贯穿OOXML格式,简而言之,它们解释了如何将一个XML文件链接到另一个XML文件或二进制文件。例如,在这个简单的.xslm文件中,我们有一些CustomDocumentProperties(可选)以及默认属性(“docProps/core.xml”和“docProps/app.xml”)和根rels,如下所示:在上面的XML中,您可以看到工作簿本身存储在“xl/Workbook.XML”中,因此您可以从层次结构的角度考虑Excel文件,如
Document > Workbook > Worksheets
。每个工作簿至少需要一个工作表,正如我们在这里所做的那样。还请注意,主题也适合层次结构,如Document > Workbook > Themes
,如下面的文件夹结构所示同样,您可以推断层次结构,例如
Document > Styles
和Document > vbaProject
,这意味着它们与Workbook
处于相同的层次结构级别深入到结构中,您会再次看到
_rels
文件夹,这次是更深一层的xl/_rels/workbook.xml.rels
,这意味着它是Workbook.xml文件的关系:xl/workbook.xml
文件本身也是如此(尽管此处未列出样式、主题和vbaProject,但上面显示的关系很重要,因此Excel知道这些文件的存在):最后,通过查看
xl/worksheets/sheet1.xml
我们可以看到工作表是如何保存了一个文件。在这里,我们将“测试”一词保存在单元格B1中:目前,Sheet1没有关系,但随着我们向工作表中添加更多功能,将在
xl/worksheets/_rels/sheet1.xml.rels
创建此关系文件,并通知我们与Sheet1相关的额外数据(如XML文件或.bin文件)如果将excel文件(如
outfile.xlsm
)重命名为outfile.zip
,则可以提取所有文件并查看OOXML文档的结构:相关问题 更多 >
编程相关推荐