CAD二次開發


參考博客:

https://blog.csdn.net/yzk1062913581/category_9820791.html

 

網址:

https://mp.weixin.qq.com/s?__biz=MzA3NzI3MjgyNQ==&mid=2247484008&idx=1&sn=8dac6e256c4bd0cfb533f33d5856ae9c&chksm=9f55c1fea82248e86a217b133202809420686ab0c52fd53877ce37f76e47a8e0663ae70429ea&token=1778975585&lang=zh_CN#rd

 

 

CAD中的文本會設計到與外部文件的交互,需要輸出到Excel或是txt中進行統計分析,關於C#讀寫Excel和txt的方式有多種,可自行查閱相關資料。

 

先上結果:

圖片

 

如何實現,請見下文!

 

 

1 輸出到Excel

 

 

添加一個Windows窗體

 




圖片


 

添加兩個按鈕




圖片


 

可以在屬性Text中設置窗口和控件的名稱以及大小,這個自行去摸索,都是可視化界面操作的東西。

 

圖片




圖片


 

給按鈕添加點擊事件

 




圖片


 

寫入代碼




圖片


 

C#讀取Excel的方式有多種(可參考:https://www.cnblogs.com/kenjiang/p/10790652.html)

 

這里使用NPOI的方式讀寫Excel

NPOI項目地址:https://github.com/tonyqus/npoi

 

在這方式讀取Excel不需要安裝Office,讀取速度也很快,可以直接在Nuget下載,你可以准備下載好的dll,離線使用

 

有網就直接在Nuget下載,這樣方便

 




圖片


 

安裝即可

 




圖片


 

添加引用命名空間

 

using NPOI.SS.UserModel;using NPOI.HSSF.UserModel; using NPOI.XSSF.UserModel;

 

這下就可以開始將你需要輸出的文本內容輸出到Excel了

 

通過選擇集過濾方式,選取多行文本,然后遍歷每一個選擇對象,將遍歷結果添加至一個List中

List<string> lstAddStr = new List<string>(); //讀取的結果存在這里
Database db = HostApplicationServices.WorkingDatabase;Document doc = Application.DocumentManager.MdiActiveDocument;SetFocus(doc.Window.Handle); //選擇完文件在切換焦點 //鎖定文檔using (DocumentLock acLckDoc = doc.LockDocument()){ //框選獲取文字 //設置選擇集過濾器為只選擇多行文本 TypedValue[] typeValue = new TypedValue[1]; typeValue.SetValue(new TypedValue(0, "MTEXT"), 0); SelectionSet acSSet = this.SelectSsGet("GetSelection", null, typeValue);
if (acSSet != null) { foreach (SelectedObject selObj in acSSet) { // 確認返回的是合法的SelectedObject對象 if (selObj != null) // { using (Transaction trans = db.TransactionManager.StartTransaction()) { MText myent = trans.GetObject(selObj.ObjectId, OpenMode.ForWrite) as MText; lstAddStr.Add(myent.Contents); } } } }

 

輸出到Excel

 

IWorkbook wk = null; //新建IWorkbook對象
string localFilePath = "D:\\TEST.xlsx";
// 調用一個系統自帶的保存文件對話框 寫一個EXCELSaveFileDialog saveFileDialog = new SaveFileDialog(); //新建winform自帶保存文件對話框對象saveFileDialog.Filter = "Excel Office97-2003(*.xls)|*.xls|Excel Office2007及以上(*.xlsx)|*.xlsx"; //過濾只能存儲的對象DialogResult result = saveFileDialog.ShowDialog(); //顯示對話框localFilePath = saveFileDialog.FileName.ToString();//07版之前和之后創建方式不一樣if (localFilePath.IndexOf(".xlsx") > 0) // 2007版{ wk = new XSSFWorkbook(); //創建表格對象07版之后}else if (localFilePath.IndexOf(".xls") > 0) // 創建表格對象 2003版本{ wk = new HSSFWorkbook(); //03版}//創建工作簿ISheet tb = wk.CreateSheet("輸出的文本");for (int i = 0; i < lstAddStr.Count; i++){ ICell cell = tb.CreateRow(i).CreateCell(0); //單元格對象 第i行第0列 cell 單元格對象 cell.SetCellValue(lstAddStr[i]);//循環往單元格賦值}//創建文件using (FileStream fs = File.OpenWrite(localFilePath)) //打開一個xls文件,如果沒有則自行創建,如果存在myxls.xls文件則在創建是不要打開該文件!{ wk.Write(fs); //文件IO 創建EXCEL MessageBox.Show("提示:創建成功!"); fs.Close();}

 

 

2 輸出到txt

 

將獲取的多行文本輸出到TxT

 

C# 讀寫txt文本的方案可參考:

https://www.cnblogs.com/stilldream/p/10044011.html

跟上面一樣,選擇集過濾選取后,輸出到txt中

 

代碼:

SaveFileDialog saveDlg = new SaveFileDialog();saveDlg.Title = "輸出文本內容";saveDlg.Filter = "文本文件(*.txt)|*.txt";
saveDlg.InitialDirectory = Path.GetDirectoryName(db.Filename);string fileName = Path.GetFileName(db.Filename);saveDlg.FileName = fileName.Substring(0, fileName.IndexOf('.'));DialogResult saveDlgRes = saveDlg.ShowDialog();if (saveDlgRes == DialogResult.OK){ string[] contents = new string[lstAddStr.Count]; for (int i = 0; i < lstAddStr.Count; i++) { contents[i] = lstAddStr[i].ToString(); } File.WriteAllLines(saveDlg.FileName, contents);}

 

最后在類文件中新建一個命令來調用寫好的窗口程序,可以選擇模態和非模態的方式

using Autodesk.AutoCAD.Runtime;using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;
namespace _09_輸出文本{ public class Class1 { [CommandMethod("CTE")] //CAD啟動界面 public void CADTextExport(){ myForm myfrom = new myForm(); // Autodesk.AutoCAD.ApplicationServices.Application.ShowModalDialog(myfrom); //在CAD里頭顯示界面 模態顯示
Autodesk.AutoCAD.ApplicationServices.Application.ShowModelessDialog(myfrom); //在CAD里頭顯示界面 非模態顯示 // myfrom.sh

} }}

 

CAD里面通過命令就可以調用該窗口程序了

 

 這里輸出的是多行文本,如果想輸出單行文本或者都輸出,只需要在選擇集過濾那里改一下即可。

 

完整代碼自取地址:https://gitee.com/yuzhaokai/CADExampleDemo.git


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM