satishrajdev 发表于 2022-7-5 15:34:27

在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公司

devitg 发表于 2022-7-5 15:42:00

请出示您的dwg和xls,但请注意,组合单元格可能会出现问题

satishrajdev 发表于 2022-7-5 15:49:42

 
我在上面附上了excel。请注意,我想在第三行之后添加一行,这样我就可以在那里添加系统号2。

rlx 发表于 2022-7-5 15:53:38

不是我的代码(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级

Grrr 发表于 2022-7-5 15:59:48

以下是我的尝试:
 
(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

rlx 发表于 2022-7-5 16:04:58

不错的尝试Grrr,将添加到lib
 
Gr.Rlx

Grrr 发表于 2022-7-5 16:15:16

 
谢谢,它有一些LeeMac'ish风格的编码,我已经包括了一些来自MP的触摸:(vl catch all apply‘eval’(…))
全部归功于李!(我想从他那里偷点东西,以获得完美编码的成本)。

rlx 发表于 2022-7-5 16:21:45

 
即使李(可能)生来就不是脑子里已经有了所有的编码,所以我想如果你这样看,那么所有的学习都是偷窃

Grrr 发表于 2022-7-5 16:25:27

 
我同意,只是我从他的代码学习中太习惯了,我的风格变得非常接近他的(甚至变量命名)。。。
所以为了不出错,我只是把我的昵称放在“write by”下面,这样我就会记住“小心不明或愚蠢的错误”,以及他的-如果他没把它放好。
 
然而,关于如何做到这一点,我向你们所有人学习。
Rlx,你的代码中有很多函数,我想问你在哪里/如何/为什么。。不幸的是,我没有足够的时间继续跟踪/学习这么多代码。

satishrajdev 发表于 2022-7-5 16:30:20

谢谢大家。。。我的问题解决了。
 
今天学到了一些新东西
页: [1] 2
查看完整版本: 在EXCEL中添加行