uualice2020 发表于 2024-3-5 15:36:13

获取EXCEL选中单元格的数据,现在的码只能获取连续的单元格


[*]目前代码可以获取如下图片中的,选中不连续的获取不到下方的数据,请各路大神,代码怎么改写可以获取所选的所有数据
[*]
[*](defun e2c_list(flag / Selection UsedRange flage sht)
[*](defun E-Get-Range-Value(range / a arr)
[*]      (if(and range
[*]
[*]               (setq arr (vlax-get-property range "value" nil ))
[*]         )
[*]                (progn
[*]                        (if (< 8000 (vlax-variant-type arr))
[*]                              (progn
[*]                                        (setq a(vlax-safearray->list(vlax-variant-value arr)))
[*]                                        (mapcar '(lambda(x)(mapcar 'vlax-variant-value x))a)
[*]                              )
[*]                              (progn
[*]                                        (vlax-variant-value arr)
[*]                              )
[*]                        )
[*]                )
[*]      )
[*])
[*](setq e(vlax-get-object "Excel.Application"))
[*](setq sht(vlax-get-property e "ActiveSheet"))
[*](Setq Selection (vlax-get-property e (quote Selection) ))
[*](setq UsedRange(vlax-get-property sht "UsedRange"))
[*](cond ((= flag "0")(setq lst(E-Get-Range-Value UsedRange)));用过的单元格全部数据
[*]      ((= flag "1")(setq lst(E-Get-Range-Value Selection))));选中的单元格全部数据(只能选连续的)
[*]lst
[*]
[*])

自贡黄明儒 发表于 2024-3-5 15:53:13

本帖最后由 自贡黄明儒 于 2024-3-5 15:55 编辑

用户选定的单元格
(setq **Excel** (vlax-get-or-create-object "excel.application"))
(setq Selection (vlax-get-property *excel* 'Selection)
         Cells   (vlax-get-property Selection 'Cells)
   )

uualice2020 发表于 2024-3-5 15:57:58

自贡黄明儒 发表于 2024-3-5 15:53
用户选定的单元格
(setq **Excel** (vlax-get-or-create-object "excel.application"))
(setq Selection ...

用这个代码得到#<VLA-OBJECT Range 00000215b39ddc18>,这种怎么获取单元格的数据

uualice2020 发表于 2024-3-5 16:00:23

自贡黄明儒 发表于 2024-3-5 15:53
用户选定的单元格
(setq **Excel** (vlax-get-or-create-object "excel.application"))
(setq Selection ...

我用之前的方法还是只能得到前面的数据,后面的获取不到

yxp 发表于 2024-3-5 16:02:13

;;功能:载入工作表指定区域数据为 VisualLisp 数组
;;参数:ss 路径及文件名; n 工作表的下标或名称; usg 指定的数据区域
;;返回:VL数组
;;示例:(Get_Sheet_arry "d:\\cpp\\data.xlsx" 1 "a2:e2000")
;;VisualLisp 数组用法,查找第 2 行,第 3 列数据,转 lisp 表用 mapcar
;;(vlax-variant-value(vlax-safearray-get-element arr 2 3))

(defun Get_Sheet_arry(ss n usg / vg ws sht)
(setq excel (vlax-get-or-create-object "excel.application")
    vg vlax-get-property ws (vg excel 'Workbooks)
    sht(vg (vg (vlax-invoke ws 'Open ss) 'Worksheets) 'item n)
    arr (vlax-variant-value (vg (vg sht 'Range usg) 'Formula)))
(vlax-invoke ws 'close) arr
)

                        
原文链接:https://blog.csdn.net/yxp_xa/article/details/80910654

liuhe 发表于 2024-3-5 16:13:57

上传有问题的excel文件,是不是所有文件都是这个问题?另存为或者复制到新的文件行不行?

uualice2020 发表于 2024-3-5 16:21:47

liuhe 发表于 2024-3-5 16:13
上传有问题的excel文件,是不是所有文件都是这个问题?另存为或者复制到新的文件行不行?

这个跟EXCEL没关系吧

liuhe 发表于 2024-3-5 16:37:15

uualice2020 发表于 2024-3-5 16:21
这个跟EXCEL没关系吧

有的excel文件 有bug
页: [1]
查看完整版本: 获取EXCEL选中单元格的数据,现在的码只能获取连续的单元格