在EXCEL中添加行
大家好,我在与excel交互时遇到了一个问题。我无法在excel中添加新行。我搜索了一下,但没有找到任何合适的结果。
我的代码:
(setq ex (vlax-get-or-create-object "excel.application"))
(vla-put-visible ex :vlax-true)
(setq wb (vlax-get-property ex 'Workbooks))
(vlax-for x wb
(if (eq (strcase (vla-get-fullname x)) (strcase file))
(setq wb1 x)
)
)
(if wb1
(setq sht (vlax-get-property wb1 "activeSheet"))
(progn
(setq wb1 (vla-open wb file))
(setq sht (vlax-get-property wb1 "activeSheet"))
)
)
在下面的pic系统中,2号缺失,我想为此添加新行。我希望我的问题很清楚
已编辑管道回路电子表格。xlsx公司 请出示您的dwg和xls,但请注意,组合单元格可能会出现问题
我在上面附上了excel。请注意,我想在第三行之后添加一行,这样我就可以在那里添加系统号2。 不是我的代码(http://forums.augi.com/archive/index.php/t-108747.html )
;;;================== delete column ====================
(defun C:DCOL (/ Col Cols ColNum ExcelApp FilePath Sht ShtName Wbk)
(vl-load-com)
(setq FilePath (getfiled "Select Excel file :"
(getvar "dwgprefix")
"xls"
16
)
)
(setq ShtName (getstring "\nEnter sheet name : "))
(setq ColNum (getint "\nEnter column number to delete : "))
(setq ExcelApp (vlax-get-or-create-object "Excel.Application"))
(vla-put-visible ExcelApp :vlax-true)
(vlax-put-property ExcelApp "DisplayAlerts" :vlax-false)
(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"
ShtName
)
)
)
(vlax-invoke-method Sht "Activate")
(setq Cols (vlax-get-property Sht "Columns")
)
(setq Col (vlax-variant-value
(vlax-get-property Cols "Item" ColNum)
)
)
(vlax-invoke-method Col "Delete")
(vlax-put-property ExcelApp "DisplayAlerts" :vlax-true)
(vl-catch-all-apply
'vlax-invoke-method
(list Wbk "Save")
)
(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 Col Cols Sht Wbk ExcelApp)
)
(gc)
(gc)
(princ)
)
;;;================== add row ====================
(defun C:AROW (/ Col Cols RowNum ExcelApp FilePath Sht ShtName Wbk)
(vl-load-com)
(setq FilePath (getfiled "Select Excel file :"
(getvar "dwgprefix")
"xls"
16
)
)
(setq ShtName (getstring "\nEnter sheet name : "))
(setq
RowNum (getint "\nEnter a row number to insert one row after: ")
)
(setq ExcelApp (vlax-get-or-create-object "Excel.Application"))
(vla-put-visible ExcelApp :vlax-true)
(vlax-put-property ExcelApp "DisplayAlerts" :vlax-false)
(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"
ShtName
)
)
)
(vlax-invoke-method Sht "Activate")
(setq Rows (vlax-get-property Sht "Rows")
)
(setq Row (vlax-variant-value
(vlax-get-property Rows "Item" RowNum)
)
)
(vl-catch-all-apply
'vlax-invoke-method
(list Row "Insert")
)
(vlax-put-property ExcelApp "DisplayAlerts" :vlax-true)
(vl-catch-all-apply
'vlax-invoke-method
(list Wbk "Save")
)
(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 Row Rows Sht Wbk ExcelApp)
)
(gc)
(gc)
(princ)
)
Rlx级 以下是我的尝试:
(defun C:test ( / xls xlapp xlwbs xlwbk xlclss xlcl xlrow )
(vl-catch-all-apply 'eval
'(
(and
(setq xls (getfiled "Specify Excel File" (strcat (getenv "userprofile") "\\Desktop\\")"xlsx;xls;*" 16))
(setq xlapp (vlax-get-or-create-object "Excel.Application"))
(setq xlwbs (vlax-get-propertyxlapp 'WorkBooks))
(setq xlwbk (vlax-invoke-method xlwbs 'Open xls))
(setq xlclss (vlax-get-property xlapp 'Cells))
(setq xlcl (vlax-variant-value (vlax-get-property xlclss 'item 4 1)))
(setq xlrow (vlax-get-property xlcl 'EntireRow))
(progn
(vla-Select xlrow)
(vlax-invoke-method (vla-get-Selection xlapp) 'Insert
-4121 ; xlDown
0 ; xlFormatFromLeftOrAbove
)
(vla-Select (vlax-variant-value (vlax-get-property xlclss 'item 1 1)))
); progn
); and
)
); vl-catch-all-apply
(and (eq 'VLA-OBJECT (type xlwbk)) (vl-catch-all-apply 'vlax-invoke-method (list xlwbk 'close :vlax-true)) )
(vl-catch-all-apply 'vlax-invoke-method (list xlapp 'quit))
(foreach o (reverse (list xls xlapp xlwbs xlwbk xlclss xlcl xlrow)) (and (eq 'VLA-OBJECT (type o)) (vl-catch-all-apply 'vlax-release-object (list o))) )
(princ)
); defun 不错的尝试Grrr,将添加到lib
Gr.Rlx
谢谢,它有一些LeeMac'ish风格的编码,我已经包括了一些来自MP的触摸:(vl catch all apply‘eval’(…))
全部归功于李!(我想从他那里偷点东西,以获得完美编码的成本)。
即使李(可能)生来就不是脑子里已经有了所有的编码,所以我想如果你这样看,那么所有的学习都是偷窃
我同意,只是我从他的代码学习中太习惯了,我的风格变得非常接近他的(甚至变量命名)。。。
所以为了不出错,我只是把我的昵称放在“write by”下面,这样我就会记住“小心不明或愚蠢的错误”,以及他的-如果他没把它放好。
然而,关于如何做到这一点,我向你们所有人学习。
Rlx,你的代码中有很多函数,我想问你在哪里/如何/为什么。。不幸的是,我没有足够的时间继续跟踪/学习这么多代码。 谢谢大家。。。我的问题解决了。
今天学到了一些新东西
页:
[1]
2