ab103 发表于 2022-7-5 15:58:57

Excel到列表列表

您好,我正在将数据从excel文件传输到列表,其中的格式如下。。。。第1行中的列列表,第2行中的列列表。。。等
 
该代码(我从互联网上获得)运行良好,除了excel中的数字。我将整个excel表格格式化为纯文本,然而,数字的格式为。0在它的末尾。。。例如2变为2.0
 
如果你对如何解决这个问题有任何建议,请告诉我!另外,我对Lisp程序很熟悉,所以完整的解释会很有帮助。非常感谢。
 
代码:

(defun EXD(/ ExcelApp ExcData FilePath Sht ShtNum UsdRange Wbk)
(setq        FilePath (getfiled "Select Excel file to read :" "C:\\Users\\Public\\Documents\\" "xlsx" 16))
(setq ShtNum 1)
(setq ExcelApp (vlax-get-or-create-object "Excel.Application"))
(vla-put-visible ExcelApp :vlax-true)
(setq        Wbk (vl-catch-all-apply 'vla-open (list (vlax-get-property ExcelApp "WorkBooks") FilePath)))
(setq        Sht (vl-catch-all-apply 'vlax-get-property (list (vlax-get-property Wbk "Sheets") "Item" ShtNum)))
(vlax-invoke-method Sht "Activate")
(setq        UsdRange (vlax-get-property Sht 'UsedRange) ExcData        (vlax-safearray->list (vlax-variant-value (vlax-get-property UsdRange 'Value))))
(setq ExcData (mapcar(function (lambda (x) (mapcar 'vlax-variant-value x))) ExcData))
(vl-catch-all-apply 'vlax-invoke-method (list Wbk "Close"))
(vl-catch-all-apply 'vlax-invoke-method(list ExcelApp "Quit"))
(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))
(gc)
(gc)
ExcData
)

Lee Mac 发表于 2022-7-5 16:06:40

尝试更改:
(vlax-get-property UsdRange 'Value)
收件人:
(vlax-get-property UsdRange 'Text)

ab103 发表于 2022-7-5 16:14:13

 
没有运气。我得到以下错误:;错误:错误的参数类型:safearrayp nil

ronjonp 发表于 2022-7-5 16:16:00

我不能复制你的问题?
 
没关系,当你把单元格格式化为数字和0精度时,我可以复制它。
(2.0 3.0 4.0 5.0 6.0 7.0 8.0)
如果它们被格式化为文本,则保留其“值”。

ab103 发表于 2022-7-5 16:24:23

 
创建包含行和列的excel工作表,如下所示:
1 2 3 4   
5 6 7 8
 
如果您存储访问列表,则结果如下:(,)

ab103 发表于 2022-7-5 16:28:42

 
也许这也有帮助。。。。运行程序时,会弹出一个对话框。选择保存的Excel文件,然后使用函数return to a variable并返回变量以查看列表。我相信你已经知道了这一切,但我只是想说清楚,谢谢你花时间看我的代码!

ronjonp 发表于 2022-7-5 16:32:55

见上文。。尝试将工作簿中的实际单元格格式更改为文本,然后再次运行。

ab103 发表于 2022-7-5 16:39:57

正如我在第一篇文章中提到的,我将其格式化为文本,认为这样可以解决问题,但它并没有改变结果。它仍然补充道。结束时为0

ronjonp 发表于 2022-7-5 16:45:33

这可能会解决您的问题。。看起来需要检查每个单元格的数据类型。
 
要使用:
 
(getexcel
(getfiled "Select Excel file to read :" (strcat (getenv "userprofile") "\\Desktop\\") "xlsx" 16)
nil
nil
)

ab103 发表于 2022-7-5 16:49:47

成功了!!!非常感谢!
页: [1] 2
查看完整版本: Excel到列表列表