找回密码
 立即注册

QQ登录

只需一步,快速开始

KingMan

中级会员

68

主题

148

帖子

554

积分

中级会员

积分
554
KingMan
中级会员   /  发表于:2017-6-20 18:27  /   查看:3535  /  回复:9
本帖最后由 KingMan 于 2017-6-20 19:09 编辑

如何获取从左到右获取表格的顺序,注意,表格中可能出现嵌套的情况。
我进行过多次试验,当期版本中有几个问题,在Doc设计好的格式,复制黏贴到TXControl中,拆分的单元格可能会被拆分啦新表。
B1C{U]()MH%W$R`W([0MD.png746669006.png

在尝试的过程中,本来想通过单元格的Start,Postion 等信息来 将单元格排序,但是发现Position 可能会相同。单元格的Start和单元格从左到右排序不一致。
如下面的相关信息:
Row = 1,Column = 1,Length = 5,Text = 2010年, Start = 2, Position = 5
Row = 1,Column = 3,Length = 2,Text = 意识, Start = 8, Position = 1134
Row = 1,Column = 4,Length = 2,Text = 体温, Start = 11, Position = 1658
Row = 1,Column = 5,Length = 2,Text = 脉搏, Start = 14, Position = 2221
Row = 1,Column = 6,Length = 2,Text = 呼吸, Start = 17, Position = 2835
Row = 1,Column = 7,Length = 2,Text = 血压, Start = 20, Position = 3402
Row = 1,Column = 8,Length = 5,Text = 血氧饱和度, Start = 23, Position = 3686
Row = 1,Column = 9,Length = 2,Text = 吸氧, Start = 29, Position = 4678
Row = 1,Column = 10,Length = 2,Text = 入量, Start = 32, Position = 5245
Row = 1,Column = 11,Length = 2,Text = 出量, Start = 35, Position = 6663
Row = 1,Column = 14,Length = 4,Text = 皮肤情况, Start = 38, Position = 8080
Row = 1,Column = 15,Length = 4,Text = 管路护理, Start = 43, Position = 8647
Row = 1,Column = 16,Length = 2,Text = 其1, Start = 48, Position = 9214
Row = 1,Column = 17,Length = 2,Text = 其2, Start = 51, Position = 9639
Row = 1,Column = 18,Length = 3,Text = 其3, Start = 54, Position = 10065
Row = 1,Column = 19,Length = 8,Text = 病情观察及措施, Start = 58, Position = 10632
Row = 1,Column = 20,Length = 5,Text = 护士签名, Start = 67, Position = 12474
Row = 2,Column = 1,Length = 3,Text = 日/月, Start = 73, Position = 5
Row = 2,Column = 2,Length = 2,Text = 时间, Start = 77, Position = 614
Row = 2,Column = 10,Length = 2,Text = 名称, Start = 80, Position = 5245
Row = 2,Column = 11,Length = 1,Text = 量, Start = 83, Position = 5954
Row = 2,Column = 12,Length = 2,Text = 名称, Start = 85, Position = 6663
Row = 2,Column = 13,Length = 1,Text = 量, Start = 88, Position = 7230

程序代码片段:
  Table pTable = textControl1.Tables.GetItem();
if (pTable == null)
    return;
Table pOuterMostTable = pTable.OuterMostTable;
if (pOuterMostTable == null)
    pOuterMostTable = pTable;

String sX = "";
foreach (TableCell pNext in pOuterMostTable.Cells)
{
     if (pNext.Length == -1)
         continue;

     sX += String.Format("Row = {0},Column = {1},Length = {2},Text = {3}, Start = {4}, Position = {5}\n",
          pNext.Row, pNext.Column, pNext.Length, pNext.Text, pNext.Start, pNext.Position);
}

sX += "\n";
foreach (Table pNextTable in pOuterMostTable.NestedTables)
{
     foreach (TableCell pNext in pNextTable.Cells)
     {
         if (pNext.Length == -1)
             continue;

         sX += String.Format("Row = {0},Column = {1},Length = {2},Text = {3}, Start = {4}, Position = {5}\n",
              pNext.Row, pNext.Column, pNext.Length, pNext.Text, pNext.Start, pNext.Position);
     }
}

尝试啦多次,拿这个控件没有办法啦,有没有什么办法可以知道从左到右单元格排序,如果能,给下Demo,如果不行,能不能联系下厂商那边有没有处理方法。
特别是下面这个表格,处理起来调试的结果完全和预期不一致。
  
2010年
  
呼吸系统
  
日/月
  
时间
   
呼吸支持
   
a
   
b
c
d
e
   

9 个回复

倒序浏览
gw0506
超级版主   /  发表于:2017-6-20 19:10:27
沙发
这只能自己算,这没有办法,因为你的表格复杂,有嵌套。
以“入量”和下面的“名称”看,确实一个是第1行第10列,名称是第2行第10列,他们的Start也确实不一样。从这个来说,完全可以区分出两个单元格。剩下怎么排序的问题,就是你业务逻辑的算法问题,你定义的是从左到右,那么嵌套怎么算,就怎么写了。
你说的排序不一致指的是什么不一致。
回复 使用道具 举报
KingMan
中级会员   /  发表于:2017-6-21 09:34:19
板凳
gw0506 发表于 2017-6-20 19:10
这只能自己算,这没有办法,因为你的表格复杂,有嵌套。
以“入量”和下面的“名称”看,确实一个是第1行 ...

这个功能不涉及业务,我随便一个表都是要实现这个功能,我不可能对每一个表头去写一个方法。而且格式设计是客户自定义去设计的。
1.我在doc中设计好表格,没有嵌套的表格,但是拷贝到TXControl中就自动给我拆分啦表格
2.这个控件难道自己插入的表格都不知道从左到右那些列

看看有什么办法没有 或帮忙咨询下,这个需求我想以后也会有这样的需求
回复 使用道具 举报
KingMan
中级会员   /  发表于:2017-6-21 09:51:25
地板
KingMan 发表于 2017-6-21 09:34
这个功能不涉及业务,我随便一个表都是要实现这个功能,我不可能对每一个表头去写一个方法。而且格式设计 ...

另外,有没有办法知道某个单元格是否被嵌套了表格,如果知道,那这个问题就有可能解决啦
回复 使用道具 举报
KingMan
中级会员   /  发表于:2017-6-21 09:51:25
5#
KingMan 发表于 2017-6-21 09:34
这个功能不涉及业务,我随便一个表都是要实现这个功能,我不可能对每一个表头去写一个方法。而且格式设计 ...

另外,有没有办法知道某个单元格是否被嵌套了表格,如果知道,那这个问题就有可能解决啦
回复 使用道具 举报
gw0506
超级版主   /  发表于:2017-6-21 10:16:42
6#
KingMan 发表于 2017-6-21 09:34
这个功能不涉及业务,我随便一个表都是要实现这个功能,我不可能对每一个表头去写一个方法。而且格式设计 ...

感觉我们沟通的并不顺畅。那我换个说法
表格里,定位单元格的就是row和column。昨天我已经给你说了,你每一个单元格的row和column是唯一的,可以区别的,那么一个表格就完成了它的任务。你现在从左到右有哪些列,你根据column去拿就好了。控件自己不会插入表格,都是人给他插入的。

至于嵌套,这是用户加上的,表格本身不知道谁嵌套谁,如果要说嵌套,那么每个Table可以看成是一个Cell,里面就是无数嵌套了。明白我意思吗?加上了名称,数据之间的逻辑这些业务相关的东西,才会有嵌套的感念产生。Table只有单元格,只有单元格合并和拆分。不知道我这么说,你理解没有。

第一个问题,copy过去的表格自动拆分了,这个可以发来看看。其他问题不是控件层面解决的。
回复 使用道具 举报
KingMan
中级会员   /  发表于:2017-6-21 10:28:08
7#
gw0506 发表于 2017-6-21 10:16
感觉我们沟通的并不顺畅。那我换个说法
表格里,定位单元格的就是row和column。昨天我已经给你说了,你 ...

doc文档最后一个表格

新建 Microsoft Word 文档.docx

16.42 KB, 下载次数: 105

回复 使用道具 举报
gw0506
超级版主   /  发表于:2017-6-21 12:13:17
8#
你这个模板我看了,最下面,右下角的是嵌套的Table,不是用合并或者拆分来实现的。
TX不支持这种嵌套的Table,所以实现不了。
回复 使用道具 举报
KingMan
中级会员   /  发表于:2017-6-21 14:16:52
9#
gw0506 发表于 2017-6-21 12:13
你这个模板我看了,最下面,右下角的是嵌套的Table,不是用合并或者拆分来实现的。
TX不支持这种嵌套的Tab ...

那个是我有意这么设计的,因为制作模板是客户自己去做的,我们不可预知他们是插入表还是通过拆分合并单元格的方式。
另外,即使是我自己嵌套进去的表,但是拷贝到TXControl 就变成啦3个表格,是什么情况??
回复 使用道具 举报
gw0506
超级版主   /  发表于:2017-6-21 17:55:00
10#
因为TX不支持嵌套。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部