找回密码
 立即注册

QQ登录

只需一步,快速开始

lifesky2006

注册会员

11

主题

79

帖子

152

积分

注册会员

积分
152

活字格认证

lifesky2006
注册会员   /  发表于:2014-10-22 10:40  /   查看:13396  /  回复:14
1、在使用SPREAD的时候,希望能自动的分配列宽以适应spread的总宽度,请问怎么自动分配列宽。
2、有时候希望自己来分配列宽,或者平均,或者不平均,但是使用spread.width/n的方式分配成n份宽度是不行的,尤其是当spread带有了滚动条后,这个宽度就更不能用spread.width来分配了。我曾测试过:
     for i=1 to 6
         spread.colwidth(i)=spread.width/6
     next
     证明不行,实际列宽总和超出了spread宽度跑到右边去了
     spread.colwidth(0)=10
     spread.colwidth(1)=30
     for i=2 to 6
        spread.colwidth(i)=(spread.width-40)/4
     next     也不对的
     有了滚动条后,我用数据测试滚动条宽度,有时候-300就够了,有时候要减500
后来经过测试,我发现spread的列宽每次增量是25(也许跟字体有关),进行分配的时候可能除数是小数了或者不在25份内,所以我用
     t=0
     for i=1 to 5
        spread.colwidth(i)=spread.width/6
        t=t+spread.colwidth(i)
     next
     spread.colwidth(6)=spread.width-t
还是不精确,有的时候还是列宽大于总宽度了
而且如果根据spread.width来分配列宽,如果设置了滚动条是自动出现,数据不够的时候隐藏的话,这样分配就更不行了
行高分配也是同理

希望能给出一个好的例子,谢谢

14 个回复

正序浏览
iceman
社区贡献组   /  发表于:2015-7-10 18:07:00
15#
回复 14楼寂江湖的帖子

感谢您的反馈,我没有搜索当相应接口,能否把您的方法上传到论坛参考下?
回复 使用道具 举报
寂江湖
注册会员   /  发表于:2015-7-10 14:02:00
14#
应该是使用put_ColWidth()函数来设置列宽吧
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2015-1-16 18:07:00
13#
回复 12楼lifesky2006的帖子

问题我们已经查收,有进一步进展回复给你。
回复 使用道具 举报
lifesky2006
注册会员   /  发表于:2015-1-16 14:10:00
12#
不好意思这么久没回复,感觉这个获取的比原来好很多,但是还是不知道怎么实现当滚动条出现的时候怎么更改宽度,因为获取到的ScrollBarWidth=-1
而且滚动条好像不能自动隐藏,数据多了再出现?

另外,如果获取到了高度和宽度,再等分的时候,比如maxcols=3
For i = 1 To fpSpread1.MaxCols
        fpSpread1.ColWidth(i) = width / fpSpread1.MaxCols
    Next i
这个时候colwidth(i)会有小数,到最后还是会有一点的空白留下
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2014-11-17 10:52:00
11#
回复 10楼lifesky2006的帖子

客气了,请问这个问题目前您那边解决了吗?
回复 使用道具 举报
lifesky2006
注册会员   /  发表于:2014-11-14 17:33:00
10#
非常感谢
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2014-10-30 19:14:00
9#
回复 8楼lifesky2006的帖子

这是我目前调查的进度,先共享给您:

  1. Private Sub Command1_Click()
  2.     fpSpread1.MaxCols = 3
  3.     fpSpread1.UnitType = UnitTypeTwips

  4.     Dim width As Long, height As Long
  5.    
  6.     Dim i As Long
  7.      
  8.     fpSpread1.GetClientArea width, height
  9.     If fpSpread1.BorderStyle = BorderStyleFixedSingle Then
  10.         width = width - (2 * Screen.TwipsPerPixelX)  ' Borders
  11.     End If
  12.     For i = 0 To fpSpread1.RowHeaderCols - 1
  13.         width = width - fpSpread1.ColWidth(i)
  14.         width = width - (1 * Screen.TwipsPerPixelX) ' Gridlines
  15.     Next i
  16.     For i = 1 To fpSpread1.MaxCols
  17.         width = width - (1 * Screen.TwipsPerPixelX) ' Gridlines
  18.     Next i
  19.     width = width - (17 * Screen.TwipsPerPixelX)
  20.    
  21.     For i = 1 To fpSpread1.MaxCols
  22.         fpSpread1.ColWidth(i) = width / fpSpread1.MaxCols
  23.     Next i
  24.    
  25. End Sub
复制代码
回复 使用道具 举报
lifesky2006
注册会员   /  发表于:2014-10-30 14:36:00
8#
等待中。。。。。。
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2014-10-27 19:55:00
7#
回复 6楼lifesky2006的帖子

好的,我会进一步跟进这个问题,有结果反馈给你。
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部