所见即所得的Excel报表生成(二)——从 Html table到 Excel Cell 时间:2011-06-14 20:42来源:未知 作者:admin 点击: 104 次 在上一篇文章中,已经解决了如何获取 html table结构的问题。在本篇文章中,我们着力于 table结构的解析。 Html table的结构我们大家都很熟悉,那么在另一端如何构造一个结构,让 Excel可以很好的接受和处理呢? 直观的看,一个完整 Excel的内容是由位于各个单元 在上一篇文章中,已经解决了如何获取 html table结构的问题。在本篇文章中,我们着力于 table结构的解析。 Html table的结构我们大家都很熟悉,那么在另一端如何构造一个结构,让 Excel可以很好的接受和处理呢? 直观的看,一个完整 Excel的内容是由位于各个单元格(Cell)中的内容组合而成的。而每个单元格(Cell)都有相应 X、Y 坐标来标示其位置。也就是说,一个 Excel文件实质上就是许多 Cell构成的集合,每个 Cell用坐标属性确定位置,用内容属性存储内容。 基于此,我设计了最基本的Cell结构: ◆ X 坐标 ◆ Y 坐标 ◆ 合并列情况 ◆ 合并行情况 ◆ 内容 构成Excel的最基本的结构已经确定,下一步摆在我们面前的就是将html table转化为Excel Cell集合。 Html table中的每个 td节点对应一个 Excel单元格,其内容不必说,行、列的合并情况也自可由 td的rowspan、colspan属性得出,转化的关键点就在于由 table的tr td结构定位 Excel单元格位置,即X、Y 坐标。 Y 坐标容易确定,即td所在 tr的行数。至于一 td的X 坐标,其要受到两方面因素的影响:与 该 td同 处一 tr,但 位于其之 前(反 映 在表格视 觉 上即其左侧 td)td的占 位情况和该 td所在 tr的之 前tr中某 些 td的跨 行情况。 基于此种 考 虑 ,定位 td的X 坐标需 经过 两个过 程 的推 导 :用于处理左 侧 td占 位影响的横 向 推 导 (Horizontal Deduction)和处理之 前行跨 行td影响的纵向推导(Vertical Deduction)。 以下图所示table为例,展示两次推导过程。 横向推导(Horizontal Deduction) 一次横向推导(Horizontal Deduction)限定在一tr范围内。整个过程基于递归的原理,递归模型如下: 核心代码为: 1 private int HorizontalDeduction(HtmlNode phnTd) 2 { 3 HtmlNode hnPreviousSibling = phnTd.PreviousSibling; 4 while (hnPreviousSibling !=...