langjs 发表于 2024-9-12 10:56:13

求助WPS表格操作

本帖最后由 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)
)

kozmosovia 发表于 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")

飞雪神光 发表于 2024-9-12 11:04:35

类似这些操作 Excel现在和WPS是通用的 这都是在明经和网上找的;;说明:设置表格列宽度
;;参数:XLApp:已打开的excel文件对象
;;参数:index:区域索引,A1引用格式或者行列表
;;参数:h:字符串格式数字
;;返回:
(Defun BF-Excel-setRangeheight (XLApp index h)
        (vlax-put-property (BF-Excel-getRange dcbg-excelobj index) "ColumnWidth" h)
)
;;说明:设置表格边框
;;参数:xlapp:已打开的excel文件对象
;;参数:index:区域索引,A1引用格式或者行列表
;;参数:n:边框线宽
;;返回:
(defun lm-Excel-set-Borders-Weight(xlapp index n)
        (setq range(BF-Excel-getRange xlapp index))
        (vlax-put-property (vlax-get-property range "Borders") "Weight" n)
)
;;说明:设置表格边框线形,线形为0-13的数字,其中0为无边框,其余数字个对应不同的线型
;;参数:xlapp:已打开的excel文件对象
;;参数:index:区域索引,A1引用格式或者行列表
;;参数:n:边框线形数字
;;返回:
(defun lm-Excel-set-Borders-LineStyle(xlapp index n)
        (setq range(BF-Excel-getRange xlapp index))
        (vlax-put-property (vlax-get-property range "Borders") "LineStyle" n)
)
;;说明:设置表格边框颜色,颜色索引号可以为数字1-56,其中1为黑,2为白,3...
;;参数:xlapp:已打开的excel文件对象
;;参数:index:区域索引,A1引用格式或者行列表
;;参数:n:色号
;;返回:
(defun lm-Excel-set-Borders-ColorIndex(xlapp index n)
        (setq range(BF-Excel-getRange xlapp index))
        (vlax-put-property (vlax-get-property range1 "Borders") "ColorIndex" "n")
)

langjs 发表于 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)
)

xyp1964 发表于 2024-9-14 22:57:25


;; xls单元格操作
(defun c:aa ()
(if (setq xls (vlax-create-object "excel.application"))
    (progn
      (vlax-invoke-method (vlax-get-property xls 'WorkBooks) 'Add)
      (vla-put-visible xls 1)
      (setq aw (vlax-get xls 'ActiveWorkbook)
            as (vlax-get aw 'ActiveSheet)
            aa (vlax-get-property as "range" "D4")
      )
      (vlax-put aa 'Formula "中秋节快乐!")
      (vlax-put (vlax-get aa 'Borders) 'Value 1) ; 单元格加边框
      (vlax-put (vlax-get aa 'Font) 'ColorIndex 3) ; 单元格字体颜色 0自动1红色3绿色6黄
      (vlax-put (vlax-get aa 'Interior) 'ColorIndex 6) ; 单元格背景颜色 0自动1红色3绿色6黄
      (setq bb (vlax-get (vlax-get (vlax-get as 'usedrange) 'cells)'columns))
      (vlax-invoke-method bb 'autofit); 自动调整宽度
    )
)
(princ)
)

hn10183051 发表于 2024-9-15 13:38:15

为什么我的office2016 EXCE建立一个新文档时报错 实参太少 位置-> 行:8 列:18

Noangler 发表于 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 受系统控制
页: [1]
查看完整版本: 求助WPS表格操作