乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 39|回复: 11

[编程交流] Excel到列表列表

[复制链接]

1

主题

6

帖子

5

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 15:58:57 | 显示全部楼层 |阅读模式
您好,我正在将数据从excel文件传输到列表,其中的格式如下。。。。第1行中的列列表,第2行中的列列表。。。等
 
该代码(我从互联网上获得)运行良好,除了excel中的数字。我将整个excel表格格式化为纯文本,然而,数字的格式为。0在它的末尾。。。例如2变为2.0
 
如果你对如何解决这个问题有任何建议,请告诉我!另外,我对Lisp程序很熟悉,所以完整的解释会很有帮助。非常感谢。
 
代码:
  1. (defun EXD  (/ ExcelApp ExcData FilePath Sht ShtNum UsdRange Wbk)
  2. (setq        FilePath (getfiled "Select Excel file to read :" "C:\\Users\\Public\\Documents\" "xlsx" 16))
  3. (setq ShtNum 1)
  4. (setq ExcelApp (vlax-get-or-create-object "Excel.Application"))
  5. (vla-put-visible ExcelApp :vlax-true)
  6. (setq        Wbk (vl-catch-all-apply 'vla-open (list (vlax-get-property ExcelApp "WorkBooks") FilePath)))
  7. (setq        Sht (vl-catch-all-apply 'vlax-get-property (list (vlax-get-property Wbk "Sheets") "Item" ShtNum)))
  8. (vlax-invoke-method Sht "Activate")
  9. (setq        UsdRange (vlax-get-property Sht 'UsedRange) ExcData        (vlax-safearray->list (vlax-variant-value (vlax-get-property UsdRange 'Value))))
  10. (setq ExcData (mapcar(function (lambda (x) (mapcar 'vlax-variant-value x))) ExcData))
  11. (vl-catch-all-apply 'vlax-invoke-method (list Wbk "Close"))
  12. (vl-catch-all-apply 'vlax-invoke-method(list ExcelApp "Quit"))
  13. (mapcar(function(lambda (x) (vl-catch-all-apply (function (lambda ()(progn(if (not (vlax-object-released-p x))(progn (vlax-release-object x)(setq x nil)))))))))(list UsdRange Sht Wbk ExcelApp))
  14. (gc)
  15. (gc)
  16. ExcData
  17. )
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 16:06:40 | 显示全部楼层
尝试更改:
  1. (vlax-get-property UsdRange 'Value)

收件人:
  1. (vlax-get-property UsdRange 'Text)
回复

使用道具 举报

1

主题

6

帖子

5

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 16:14:13 | 显示全部楼层
 
没有运气。我得到以下错误:;错误:错误的参数类型:safearrayp nil
回复

使用道具 举报

58

主题

3353

帖子

33

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1761
发表于 2022-7-5 16:16:00 | 显示全部楼层
我不能复制你的问题?
 
没关系,当你把单元格格式化为数字和0精度时,我可以复制它。
(2.0 3.0 4.0 5.0 6.0 7.0 8.0)
如果它们被格式化为文本,则保留其“值”。
回复

使用道具 举报

1

主题

6

帖子

5

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 16:24:23 | 显示全部楼层
 
创建包含行和列的excel工作表,如下所示:
1 2 3 4   
5 6 7 8
 
如果您存储访问列表,则结果如下:([1.0,2.0,3.0,4.0],[5.0,6.0,7.0,8.0])
回复

使用道具 举报

1

主题

6

帖子

5

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 16:28:42 | 显示全部楼层
 
也许这也有帮助。。。。运行程序时,会弹出一个对话框。选择保存的Excel文件,然后使用函数return to a variable并返回变量以查看列表。我相信你已经知道了这一切,但我只是想说清楚,谢谢你花时间看我的代码!
回复

使用道具 举报

58

主题

3353

帖子

33

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1761
发表于 2022-7-5 16:32:55 | 显示全部楼层
见上文。。尝试将工作簿中的实际单元格格式更改为文本,然后再次运行。
回复

使用道具 举报

1

主题

6

帖子

5

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 16:39:57 | 显示全部楼层
正如我在第一篇文章中提到的,我将其格式化为文本,认为这样可以解决问题,但它并没有改变结果。它仍然补充道。结束时为0
回复

使用道具 举报

58

主题

3353

帖子

33

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1761
发表于 2022-7-5 16:45:33 | 显示全部楼层
这可能会解决您的问题。。看起来需要检查每个单元格的数据类型。
 
要使用:
 
  1. (getexcel
  2. (getfiled "Select Excel file to read :" (strcat (getenv "userprofile") "\\Desktop\") "xlsx" 16)
  3. nil
  4. nil
  5. )
回复

使用道具 举报

1

主题

6

帖子

5

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 16:49:47 | 显示全部楼层
成功了!!!非常感谢!
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-14 13:08 , Processed in 3.251852 second(s), 73 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表