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