biya 发表于 2025-3-13 08:12:34

(Deepseek训练作品)excel生成cad中TABLE表的源代码

本帖最后由 biya 于 2025-3-13 08:18 编辑

(defun c:tt (/ excel-app excel-file excel-workbook excel-sheet excel-range row-count col-count data row col pt table cell-value)
;; 提示用户选择Excel文件
(setq excel-file (getfiled "选择Excel文件" "" "xlsx;xls" 16))
(if (not excel-file)
    (progn
      (princ "\n未选择文件。")
      (exit)
    )
)

;; 启动Excel应用程序
(setq excel-app (vlax-get-or-create-object "Excel.Application"))
(vlax-put-property excel-app 'Visible :vlax-false);; 不显示Excel窗口

;; 打开Excel文件
(setq excel-workbook (vlax-invoke-method (vlax-get-property excel-app 'Workbooks) 'Open excel-file))
(setq excel-sheet (vlax-get-property (vlax-get-property excel-workbook 'Sheets) 'Item 1));; 选择第一个工作表

;; 获取Excel数据的范围
(setq excel-range (vlax-get-property excel-sheet 'UsedRange))
(setq row-count (vlax-get-property (vlax-get-property excel-range 'Rows) 'Count));; 获取行数
(setq col-count (vlax-get-property (vlax-get-property excel-range 'Columns) 'Count));; 获取列数



;; 读取Excel数据
(setq data (vlax-safearray->list (vlax-variant-value (vlax-get-property excel-range 'Value2))))

;; 关闭Excel文件并退出Excel应用程序
(vlax-invoke-method excel-workbook 'Close :vlax-false)
(vlax-invoke-method excel-app 'Quit)
(vlax-release-object excel-app)

;; 提示用户选择插入点
(setq pt (getpoint "\n选择表格插入点: "))
(if (not pt)
    (progn
      (princ "\n未选择插入点。")
      (exit)
    )
)

;; 创建表格
(setq table (vla-addtable
                (vla-get-modelspace (vla-get-activedocument (vlax-get-acad-object)))
                (vlax-3d-point (car pt) (cadr pt) 0.0);; 插入点(三维点)
                (1+ row-count);; 行数(包括标题行)
                col-count      ;; 列数
                10.0          ;; 行高
                50.0          ;; 列宽
            )
)

;; 填充表格数据
(setq row 0)
(foreach line data
    (setq col 0)
    (foreach cell line
      ;; 处理空值或非字符串数据
      (setq cell-value
      (cond
          ((null cell) "");; 空值
          ((= (type cell) 'VARIANT)
            (vl-catch-all-apply 'vlax-variant-value (list cell)));; VARIANT类型
          ((= (type cell) 'REAL) (rtos cell 2 2));; 实数类型
          ((= (type cell) 'INT) (itoa cell));; 整数类型
          (t (vl-princ-to-string cell));; 其他类型
      )
      )
      ;; 确保单元格值不为空
      (if (and cell-value (/= cell-value ""))
      (vla-settext table row col cell-value)
      )
      (setq col (1+ col))
    )
    (setq row (1+ row))
)

(princ "\nExcel表格已成功插入到AutoCAD中。")
(princ)
)

此源代码为DEEPSEEK多次调试+人为干预提示调试出的作品,暂时未合并单元格处理,未提取原表格背景色,抛砖引玉,大家可以超越,加油!!

e2002 发表于 2025-3-13 19:59:14

使用 datalink 的excel 数据 ,直接创建出 table 对象。
目前存在的问题主要是:table的尺寸大小不好控制,数据格式也存在一定的差异导致需要调整,最大的问题实际上在于后续的excel修改后,table中的数据更新时非常卡顿,且在增减行列后出现期望之外的结果。

这个问题我已经反馈给开发团队了,希望后续能尽快修正与改进。

ownlisp 发表于 昨天 15:53

e2002 发表于 2025-3-13 19:59
使用 datalink 的excel 数据 ,直接创建出 table 对象。
目前存在的问题主要是:table的尺寸大小不好控制 ...

大佬,使用datalink 的时候,怎么获得 链接的选项?链接的选项对应着不同的工作表

lea丶丶 发表于 昨天 17:29

(setq *xlApp* (vlax-get-or-create-object "excel.Application")) 读取excel
(setq *xlApp* (vlax-get-or-create-object "Ket.Application"))读取wps

tanxindong 发表于 2025-3-13 08:49:36

历害,太历害啦

pizi158545086 发表于 2025-3-13 10:45:34

选择文档了没反应显示函数已取消

biya 发表于 2025-3-13 11:19:13

pizi158545086 发表于 2025-3-13 10:45
选择文档了没反应显示函数已取消

我是OFFICE,你的是WPS?,奇怪

woshilj 发表于 2025-3-13 11:52:49

之前用DEEPSEEK尝试写一个调整TABLE表行高列宽的插件,写出来的插件运行不成功,看不懂写的代码。

pizi158545086 发表于 2025-3-13 12:32:05

biya 发表于 2025-3-13 11:19
我是OFFICE,你的是WPS?,奇怪

我用的是WPS

biya 发表于 2025-3-13 19:20:30

pizi158545086 发表于 2025-3-13 12:32
我用的是WPS

你用OFFICE试一下可能就好了,或你改一下代码支持WPS
,我最近有点忙,闲了来改一下

qincccken 发表于 2025-3-16 00:06:55

现在有AI真的是强大,学习学习

tranque 发表于 2025-3-16 18:36:48

qincccken 发表于 2025-3-16 00:06
现在有AI真的是强大,学习学习

你这头像碉堡了
页: [1] 2
查看完整版本: (Deepseek训练作品)excel生成cad中TABLE表的源代码