LISP 冻结excel窗格_LISP实现EXCEL导入AUTOCAD表格中单元格值属性的修改-第一阶段
寫在最前面:
我希望我的這些記錄會(huì)在將來(lái)給同樣琢磨這些內(nèi)容苦于無(wú)同道者的朋友們一些幫助。
大方向上總有很多人同行,細(xì)分的需求或方向缺越來(lái)越少。當(dāng)網(wǎng)上搜索到的資料無(wú)法回答的我問(wèn)題的時(shí)候,可能是我沒有接觸到一些真正有用的資料和老師,亦或者就是我觸碰到了這一細(xì)分方向的邊界了。
CAD圖元數(shù)據(jù)存儲(chǔ)的結(jié)構(gòu)無(wú)從得知,尋找規(guī)律的過(guò)程說(shuō)白了也就是控制變量找不同的過(guò)程。
查閱了大量網(wǎng)上的資料,并沒有發(fā)現(xiàn)有人關(guān)心CAD圖元數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)是怎樣的。但是我想實(shí)現(xiàn)的單元格值屬性的修改則必須首先了解其數(shù)據(jù)結(jié)構(gòu)。
我不知道這個(gè)需求能不能實(shí)現(xiàn),之所以題目叫做第一階段,也是我并沒有絕對(duì)的信心達(dá)到第二階段的程度吧?所以先把這一部分的內(nèi)容記錄下來(lái),而非等到最后,呈現(xiàn)一個(gè)完整的內(nèi)容。
也許再過(guò)一個(gè)月我會(huì)轉(zhuǎn)而投向讀取數(shù)據(jù),創(chuàng)建列表,寫入CAD生成表格的陣營(yíng)。甚至更糟的情況是,可能我會(huì)徹底放棄LISP對(duì)表格需求的實(shí)現(xiàn)。
以下內(nèi)容記錄的是EXCEL與AUTOCAD表格數(shù)據(jù)交互的一些測(cè)試,以及對(duì)AUTOCAD中圖元數(shù)據(jù)存儲(chǔ)格式的一些猜測(cè)和規(guī)律總結(jié)。
excel公式測(cè)試:
模型空間中亮顯,打印預(yù)覽發(fā)現(xiàn)(1
1)和(2 1)沒有區(qū)別。
CAD公式及數(shù)據(jù)類型測(cè)試:
CAD中也可以進(jìn)行數(shù)據(jù)類型的修改;
方法一:通過(guò)屬性面板“內(nèi)容-數(shù)據(jù)類型-常規(guī)/小數(shù)/角度/文字/日期/整數(shù)/點(diǎn)/百分比/貨幣”(但方法一只能修改到數(shù)據(jù)類型層級(jí),具體如小數(shù)精度的設(shè)置只能選擇具體單元格右鍵修改。);
方法二:選擇具體單元格,“右鍵-數(shù)據(jù)格式-小數(shù)-精度-0.00”。
excel數(shù)據(jù)單元格格式進(jìn)入CAD測(cè)試:
1)
若excel中“單元格格式-數(shù)字”設(shè)置為“常規(guī)”的小數(shù)例如“77.77”或“88.8”選擇性粘貼進(jìn)入CAD采用“選擇性粘貼-粘貼-AutoCAD圖元”則默認(rèn)轉(zhuǎn)化為CAD中0.0000精度的小數(shù)格式;若采用“選擇性粘貼-粘貼鏈接-AutoCAD圖元”則仍為原有精度;
2)
若excel中“單元格格式-數(shù)字”設(shè)置為“數(shù)值”的小數(shù),則選擇性粘貼進(jìn)入CAD采用“選擇性粘貼-粘貼-AutoCAD圖元”則仍然為原有精度;若采用“選擇性粘貼-粘貼鏈接-AutoCAD圖元”則也為原有精度。
excel數(shù)據(jù)單元格格式進(jìn)入CAD的聯(lián)合屬性列表測(cè)試:
1聯(lián)合屬性列表提取方式:
1.1主要思路:
首先使用entsel函數(shù)提取出(?點(diǎn)坐標(biāo)列表)
再使用entget函數(shù)提取出圖原名為的圖元的聯(lián)合屬性列表。
1.2代碼實(shí)現(xiàn):
[Visual LISP?控制臺(tái)]
_$(setq ent1 (entsel))
( (-1480.56 152.589 0.0))
_$(setq ent1_data (entget (car ent1)))
((-1 . ) (0 . "ACAD_TABLE")
...))
用一行代碼表示也可為:
[Visual LISP?控制臺(tái)]
_$(setq ent1_data (entget (car (entsel))))
1.3總結(jié):
entsel函數(shù)根據(jù)AutoCAD界面中選取圖元,獲取圖元的名稱、位置信息;entget函數(shù)根據(jù)圖元名稱獲取圖元的聯(lián)合屬性信息。
2 存儲(chǔ)值:
不論CAD底層數(shù)據(jù)中存儲(chǔ)的是(漢字、字母、符號(hào)、數(shù)字)的任意組合,其點(diǎn)陣列表的群碼均為1;只有(純數(shù)字)時(shí)群碼才為140。純數(shù)字時(shí)存儲(chǔ)值信息前的點(diǎn)陣列表會(huì)出現(xiàn)(90
. 2)或(90 . 4)字樣,初步判斷為:
但代碼4不在上圖范圍內(nèi),而其余共用群碼90的內(nèi)容又不太符合該處信息。
后根據(jù)不同數(shù)據(jù)類型該值不同,判斷群碼90可能為數(shù)值類型代號(hào)。
初步猜測(cè):
nil?0
int?1
real?2
str?4
EXCEL表格作為AutoCAD圖元導(dǎo)入CAD的表格獲取聯(lián)合屬性列表中不含有空單元格的屬性點(diǎn)陣列表信息;
CAD“繪圖-表格”生成表格編輯內(nèi)容的空單元格獲取的聯(lián)合屬性列表中包含空單元格的聯(lián)合屬性。只不過(guò)其中的屬性值要么為空值,要么為默認(rèn)值。
EXCEL導(dǎo)入的(漢字、字母、符號(hào))字體屬性出現(xiàn)在群碼1和302,(數(shù)字)字體屬性出現(xiàn)在群碼300和302
3 字高:
不論(純數(shù)字)還是(漢字、字母、符號(hào)、數(shù)字)的任意組合,其字高點(diǎn)陣列表群碼均為140,該處于(純數(shù)字)時(shí)的存儲(chǔ)值群碼沖突,替換群碼時(shí)如何處理存在問(wèn)題。
4?字體:
CAD中“繪圖-表格”生成表格編輯內(nèi)容若創(chuàng)建時(shí)確定了表格的樣式,則單元格的聯(lián)合屬性列表中不會(huì)包含字體相關(guān)的內(nèi)容。
在MLEADER群碼組中300含義為“默認(rèn)多行文字內(nèi)容”,TABLE群碼組中300含義為“屬性定義的字符串值,對(duì)每個(gè)屬性定義重復(fù)一次,并僅適用于塊類型單元格”。
認(rèn)為前者可能性更大(因?yàn)樵贑AD中“繪圖-表格”生成表格編輯內(nèi)容獲取的聯(lián)合屬性列表中群碼為300的點(diǎn)陣列表為空,而EXCEL導(dǎo)入CAD的表格獲取的聯(lián)合屬性列表中群碼為300的點(diǎn)陣列表中有“等線”這樣的excel表格默認(rèn)字體字樣)。
不論(漢字)還是(字母、符號(hào)、數(shù)字)CAD中“繪圖-表格”生成表格編輯內(nèi)容獲取的聯(lián)合屬性列表中群碼為300的點(diǎn)陣列表均為空,除了real型的數(shù)據(jù),圖中為“4.55”。real型即使CAD中創(chuàng)建,群碼300的點(diǎn)陣列表中仍會(huì)有猜測(cè)為控制real型數(shù)據(jù)精度的信息。
字體相關(guān)屬性信息的存儲(chǔ)形式一般為\\f+字體文件名(不包含拓展名)
總結(jié)一下,主要導(dǎo)致屬性信息存儲(chǔ)位置不同的因素有以下幾點(diǎn):
一、數(shù)據(jù)類型不同導(dǎo)致:
1、int
2、real
3、str(漢字或字母/符號(hào))
二、操作方式不同導(dǎo)致:
1、使用CAD內(nèi)部創(chuàng)建表格
1.1?使用了表格樣式創(chuàng)建直接從空表開始編輯內(nèi)容(群碼300)
1.2?使用表格樣式創(chuàng)建表格后,編輯內(nèi)容時(shí)設(shè)置字體(群碼1、300、302)
2、由excel導(dǎo)入表格(群碼1、300、302)
2.1?數(shù)據(jù)類型不同導(dǎo)致的精度不同(CAD模型空間)
2.2?選擇性粘貼方式不同導(dǎo)致的精度不同(CAD模型空間)
總結(jié)
以上是生活随笔為你收集整理的LISP 冻结excel窗格_LISP实现EXCEL导入AUTOCAD表格中单元格值属性的修改-第一阶段的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: WorkNC轻松几步导入刀柄轮廓
- 下一篇: 比特大陆斥资7亿买Dash,究竟看中了啥