找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 2282|回复: 17

[API建议] 关于 XDEX 解析库的建议

[复制链接]

已领礼包: 1268个

财富等级: 财源广进

发表于 2014-12-30 20:46:08 | 显示全部楼层 |阅读模式

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

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

×
这几天用的 Excel 略多一些,对比 XdEx 解析库和 Com 方式比较,对 XdEx 函数提几个建议

1 Com 方式中有 Range 对象,读写这个和 Lisp 的表很容易对应,而且这个 Range 可以指定范围,即有起始和终止单元格,写入也同样

对比 XdEx 函数 xdex_cell_readrange 和 xdex_cell_writerange , 前者只能指定起始一直读到结束,不能设定结束位置,后者与 Lisp list 的结合比 Com 方便

2 格式设置

在 Com 方式中,同样 Range 可以方便的设定一些格式,比如对齐、字体、单元格格式等等,在 XdEx 中是使用 addFormat ,这个使用习惯和 Lisp 还是稍有区别,另外很多属性没有手册可供查询,还有这种对 Cell 的设置,大部分时候没有 Range 对象设置方便,毕竟特殊单元格设置是少量,批量才是王道

另外 XDAPI 在 2010 - 2012 版本时,第一个打开的 DWG 上使用会提示 ADS 请求错误,不知道其他坛友有没有遇到过
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 1268个

财富等级: 财源广进

 楼主| 发表于 2014-12-30 20:50:34 | 显示全部楼层
补充一个

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

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2014-12-30 21:07:35 | 显示全部楼层
FORMAT的用法,用 (xdex_getproperty "format") (xdex_Setproperty "format") 可以获得支持的方法,后面跟上具体的方法,可以打印出参数的格式和要求。

FORMAT遵循的都是标准的EXCEL文档的规范,在API还没进一步包装情况下,可以用基本的函数(都提供了)去写个LISP函数包装,比如WRITERANGE....
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

 楼主| 发表于 2014-12-30 21:38:14 | 显示全部楼层
XDSoft 发表于 2014-12-30 21:07
FORMAT的用法,用 (xdex_getproperty "format") (xdex_Setproperty "format") 可以获得支持的方法,后面跟 ...


命令: (xdex_setpropertyvalue "format" "alignh")
Excel Format:
├─AlignH
       Type: String
       Value: "General"
              "Left"
              "Right"
              "Center"
              "Fill"
              "Justify"
              "Merge"
              "Distributed"
命令: (xdex_setpropertyvalue "format" "border")

命令: (xdex_setpropertyvalue "format" "borderleft")

命令: (xdex_setpropertyvalue "format" "borderleft" t)
nil
命令: (xdex_setpropertyvalue "format" "bordertop")

命令: (xdex_setpropertyvalue "format" "bordertop" 1)

点评

[attachimg]12455[/attachimg] 要对实体名进行操作,先增加一个FORMAT,然后对实体名 setperpertyvalue,也可以通过实体名获得帮助。  详情 回复 发表于 2014-12-30 22:00
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2014-12-30 22:00:58 | 显示全部楼层
st788796 发表于 2014-12-30 21:38
命令: (xdex_setpropertyvalue "format" "alignh")
Excel Format:
├─AlignH

搜狗截图20141230215958.png

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

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2014-12-30 22:02:53 | 显示全部楼层
就和XDGE库使用一样,FORMAT,FONT EXCELE对象实体也通过(xdge::free....)释放。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

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

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

 楼主| 发表于 2014-12-30 23:55:48 | 显示全部楼层
newer 发表于 2014-12-30 22:04
好像老大写过一个FORMAT设置文字对中的例子,找找看。

看了好久还是不得要领,说个具体例子,我现在要修改 5 15 20 行的行高分别为 10 12 16 ,如何做

点评

设置行高的有专门的函数,以前想加到 xdex_setpropertyvalue "sheet" 里面,还没完成。等下版本API。 [*]bool setCol(int colFirst, int colLast, double width, Format* format = 0, bool hidden = false)Sets  详情 回复 发表于 2014-12-31 00:46
CELL的格式是 xdex_cell_getformat, 读出后,通过 setpropertyvalue 设置变化的部分,然后通过 write, writerange写回。 (setq format (xdex_book_addFormat)) (xdex_setpropertyvalue format "AlignH"  详情 回复 发表于 2014-12-31 00:33
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2014-12-31 00:33:25 | 显示全部楼层
st788796 发表于 2014-12-30 23:55
看了好久还是不得要领,说个具体例子,我现在要修改 5 15 20 行的行高分别为 10 12 16 ,如何做

CELL的格式是 xdex_cell_getformat,  读出后,通过 setpropertyvalue 设置变化的部分,然后通过 write, writerange写回。


          (setq format (xdex_book_addFormat))
          (xdex_setpropertyvalue format "AlignH" "center" "AlignV" "center")
          (xdex_book_setWorkFormat format)
          (xdex_cell_writerange 0 0 data)

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

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2014-12-31 00:46:19 | 显示全部楼层
st788796 发表于 2014-12-30 23:55
看了好久还是不得要领,说个具体例子,我现在要修改 5 15 20 行的行高分别为 10 12 16 ,如何做

设置行高的有专门的函数,以前想加到 xdex_setpropertyvalue "sheet" 里面,还没完成。等下版本API。

  • bool setCol(int colFirst, int colLast, double width, Format* format = 0, bool hidden = false)Sets column width and format for all columns from colFirst to colLast. Column width measured as the number of characters of the maximum digit width of the numbers 0, 1, 2, ..., 9 as rendered in the normal style's font. Value -1 is used for autofit column widths. If format equals 0 then format is ignored. Columns may be hidden. Returns false if error occurs. Get error info with Book::errorMessage().
  • bool setRow(int row, double height, Format* format = 0, bool hidden = false)Sets row height and format. Row height measured in point size. If format equals 0 then format is ignored. Row may be hidden. Returns false if error occurs. Get error info with Book::errorMessage().

    可以一次性设置多个行,列的高度,宽度,格式,是否隐藏。


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

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

 楼主| 发表于 2014-12-31 00:48:46 | 显示全部楼层
XDSoft 发表于 2014-12-31 00:33
CELL的格式是 xdex_cell_getformat,  读出后,通过 setpropertyvalue 设置变化的部分,然后通过 write, w ...

这就太麻烦了,Com 用 Value2 写,不影响其他的

点评

这些都是原子函数,用的时候都在于包装。LISP写也行,C++写也行。 COM那些也都是包装。  详情 回复 发表于 2014-12-31 01:29
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2014-12-31 01:29:41 | 显示全部楼层
st788796 发表于 2014-12-31 00:48
这就太麻烦了,Com 用 Value2 写,不影响其他的

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

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

 楼主| 发表于 2014-12-31 06:20:09 来自手机 | 显示全部楼层
XDSoft 发表于 2014-12-31 01:29
这些都是原子函数,用的时候都在于包装。LISP写也行,C++写也行。
COM那些也都是包装。

高级库的意义不就是为应用层提供方便高效的包装函数吗?应用级不管什么语言都不会全部使用底层库函数,还是要再包装,自定义函数
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

 楼主| 发表于 2014-12-31 09:31:09 | 显示全部楼层
XDSoft 发表于 2014-12-31 00:33
CELL的格式是 xdex_cell_getformat,  读出后,通过 setpropertyvalue 设置变化的部分,然后通过 write, w ...

writerange 之前应该保存原来格式,write 时仅写入 text 和 value

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

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-20 07:10 , Processed in 0.485388 second(s), 63 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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