找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 5693|回复: 21

[分享] GRID实现类EXCEL的表格

[复制链接]

已领礼包: 20个

财富等级: 恭喜发财

发表于 2018-1-28 22:23:45 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
下面是个GRID的例子,实现了,一个CELL输入完,回车,光标自动激活下一个CELL
到最后一个CELL,回车会自动增加行。像个EXCEL的样子了。

ODCL-GRID-回车处理.gif


请点击此处下载

请先注册会员后在进行下载

已注册会员,请先登录后下载

文件名称:GrdTest.lsp 
下载次数:38  文件大小:2.6 KB  售价:30D豆 [记录]
下载权限: 实习生 以上  [免费赚D豆]


请点击此处下载

查看状态:需购买或无权限

您的用户组是:游客

文件名称:GrdTest.odcl 
下载次数:81  文件大小:836 Bytes 
下载权限: 不限 以上  [免费赚D豆]



论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 8613个

财富等级: 富甲天下

发表于 2018-1-28 22:33:25 | 显示全部楼层
能增加列吗?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 812个

财富等级: 财运亨通

发表于 2018-1-29 08:03:57 | 显示全部楼层
感谢大师分享
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 8613个

财富等级: 富甲天下

发表于 2018-1-29 17:51:26 | 显示全部楼层
试了一下,可以显示多列,但不能编辑,得修改程序。能不能再加个增加列的功能
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2018-1-29 18:00:34 | 显示全部楼层

对应用来说,列是程序定的,行是用户数据,你在ODCL设计里面设计好列就行了并相关调整下就行了。
不应该存在用户临时增加列的。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 8613个

财富等级: 富甲天下

发表于 2018-1-29 18:04:50 | 显示全部楼层
我想增加到4列,该修改哪些语句?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 3904个

财富等级: 富可敌国

发表于 2018-1-30 08:34:59 | 显示全部楼层
回车会自动增加行
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 459个

财富等级: 日进斗金

发表于 2018-1-30 09:09:51 | 显示全部楼层

个人感觉,改下面三句:
1、(dcl-Grid-AddColumns GrdTest/Form/Grd '(("" 2 30) ("A" 0 60) ("B" 0 60)))改为(dcl-Grid-AddColumns GrdTest/Form/Grd '(("" 2 30) ("A" 0 60) ("B" 0 60) ("C" 0 60)));;;增加了C列
2、(dcl-Control-SetColumnStyleList GrdTest/Form/Grd '(0 6 6))改为(dcl-Control-SetColumnStyleList GrdTest/Form/Grd '(0 6 6 6));;;为C列设置格式
3、(setq colCnt 3)改为(setq colCnt 4);;;把列数设为4
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 8613个

财富等级: 富甲天下

发表于 2018-1-30 10:38:25 | 显示全部楼层

修改成功,多谢!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2018-1-30 11:29:04 | 显示全部楼层

把修改成功的完整的代码贴上来啊。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 8613个

财富等级: 富甲天下

