这类表格的解析稍微复杂一些,它们属于复杂里面最简单的。
我们来看看他们的xml数据是如何定义的。
首先看带有跨行的表格的例子。
对于跨行的情况,我们发现表格的xml数据,该有的行和列,数量都没有变。只是在要合并的单元格上标记了一个<w:vMerge>标签。
这个标签表示有跨行的单元格。v表示vertical,是竖直方向的意思。vMerge表示竖直合并。这个标签里面还有属性值w:val,当值为restart时表示此单元格开始出现合并,continue表示此单元格没有结束,继续保持,直到遇到非continue情况。
再来看看跨列的情况。
跨列因为发生在行内,是行内矛盾,不影响其他行。所以,我们看到只有在第1行的第1格中,采用<w:gridSpan>标签,说明本行有跨列的单元格。val值是2,表示跨2个单位。
为什么我前面说,tc是table cell的缩写。我的依据就在这里。其实这个表格的结构是2行2列。如果c指的是column的话,它应该有2个<w:tc>,后一个复用前一个。但是,我们看上图里的结构,它只有一个<w:tc>。那我们称呼它叫单元格更贴切,因为它只有一个框。你可以反驳我,我会立马说,你说的对,但以后依然称呼它单元格。
带有合并单元格的页面还原,逻辑稍微复杂。但是底层还是和普通表格一样,通过循环行和列。你只需要遇到合并的时候,搞一个colspan=2或者rowspan=3就行。
此处,我不再给大家贴代码了。原理已经讲得很透彻了,算是留一个作业。你可以自己思考一下,会有更多的收获。
唉呀,还是给大家一个小提示吧,仅供参考。因为我搞合并单元格时,花费了2天时间才完成。我把一个关键点提供给大家:对于复杂表格,最终的数据结构用一维数组更恰当。这个结构可以像这样[{"x_start":0, "x_end":1, "y_start":0, "y_end":0, "content":"不要问我"}]。
如果你看完了,2个小时还搞不定。那请您不要来问我,问我也是回复一个狗头表情。
四、其他妙用:藏初恋照片?首先声明,这招我没用过啊。我只是论述它的可行性。
我的很多读者都结婚了,最差也有女朋友了,他们还都怕老婆。
但是,谁没有热血青春呢?
有人就想存着初恋照片,夜深人静的时候看一看。但是,又怕被现任发现。
怎么办?手机相册不安全!文件加密码或者修改后缀名属于不打自招。
那么,你千万不要放到docx中。它只不过是个压缩包。解压缩之后,加点文件进去,改回来还是正常的文档。看不出来有任何问题,经得起组织考验和检查。
我有这么个文档,很清白的一个文档。
解压缩之后,里面包含有图片,甚至pdf都有。