我想用C#把CAD中的excel OLE对象里数据复制出来,不知道怎么做??
1条回答 默认 最新
- 鑫空之眼 2023-03-14 12:33关注
您可以采用以下步骤:
在C#中添加对AutoCAD的引用。
使用AcadApplication类连接到AutoCAD应用程序。
使用Documents集合打开AutoCAD中的文档。
获取包含OLE对象的图形,使用AcadBlockReference类
访问OLE对象的内容,使用AcadOLEObject类
将OLE对象的内容复制到剪贴板中,使用Clipboard类
使用Excel应用程序连接到Excel文件。
粘贴复制的内容到Excel文件中,使用Range对象
下面是一个示例代码,复制AutoCAD图形中的一个OLE对象到Excel中:
using System; using System.Windows.Forms; using AutoCAD; namespace CopyOLEToExcel { public partial class MainForm : Form { public MainForm() { InitializeComponent(); } private void btnCopy_Click(object sender, EventArgs e) { // 连接到AutoCAD AcadApplication acadApp = null; try { acadApp = (AcadApplication)System.Runtime.InteropServices.Marshal.GetActiveObject("AutoCAD.Application"); } catch { MessageBox.Show("无法连接到AutoCAD"); return; } // 获取当前文档 AcadDocument acadDoc = acadApp.ActiveDocument; // 获取包含OLE对象的图形 AcadBlockReference acadBlock = (AcadBlockReference)acadDoc.ObjectIdToObject(acadDoc.ActiveSelectionSet.GetObjectIds()[0]); // 访问OLE对象的内容 AcadOLEObject acadOLEObj = (AcadOLEObject)acadBlock.ObjectIDToObject(acadBlock.GetAttributes()[0].ObjectId); acadOLEObj.Activate(); // 将内容复制到剪贴板中 acadApp.WindowState = AcWindowState.acMin; acadApp.Update(); acadApp.ActiveDocument.SendCommand("_.COPYSPEC "); acadOLEObj.Select(AcSelect.acSelectionSetWindowPolygon); acadApp.ActiveDocument.SendCommand("_.QUIT "); // 连接到Excel Excel.Application excelApp = new Excel.Application(); excelApp.Visible = true; Excel.Workbook excelWorkbook = excelApp.Workbooks.Open(this.txtFilepath.Text); // 粘贴到Excel中 Excel.Worksheet excelWorksheet = (Excel.Worksheet)excelWorkbook.ActiveSheet; Excel.Range excelRange = (Excel.Range)excelWorksheet.Cells[1, 1]; excelRange.Select(); excelWorksheet.Paste(excelRange, Type.Missing); // 释放资源 excelWorkbook.Save(); excelWorkbook.Close(); excelApp.Quit(); System.Runtime.InteropServices.Marshal.ReleaseComObject(excelWorksheet); System.Runtime.InteropServices.Marshal.ReleaseComObject(excelWorkbook); System.Runtime.InteropServices.Marshal.ReleaseComObject(excelApp); excelWorksheet = null; excelWorkbook = null; excelApp = null; acadApp.WindowState = AcWindowState.acNorm; } } }
注意,此代码涉及到许多COM互操作代码和异常处理,请确保您的代码已正确引用AutoCAD和Excel的COM对象模型。
解决 无用评论 打赏 举报
悬赏问题
- ¥15 为什么使用javacv转封装rtsp为rtmp时出现如下问题:[h264 @ 000000004faf7500]no frame?
- ¥15 乘性高斯噪声在深度学习网络中的应用
- ¥15 运筹学排序问题中的在线排序
- ¥15 关于docker部署flink集成hadoop的yarn,请教个问题 flink启动yarn-session.sh连不上hadoop,这个整了好几天一直不行,求帮忙看一下怎么解决
- ¥30 求一段fortran代码用IVF编译运行的结果
- ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
- ¥15 C++ 头文件/宏冲突问题解决
- ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
- ¥50 安卓adb backup备份子用户应用数据失败
- ¥20 有人能用聚类分析帮我分析一下文本内容嘛