明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1156|回复: 11

[讨论] 求助WPS表格操作

[复制链接]
发表于 2024-9-12 10:56:13 | 显示全部楼层 |阅读模式
本帖最后由 langjs 于 2024-9-12 10:57 编辑

两个样例,如果电脑安装了EXCEL,命令aa 是把数据写入EXCEL,然后调整颜色,划线,宽度。

如果电脑安装了WPS,命令BB 是把数据写入WPS表格
我的问题是,EXCEL时调整颜色,划线,宽度用到很多msxl-命令需要加载数据库,但是如果是WPS,需要调整颜色,划线,宽度,该如何写程序?我找了很多资料未找到答案,希望大神能指点一二,谢谢。



;;; 操作excel
(defun c:aa (/ appsession ash bks default newbook newitem newsheet path rng tlbfile xlcontinuous xlscells)
  (setvar "cmdecho" 0)
  (vl-load-com)
  (setq appsession (vlax-create-object "excel.application")) ; 连接 excel,
  (setq bks (vlax-get-property appsession 'workbooks)) ; 获取 workboooks
  (setq newbook (vlax-invoke-method bks 'add)) ; 建立一个新文档
  (setq newsheet (vlax-get-property newbook "sheets")) ; 获取活动 sheet
  (setq newitem (vlax-get-property newsheet "item" 1)) ; 获取首单元格
  (setq xlscells (vlax-get-property newitem "cells")) ; 获取单元格集合
  (vla-put-visible appsession 1)       ; 显示excel
  (vlax-put-property xlscells "item" 1 2 (vl-princ-to-string "今天是个好日子")) ; 写入文本
  (setq path (vlax-get-property appsession 'path)) ; 下面是加载数据库程序
  (setq tlbfile (findfile (strcat path "\\Excel.exe")))
  (vlax-import-type-library :tlb-filename tlbfile :methods-prefix "msxl-" :properties-prefix "msxl-" :constants-prefix
                            "msxl-"
  )
  (setq ash (msxl-get-activesheet appsession)) ; 加载完数据库才能用msxl-命令
  (vlax-invoke-method (vlax-get-property (vlax-get-property (vlax-get-property ash 'usedrange) 'cells) 'columns) 'autofit) ; 为选中的范围的实行自动调整宽度
  (vlax-invoke-method (vlax-get-property (vlax-get-property (vlax-get-property ash 'usedrange) 'cells) 'columns)
                      'borderaround xlcontinuous default 1
  )                                    ; 为选中的范围的实行网格线
  (setq rng (vlax-variant-value (msxl-get-item (msxl-get-cells ash) (vlax-make-variant 1) (vlax-make-variant 2)))) ; 在?
                                       ; 获取1 2行列范围内的单元格对象
  (msxl-put-colorindex (msxl-get-interior rng) 6) ; 单元格颜色设置为6
  (princ)
)

;;; 操作wps
(defun c:bb (/ appsession bks newbook newitem newsheet xlscells)
  (setvar "cmdecho" 0)
  (vl-load-com)
  (setq appsession (vlax-create-object "ket.Application")) ; 连接 wps,
  (setq bks (vlax-get-property appsession 'workbooks)) ; 获取 workboooks
  (setq newbook (vlax-invoke bks 'add)) ; 建立一个新文档
  (setq newsheet (vlax-get-property newbook "sheets")) ; 获取活动 sheet
  (setq newitem (vlax-get-property newsheet "item" 1)) ; 获取首单元格
  (setq xlscells (vlax-get-property newitem "cells")) ; 获取单元格集合
  (vla-put-visible appsession 1)       ; 显示wps
  (vlax-put-property xlscells "item" 1 2 (vl-princ-to-string "今天是个好日子")) ; 写入文本
  (princ)
)

"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2024-9-12 11:04:13 | 显示全部楼层
本帖最后由 kozmosovia 于 2024-9-12 11:20 编辑

msxl是vlax-import-type-library方式临时定义的函数,这种方式会一下子定义几千个函数,其实没啥必要。可以把msxl当成ActiveX对象中的vla-get-和vla-invoke,不引入msxl前缀定义时,可以直接用vlax-get-property和vlax-invoke替代转写相应的属性和方法。跟COM对象的(vlax-get-height vlobject)等价于(vlax-get-proeprty vlobject 'height)类似
(msxl-get-cells obj) == (vlax-get-property obj "cells")
回复 支持 2 反对 1

使用道具 举报

发表于 2024-9-12 11:04:35 | 显示全部楼层
类似这些操作 Excel现在和WPS是通用的 这都是在明经和网上找的
  1. ;;说明:设置表格列宽度
  2. ;;参数:XLApp:已打开的excel文件对象
  3. ;;参数:index:区域索引,A1引用格式或者行列表
  4. ;;参数:h:字符串格式数字
  5. ;;返回:
  6. (Defun BF-Excel-setRangeheight (XLApp index h)
  7.         (vlax-put-property (BF-Excel-getRange dcbg-excelobj index) "ColumnWidth" h)
  8. )
  9. ;;说明:设置表格边框
  10. ;;参数:xlapp:已打开的excel文件对象
  11. ;;参数:index:区域索引,A1引用格式或者行列表
  12. ;;参数:n:边框线宽
  13. ;;返回:
  14. (defun lm-Excel-set-Borders-Weight(xlapp index n)
  15.         (setq range(BF-Excel-getRange xlapp index))
  16.         (vlax-put-property (vlax-get-property range "Borders") "Weight" n)
  17. )
  18. ;;说明:设置表格边框线形,线形为0-13的数字,其中0为无边框,其余数字个对应不同的线型
  19. ;;参数:xlapp:已打开的excel文件对象
  20. ;;参数:index:区域索引,A1引用格式或者行列表
  21. ;;参数:n:边框线形数字
  22. ;;返回:
  23. (defun lm-Excel-set-Borders-LineStyle(xlapp index n)
  24.         (setq range(BF-Excel-getRange xlapp index))
  25.         (vlax-put-property (vlax-get-property range "Borders") "LineStyle" n)
  26. )
  27. ;;说明:设置表格边框颜色,颜色索引号可以为数字1-56,其中1为黑,2为白,3...
  28. ;;参数:xlapp:已打开的excel文件对象
  29. ;;参数:index:区域索引,A1引用格式或者行列表
  30. ;;参数:n:色号
  31. ;;返回:
  32. (defun lm-Excel-set-Borders-ColorIndex(xlapp index n)
  33.         (setq range(BF-Excel-getRange xlapp index))
  34.         (vlax-put-property (vlax-get-property range1 "Borders") "ColorIndex" "n")
  35. )
 楼主| 发表于 2024-9-12 14:12:49 | 显示全部楼层
kozmosovia 发表于 2024-9-12 11:04
msxl是vlax-import-type-library方式临时定义的函数,这种方式会一下子定义几千个函数,其实没啥必要。可以 ...

谢谢,一句惊醒梦中人,根本不需要加载什么数据库,搞定了。我把程序传上来。
;;; 操作excel
(defun c:aa (/ appsession ash bks default newbook newitem newsheet path rng tlbfile xlcontinuous xlscells)
  (setvar "cmdecho" 0)
  (vl-load-com)
  (setq appsession (vlax-create-object "excel.application")) ; 连接 excel,
  (setq bks (vlax-get-property appsession 'workbooks)) ; 获取 workboooks
  (setq newbook (vlax-invoke-method bks 'add)) ; 建立一个新文档
  (setq newsheet (vlax-get-property newbook "sheets")) ; 获取活动 sheet
  (setq newitem (vlax-get-property newsheet "item" 1)) ; 获取首单元格
  (setq xlscells (vlax-get-property newitem "cells")) ; 获取单元格集合
  (vla-put-visible appsession 1)       ; 显示excel
  (vlax-put-property xlscells "item" 1 2 (vl-princ-to-string "今天是个好日子")) ; 写入文本
  (setq ash (vlax-get-property appsession "activesheet"))
  (vlax-invoke-method (vlax-get-property (vlax-get-property (vlax-get-property ash 'usedrange) 'cells) 'columns) 'autofit) ; 为选中的范围的实行自动调整宽度
  (vlax-invoke-method (vlax-get-property (vlax-get-property (vlax-get-property ash 'usedrange) 'cells) 'columns)
                      'borderaround xlcontinuous default 1
  )                                    ; 为选中的范围的实行网格线
  (setq rng (vlax-variant-value (vlax-get-property (vlax-get-property ash "cells") "item" (vlax-make-variant 1)
                                                   (vlax-make-variant 2)
                                )
            )
  )
  (vlax-put-property (vlax-get-property rng "interior") "colorindex" 6) ; 单元格颜色设置为6
  (princ)
)
;;; 操作wps
(defun c:bb (/ appsession bks newbook newitem newsheet xlscells)
  (setvar "cmdecho" 0)
  (vl-load-com)
  (setq appsession (vlax-create-object "ket.Application")) ; 连接 wps,
  (setq bks (vlax-get-property appsession 'workbooks)) ; 获取 workboooks
  (setq newbook (vlax-invoke bks 'add)) ; 建立一个新文档
  (setq newsheet (vlax-get-property newbook "sheets")) ; 获取活动 sheet
  (setq newitem (vlax-get-property newsheet "item" 1)) ; 获取首单元格
  (setq xlscells (vlax-get-property newitem "cells")) ; 获取单元格集合
  (vla-put-visible appsession 1)       ; 显示wps
  (vlax-put-property xlscells "item" 1 2 (vl-princ-to-string "今天是个好日子")) ; 写入文本
  (setq ash (vlax-get-property appsession "activesheet"))
  (vlax-invoke-method (vlax-get-property (vlax-get-property (vlax-get-property ash 'usedrange) 'cells) 'columns) 'autofit) ; 为选中的范围的实行自动调整宽度
  (vlax-invoke-method (vlax-get-property (vlax-get-property (vlax-get-property ash 'usedrange) 'cells) 'columns)
                      'borderaround xlcontinuous default 1
  )                                    ; 为选中的范围的实行网格线
  (setq rng (vlax-variant-value (vlax-get-property (vlax-get-property ash "cells") "item" (vlax-make-variant 1)
                                                   (vlax-make-variant 2)
                                )
            )
  )
  (vlax-put-property (vlax-get-property rng "interior") "colorindex" 6) ; 单元格颜色设置为6
  (princ)
)

点评

我也不知道  发表于 2024-9-13 11:05
xlcontinuous 是啥?  发表于 2024-9-12 21:55

评分

参与人数 2明经币 +3 收起 理由
baitang36 + 1 很给力!
xyp1964 + 2 赞一个!

查看全部评分

发表于 2024-9-14 22:57:25 | 显示全部楼层
  1. ;; xls单元格操作
  2. (defun c:aa ()
  3.   (if (setq xls (vlax-create-object "excel.application"))
  4.     (progn
  5.       (vlax-invoke-method (vlax-get-property xls 'WorkBooks) 'Add)
  6.       (vla-put-visible xls 1)
  7.       (setq aw (vlax-get xls 'ActiveWorkbook)
  8.             as (vlax-get aw 'ActiveSheet)
  9.             aa (vlax-get-property as "range" "D4")
  10.       )
  11.       (vlax-put aa 'Formula "中秋节快乐!")
  12.       (vlax-put (vlax-get aa 'Borders) 'Value 1) ; 单元格加边框
  13.       (vlax-put (vlax-get aa 'Font) 'ColorIndex 3) ; 单元格字体颜色 0自动1红色3绿色6黄
  14.       (vlax-put (vlax-get aa 'Interior) 'ColorIndex 6) ; 单元格背景颜色 0自动1红色3绿色6黄
  15.       (setq bb (vlax-get (vlax-get (vlax-get as 'usedrange) 'cells)'columns))
  16.       (vlax-invoke-method bb 'autofit); 自动调整宽度
  17.     )
  18.   )
  19.   (princ)
  20. )
发表于 2024-9-15 13:38:15 | 显示全部楼层
为什么我的office2016 EXCE建立一个新文档时报错 实参太少 位置-> 行:8 列:18
发表于 2024-9-18 09:13:16 | 显示全部楼层
高端局,给大佬支持一下。
发表于 2024-9-18 14:57:55 | 显示全部楼层
赞赞,前段时间刚遇到,不会解决;同事问我没装office 咋办,我只能回一句,能力有限电脑必须要装个office,没有msxl库,我无能为力
发表于 2024-10-11 20:15:27 | 显示全部楼层
本帖最后由 统一网名 于 2024-10-12 06:52 编辑
langjs 发表于 2024-9-12 14:12
谢谢,一句惊醒梦中人,根本不需要加载什么数据库,搞定了。我把程序传上来。
;;; 操作excel
(defun c: ...

请教一下,操作wps的示例中是新建一个工作薄,如果我想打开 F:\\桌面\\11.xls ,想增加个判断如果该文件没有打开则打开,如果已打开则设置为当前活动表格该如果更改代码。
发表于 2024-10-12 08:35:36 | 显示全部楼层
langjs 发表于 2024-9-12 14:12
谢谢,一句惊醒梦中人,根本不需要加载什么数据库,搞定了。我把程序传上来。
;;; 操作excel
(defun c: ...

同时安装excel和wps  程序无法准确打开excel或wps 受系统控制
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-25 04:45 , Processed in 0.159321 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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