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
)
尝试更改:
(vlax-get-property UsdRange 'Value)
收件人:
(vlax-get-property UsdRange 'Text)
没有运气。我得到以下错误:;错误:错误的参数类型:safearrayp nil 我不能复制你的问题?
没关系,当你把单元格格式化为数字和0精度时,我可以复制它。
(2.0 3.0 4.0 5.0 6.0 7.0 8.0)
如果它们被格式化为文本,则保留其“值”。
创建包含行和列的excel工作表,如下所示:
1 2 3 4
5 6 7 8
如果您存储访问列表,则结果如下:(,)
也许这也有帮助。。。。运行程序时,会弹出一个对话框。选择保存的Excel文件,然后使用函数return to a variable并返回变量以查看列表。我相信你已经知道了这一切,但我只是想说清楚,谢谢你花时间看我的代码! 见上文。。尝试将工作簿中的实际单元格格式更改为文本,然后再次运行。 正如我在第一篇文章中提到的,我将其格式化为文本,认为这样可以解决问题,但它并没有改变结果。它仍然补充道。结束时为0 这可能会解决您的问题。。看起来需要检查每个单元格的数据类型。
要使用:
(getexcel
(getfiled "Select Excel file to read :" (strcat (getenv "userprofile") "\\Desktop\\") "xlsx" 16)
nil
nil
) 成功了!!!非常感谢!
页:
[1]
2