哈哈,被你猜到了...确实这样的,不过发现时已经传上来了,就算了...其实很简单的,主要是对EXCEL对象模型要熟悉,我也不是很熟悉,不知道哪儿能有这方面资料...把代码给你吧,或许能让你对EXCEL对象模型又多了解一点:-
- ;根据起始单元和水平垂直移动单元数目,算出下一单元
- (defun CalCell(Cell nRow nCol / i n h str sRow sCol sum pos)
- (setq sRow nil sCol "" sum 0 h nil pos nil)
- (setq i 1)
- (repeat (strlen Cell)
- (setq str (substr Cell i 1))
- (if (/= (type (read str)) 'INT)
- (setq sRow (append sRow (list str)))
- (setq sCol (strcat sCol str))
- )
- (setq i (1+ i))
- )
- (setq sRow (mapcar '(lambda(e) (- (ascii (strcase e)) 64)) sRow))
- (setq n (length sRow) i n sum 0)
- (repeat n
- (setq sum (+ sum (* (nth (1- i) sRow) (expt 26 (- n i)))))
- (setq i (1- i))
- )
- (setq sum (+ sum nCol))
- (setq pos nil)
- (while (> (setq n (/ sum 26)) 0)
- (setq h n)
- (setq sum (- sum (* 26 (/ sum 26))))
- (setq pos (cons sum pos ))
- )
- (if h
- (setq pos (cons h pos))
- (setq pos (cons sum pos ))
- )
- (strcat (apply 'strcat (mapcar '(lambda(e) (chr (+ e 64))) pos))
- (itoa (+ (atoi sCol) nRow)))
- );函数(GetRange sheet sCELL nRow),读取范围,用法:
- ;参数说明:
- ;sheet—— excel的sheet对象
- ;sCELL——起始单元
- ;eCELL——结束单元
- ;如:(GetRang sheet "A1" "C10");表示从"A1"到"C10"之间所有范围
- (defun GetRange(sheet sCELL eCELL / val items )
- (setq val (vlax-get-property sheet 'range sCELL eCELL))
- (setq val (vlax-variant-value (vlax-get-property val 'value)))
- (if (/= (type val) 'REAL)
- (progn
- (setq items (vlax-safearray->list val))
- (setq items (mapcar '(lambda(e) (mapcar 'vlax-variant-value e)) items))
- )
- (setq items val)
- )
- )
- ;函数(GetCol sheet sCELL nRow),读取列,用法:
- ;参数说明:
- ;sheet—— excel的sheet对象
- ;sCELL——起始单元
- ;nRow——行数
- ;如:(GetCol sheet "A1" 10);表示读取"A"列1到11行之间所有范围
- (defun GetCol(sheet sCELL nRow / Rows)
- (setq Rows (GetRange sheet sCELL (CalCell sCell nRow 0)))
- (if (/= (type Rows) 'REAL)
- (apply 'append Rows)
- Rows
- )
- )
- ;函数(GetRow sheet sCELL nCol),读取行,用法:
- ;参数说明:
- ;sheet—— excel的sheet对象
- ;sCELL——起始单元
- ;nCol——列数
- ;如:(GetRow sheet "A1" 10);表示读取1行A开始读11个单元
- (defun GetRow(sheet sCELL nCol / Cols)
- (setq Cols (GetRange sheet sCELL (CalCell sCell 0 nCol)))
- (if (/= (type Cols) 'REAL)
- (car Cols)
- Cols
- )
- )
|