发表于 2018-1-30 12:00:58 | 显示全部楼层

  1. ;;;模仿excel输入
  2. (defun c:Grdtest (/                                   c:GrdTest/Form#OnCancelClose
  3.                       c:GrdTest/Form#OnInitialize  c:GrdTest/Form#OnTimer
  4.                       c:GrdTest/Form/BtnOk#OnClicked
  5.                       c:GrdTest/Form/ChkAddRows#OnClicked
  6.                       N_CurCell                           N_NextCell
  7.                       addRowsP                           StyleList
  8.                       ColumnCnt                           Collist
  9.                      )
  10.   (defun sn:leftnthlst (n lst)
  11. ;;;返回一个表中的前n个元素的表
  12. ;;;示例:(sn:leftnthlst 2 '(1 2 3 4 5 6));返回表(1 2)
  13. ;;;如果输入的n值大于表长返回原表;小于1返回nil
  14.     (vl-remove nil
  15.                (mapcar '(lambda        (x)
  16.                           (if (>= (setq n (1- n)) 0)
  17.                             x
  18.                             nil
  19.                           )
  20.                         )
  21.                        lst
  22.                )
  23.     )
  24.   )
  25.   (defun c:GrdTest/Form#OnCancelClose (reason)
  26.     (if        (zerop reason)
  27.       (progn (cond ((not (print (dcl-GetFocus)))
  28.                                         ; Workaround. Would not work if there are multiple grids.
  29.                     (N_NextCell)
  30.                    )
  31.                    ((= (last (dcl-GetFocus)) "Grd") (N_CurCell))
  32.              )
  33.              T                                ; Prevent closing.
  34.       )
  35.     )
  36.   )
  37.   (defun c:GrdTest/Form#OnInitialize ()
  38.     (setq addRowsP nil)
  39.     (dcl-Control-SetValue GrdTest/Form/ChkAddRows 0)
  40.     (dcl-Grid-AddColumns
  41.       GrdTest/Form/Grd
  42.       (append '(("" 2 30)) (sn:leftnthlst ColumnCnt Collist))
  43.     )
  44.     (dcl-Control-SetColumnStyleList
  45.       GrdTest/Form/Grd
  46.       (cons 0
  47.             (repeat ColumnCnt (setq StyleList (cons 6 StyleList)))
  48.       )
  49.     )
  50.     (mapcar '(lambda (num)
  51.                (dcl-Grid-AddRow GrdTest/Form/Grd (list (itoa num)))
  52.              )
  53.             '(1 2 3 4)
  54.     )
  55.     (dcl-Form-StartTimer GrdTest/Form 0)
  56.   )
  57.   (defun c:GrdTest/Form#OnTimer        ()
  58.     (dcl-Grid-StartCellEdit GrdTest/Form/Grd 0 1)
  59.   )
  60.   (defun c:GrdTest/Form/BtnOk#OnClicked        ()
  61.     (dcl-Form-Close GrdTest/Form)
  62.   )
  63.   (defun c:GrdTest/Form/ChkAddRows#OnClicked (value)
  64.     (setq addRowsP (= value 1))
  65.   )
  66.   (defun N_CurCell (/ cur)
  67.     (setq cur (dcl-Grid-GetCurCell GrdTest/Form/Grd)) ; Format: (row col).
  68.     (dcl-Grid-StartCellEdit
  69.       GrdTest/Form/Grd
  70.       (car cur)
  71.       (cadr cur)
  72.     )
  73.   )
  74.   (defun N_NextCell (/ colCnt cur rowCnt)
  75.     (setq colCnt (1+ ColumnCnt))        ; Includes index column.
  76.     (setq rowCnt (dcl-Grid-GetRowCount GrdTest/Form/Grd))
  77.     (setq cur (dcl-Grid-GetCurCell GrdTest/Form/Grd)) ; Format: (row col).
  78.     (if        (and addRowsP
  79.              (= (car cur) (1- rowCnt))
  80.              (= (cadr cur) (1- colCnt))
  81.         )
  82.       (dcl-Grid-AddRow
  83.         GrdTest/Form/Grd
  84.         (list (itoa (setq rowCnt (1+ rowCnt))))
  85.       )
  86.     )
  87.     (if        (and (/= (car cur) -1) (/= (cadr cur) -1))
  88.       (dcl-Grid-StartCellEdit
  89.         GrdTest/Form/Grd
  90.         (if (= (cadr cur) (1- colCnt))
  91.           (rem (1+ (car cur)) rowCnt)
  92.           (car cur)
  93.         )
  94.         (if (= (cadr cur) (1- colCnt))
  95.           1
  96.           (1+ (rem (cadr cur) colCnt))
  97.         )
  98.       )
  99.     )
  100.   )
  101.   (setq        StyleList '()
  102.         ColumnCnt (uint 1 "" "\n输入列数" 4)
  103.         Collist          '(("A" 0 60)
  104.                     ("B" 0 60)
  105.                     ("C" 0 60)
  106.                     ("D" 0 60)
  107.                     ("E" 0 60)
  108.                     ("F" 0 60)
  109.                     ("G" 0 60)
  110.                     ("H" 0 60)
  111.                     ("I" 0 60)
  112.                     ("J" 0 60)
  113.                     ("K" 0 60)
  114.                     ("L" 0 60)
  115.                     ("M" 0 60)
  116.                     ("N" 0 60)
  117.                    )
  118.   )
  119.   (setvar 'cmdecho 0)
  120.   (vl-cmdf "_Opendcl")
  121.   (setvar 'cmdecho 1)
  122.   (dcl-Project-Load "GrdTest" T)
  123.   (dcl-Form-Show GrdTest/Form)
  124.   (princ)
  125. )

先到N,足够用了,不够再加。但是怎么返回输入的二维表呢?opendcl实在是不太会

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2018-1-30 12:03:06 | 显示全部楼层
很好的例子
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 459个

财富等级: 日进斗金

发表于 2018-1-30 17:22:36 | 显示全部楼层

不知还有没有更好的方法:
1、获取指定单元格的值:(dcl-Grid-GetCellText GrdTest/Form/Grd Row [as Long] Column [as Long]);返回值为string
2、获取指定行的值:(dcl-Grid-GetRowCells GrdTest/Form/Grd Row [as Long]);返回值为List of Strings as (Cell0Label Cell1Label ...)
3、获取指定列的值:(dcl-Grid-GetColumnCells GrdTest/Form/Grd Column [as Long]);返回值为List of Strings as (Cell0Label  Cell1Label ...)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 27个

财富等级: 恭喜发财

发表于 2018-5-3 15:47:00 | 显示全部楼层
实在是帮了我的大忙了
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2018-6-25 21:03:29 | 显示全部楼层
请问marting老师,你这个表格中的列宽可以设置为固定,不允许调整么?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-12-26 22:09 , Processed in 0.574352 second(s), 61 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表