解析word中的表格
由于word表格的特殊性,其本身中的数据本来就不够完善,不能够很好的知道其具体的合并、跨行的相关属性,表格的单位可能是PT或者是百分比,并且是共存的,为处理带来了一定的负担,本代码实现了一个将Word表格解析为XMLTable。
由于没找到上传附件的位置,仅提供部分代码,有需要的可email我(提供联系方式)或进群:490571636,我会提供全部代码。
/// <summary> /// 分析表格通过位置跨度 /// </summary> /// <param name="table">word表格对象</param> /// <returns>自定义的表格对象</returns> public static WordTable ParserTableByPositionSpan(Word.Table table) { List<double> positionList = new List<double>(); WordTable wordTable = new WordTable();
wordTable.RowCount = table.Rows.Count; wordTable.ColCount = table.Columns.Count; positionList.Add(0); double tableWidth = 0; //获取所有行中的单元格及位置列表 如果有的列没有获取,说明没有或被上边的单元格合并(只有上边被合并的列才会) for (var row = 1; row <= table.Rows.Count; row++) { WTRow currRow = wordTable.AddRow(); currRow.RowIndex = row; double leftPosition = 0; for (var col = 1; col <= table.Columns.Count; col++) { Word.Cell cell = null; try { //获取指定位置的单元格,如果没有会触发异常 cell = table.Cell(row, col); } catch (Exception e) { //System.Diagnostics.Trace. } //指定的位置有单元格则直接添加到当前行 if (cell != null) { //第一行的宽度肯定会有值不会了现9999999的情况 if (row == 1) { tableWidth += cell.Width; } WTCol wTCol = currRow.AddCol(); wTCol.Value = GetRangeParagraphs(cell.Range);
double width = cell.Width; //cell的宽度有三种形式 //按内容展示(磅值)Word.WdPreferredWidthType.wdPreferredWidthAuto 属性width有值 PreferredWidth为0 //固定宽度(磅值) Word.WdPreferredWidthType.wdPreferredWidthPoints 属性width有值 PreferredWidth有时为9999999 //匹配窗口(百分比)Word.WdPreferredWidthType.wdPreferredWidthPercent 属性width有时为9999999 PreferredWidth为百分比 switch (cell.PreferredWidthType) { case Word.WdPreferredWidthType.wdPreferredWidthAuto: width = cell.Width; break; case Word.WdPreferredWidthType.wdPreferredWidthPoints: ///9999999为百分比或磅值时 取PreferredWidth的宽度 if (width == 9999999) { width = cell.PreferredWidth; } break; case Word.WdPreferredWidthType.wdPreferredWidthPercent: ///9999999为百分比或磅值时 width和PreferredWidth所对应的宽度 if (width == 9999999) { width = GetPercentWidth(tableWidth, cell.PreferredWidth); } break; } wTCol.Width = width; wTCol.RealCol = col; wTCol.Left = leftPosition; leftPosition += width; AddNewPosition(positionList, leftPosition); continue; }
//WTCol prevRowWTCol1 = wordTable.GetPreviousRowRefCol(row, col); //WTCol prevRowWTCol2 = wordTable.GetPreviousRowRefColByLeft(row, leftPosition); WTCol prevRowWTCol1 = wordTable.GetPreviousRowRefColByLeft(row, leftPosition); //第一列 如果没有单元格说明被上边的行给合并了 if (prevRowWTCol1 != null) { //if (prevRowWTCol1.Left + prevRowWTCol1.Width > leftPosition) { prevRowWTCol1.RowSpan += 1; } leftPosition += prevRowWTCol1.Width; continue; } //if (prevRowWTCol2 != null) //{
//} //else } }
wordTable.ColCount = positionList.Count - 1;
//矫正列合并处理 由于列合并不会产生空的单元格,以列宽判断列合并情况(默认均为合并1列) foreach (var row in wordTable.Rows) { //int realColCount = 1; foreach (var col in row.Cols) { int colSpan = GetPositionSpan(positionList, col.Left, col.Left + col.Width);
col.ColSpan = colSpan; col.RealCol = GetRealColByPositionList(positionList, col.Left); //realColCount; //realColCount += colSpan; //realColCount } }
return wordTable; }
解析word中的表格的更多相关文章
- Delphi读取不Word中不规则表格数据并转换成标准表格
程序需要,需要将word中不规则的表格数据转换为标准的表格,即合并的单元格按正常格式解析,word中的表格格式如下: 解析后数据如下: 借鉴了网上代码,如下处理: procedure TfrmMain ...
- word模板导出的几种方式:第一种:占位符替换模板导出(只适用于word中含有表格形式的)
1.占位符替换模板导出(只适用于word中含有表格形式的): /// <summary> /// 使用替换模板进行到处word文件 /// </summary> public ...
- 【转】一张图解析FastAdmin中的表格列表的功能
一张图解析FastAdmin中的表格列表的功能 功能描述请根据图片上的数字索引查看对应功能说明. 1.时间筛选器如果想在搜索栏使用时间区间进行搜索,则可以在JS中修改修改字段属性,如 {field: ...
- 教你如何将word中的表格完美粘贴到ppt中
经常操作办公软件的人一定有一个困惑,ppt本身表格编辑能力似乎很弱,如果从word里直接将一个编辑好的表格复制粘贴到ppt中,整个表格一定会发生让你没有预料的变化,还得重新花老大的劲去重新编辑,有人屛 ...
- C# 在Word中添加表格的方法
表格是组织整理数据的一种重要手段,应在生活中的方方面面.在Word文档中将繁杂的文字表述内容表格化,能快速.直接地获取关键内容信息.那么,通过C#,我们也可以在Word文档中添加表格,这里将介绍两种不 ...
- python简单爬虫 用lxml解析页面中的表格
目标:爬取湖南大学2018年在各省的录取分数线,存储在txt文件中 部分表格如图: 部分html代码: <table cellspacing="0" cellpadding= ...
- Java使用POI读取Word中的表格
个人博客 地址:https://www.wenhaofan.com/a/20190627135921 代码 package live.autu.word; import java.io.FileInp ...
- 外部应用复制 表格 到word中 设置表格自适应
word 批量设置表格宽度自适应 描述 : 我们经常从 外部 如 excel,html 等其他文件 中复制的表格到word 文档 经常会出现在 word 中显示不全的问题 主要是源格式的表格 宽度比 ...
- 关于Word中复杂表格转完美的Markdown格式的技巧
背景 我们都知道有很多工具能做到Word转Markdown格式,但是在某些复杂的需求下,比如带合并单元格的表格,就会出现错乱,效果非常不理想. 那我们今天来学习和探讨下怎么实现完美转换. 转换 如果想 ...
随机推荐
- sqlprofiler 常用调试方法
- xml中,button改变背景颜色方法
在画几个设置界面,用到了button控件,对于button空间的背景色在不同状态下的颜色改变方法,做了一下尝试,发现了两种背景颜色改变的方法,就总结了下. 方法一尝试了好多遍才好,要点在于,在sele ...
- c++多线程崩溃错误1
主线程中的子线程没有jion,导致主线程马上结束,子线程对象被释放掉,而子线程还在后台继续执行导致崩溃 int main() OBJ = classA() OBJ.START()//在start函数中 ...
- H264源码分析(二)
原文出自http://blog.csdn.net/xfding/article/details/5476763(转载收集) (四)图像参数集语义 pic_parameter_set_rbsp( ) { ...
- SEO,你敢说你会吗?
SEO从何開始学起?SEO基础知识我们须要掌握哪些?SEO是什么?SEO究竟要怎么做?这些问题无时无刻不在困惑着我们.就我个人一些小观点来谈谈一个站点优化的大致步骤. SEO初期阶段 空间域名:空间跟 ...
- how to translate the text of push button
Background:In a project, the need to translate the buttons on the screen, as shown below,the followi ...
- C#软件winform程序安装包制作及卸载程序制作
使用vs2010 winform程序开发的软件的人比较多,程序的开发是为了在不同的人不同的机器使用,为了使不同的机器能使用该软件就需要在制作程序安装包,安装包里必须包含该软件运行所选的所有环境,下面就 ...
- Mps与Mrp区别
MPS是完成品的计划表,描述一个特定的完成品的生产时间和生产数量.MPS是一个决定完成品生 产排程及可答应量(ATP)的程序.依据MPS,MRP得以计算在该完成品需求之下,所有组件,零件以 至原材 ...
- JavaScript中的setAttribute用法
我们经常需要在JavaScript中给Element动态添加各种属性,这可以通过使用setAttribute()来实现,这就涉及到了浏览器的兼容性问题. setAttribute(string nam ...
- 深入解析CSS样式层叠权重值
本文为转载内容,源地址:http://www.ofcss.com/2011/05/26/css-cascade-specificity.html 读到<重新认识CSS的权重>这篇,在文章最 ...