excel 模态窗口_AutoCAD .NET 二次开发实例(7) 输出CAD文本到Excel和TxT

 

点上方蓝字关注我,一起愉快的学习吧,速速上车!

969b0b2f9b09c4254dee678a6468f7e1.png

0 引言

cfe60e0e3da516d9a37b5fd7d292420e.gif

CAD中的文本会设计到与外部文件的交互,需要输出到Excel或是txt中进行统计分析,关于C#读写Excel和txt的方式有多种,可自行查阅相关资料。

先上结果:

25e2ba6fd871866839576691779e6d9f.gif

如何实现,请见下文!

1 输出到Excel

添加一个Windows窗体

9b691e3b2480ea2a21becf682590fc80.png

添加两个按钮

8249415e8226bf45a5b03fb47b7725da.png

可以在属性Text中设置窗口和控件的名称以及大小,这个自行去摸索,都是可视化界面操作的东西。

2ace9c75ed98209182a7ea8c0d609a8c.png

c46af67218e706a4462686d9bd9a4bd8.png

给按钮添加点击事件

6c6d358be335f3dfa756fbe8f81e5501.png

写入代码

1399063a7eab2357c8d9b4af94dfeb70.png

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

这里使用NPOI的方式读写Excel

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

在这方式读取Excel不需要安装Office,读取速度也很快,可以直接在Nuget下载,你可以准备下载好的dll,离线使用

有网就直接在Nuget下载,这样方便

b7d296d483dfc48d241b8b9ffb3cc889.png

安装即可

9ece2b3f00fbddc32e62f41a4e06c78f.png

添加引用命名空间

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

0629013000e0702b78ad8999c8141743.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: AutoCAD.NET是一种在AutoCAD平台上进行二次开发的工具,它允许开发者使用.NET编程语言(比如C#、VB.NET等)来创建自定义的功能和工具。 深入浅出AutoCAD.NET二次开发源码,意味着通过研究和理解AutoCAD.NET二次开发的源码,来掌握如何使用AutoCAD.NET来进行二次开发。 在开始深入研究源码之前,我们需要了解一些基础知识。首先,我们需要掌握AutoCAD的基本概念和操作方法,包括如何启动和关闭AutoCAD、如何创建新的绘图、如何绘制、编辑和修改图形等等。其次,我们需要掌握.NET编程语言,并熟悉Visual Studio这样的开发环境。 一旦我们具备了这些基础知识,我们可以开始研究AutoCAD.NET二次开发源码。源码通常会包含一些示例代码,我们可以通过阅读这些示例代码来理解AutoCAD.NET的主要功能和使用方法。同时,我们还可以通过分析源码的结构和逻辑,来学习AutoCAD.NET的工作原理和内部机制。 通过深入浅出的学习源码,我们可以逐步掌握AutoCAD.NET二次开发技术。我们可以根据自己的需求来扩展和定制AutoCAD的功能,比如创建自定义的命令、添加新的工具栏和菜单、实现特定的绘图算法等等。此外,通过阅读源码,我们还可以学习到一些编程技巧和最佳实践,从而加强我们的编程能力。 总之,深入浅出AutoCAD.NET二次开发源码是一项挑战和学习的过程,但通过不断研究和实践,我们可以逐渐掌握AutoCAD.NET二次开发技术,并应用于实际的项目中。这将为我们提供更多的自定义功能和灵活性,帮助我们更好地完成各种AutoCAD相关的任务。 ### 回答2: autocad.net是一个用于二次开发自动CAD软件的编程接口。为了深入理解和掌握autocad.net二次开发源码,首先需要了解一些基础知识。 autocad.net是建立在.NET开发平台上的,因此需要具备良好的C#编程能力。熟悉C#的语法和特性将有助于我们更好地理解autocad.net源码的实现原理和细节。 在进行autocad.net二次开发时,我们可以通过查阅官方文档和示例代码来学习和理解源码。官方文档通常提供了对各种对象和方法的详细解释,示例代码将具体演示了如何使用这些对象和方法进行二次开发。 接下来,我们需要了解autocad.net的开发框架和主要功能模块。了解这些模块的作用和相互之间的关系,可以帮助我们更好地理解和分析源码。 在深入浅出autocad.net二次开发源码的过程中,我们需要进行代码分析和调试。通过阅读源码,我们可以了解autocad.net在底层如何实现不同功能,理解其代码逻辑和设计思路。 在理解源码的基础上,我们可以根据自己的需求进行二次开发。这意味着我们可以根据具体的业务场景和需求,对源码进行修改和定制,以满足我们的开发目标。 总之,想要深入浅出地理解autocad.net二次开发源码,我们需要具备一定的C#编程能力,并且通过学习官方文档和示例代码来掌握autocad.net的基础知识。通过代码分析和调试,我们可以更深入地了解其实现细节。最后,根据自己的需求进行二次开发,加深对源码的理解和掌握。 ### 回答3: autocad.net是一种用于二次开发AutoCAD软件的编程语言和框架。它基于.NET平台,并提供了一系列的接口和类库,用于访问和操作AutoCAD软件的各种功能和对象。 深入浅出autocad.net二次开发源码意味着我们需要透彻理解和熟悉autocad.net的编程原理和方法,以便能够根据自己的需求进行二次开发。下面是一些源码的相关内容,帮助我们理解和学习autocad.net二次开发。 1. 类和对象:源码中包含了一些核心类和对象的定义,如Application、Document、Layer、Block等。了解这些类和对象的属性、方法和事件,可以帮助我们在二次开发中正确地操作和管理AutoCAD软件的各种元素。 2. 命令和交互:源码中包含了一些处理命令和交互的代码,例如注册命令、响应用户输入等。学习这些代码可以让我们实现自定义的命令和用户交互界面,提高程序的灵活性和易用性。 3. 绘图和编辑:源码中包含了一些绘图和编辑功能的实现,例如绘制线段、插入块等。通过学习这些代码,我们可以了解和掌握自定义绘图和编辑功能的实现方法。 4. 数据处理:源码中包含了一些数据处理的代码,例如读取和操作AutoCAD中的图形数据。学习这些代码可以帮助我们实现一些智能化的数据处理功能,例如自动计算、分析等。 5. 错误处理:源码中还包含了一些错误处理的代码,例如异常捕获和处理。学习这些代码可以帮助我们编写健壮的程序,提高程序的可靠性和稳定性。 通过深入浅出地学习和理解这些源码,我们可以更好地掌握autocad.net二次开发的技巧和方法,从而能够根据自己的需求进行自定义开发,提高AutoCAD软件的功能和效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值