ABC15832352205 2021-07-11 17:02 采纳率: 0%
浏览 5

打开cad中的excel ole

我想用C#把CAD中的excel OLE对象里数据复制出来,不知道怎么做??

  • 写回答

1条回答 默认 最新

  • 鑫空之眼 2023-03-14 12:33
    关注

    您可以采用以下步骤:

    1. 在C#中添加对AutoCAD的引用。

    2. 使用AcadApplication类连接到AutoCAD应用程序。

    3. 使用Documents集合打开AutoCAD中的文档。

    4. 获取包含OLE对象的图形,使用AcadBlockReference类

    5. 访问OLE对象的内容,使用AcadOLEObject类

    6. 将OLE对象的内容复制到剪贴板中,使用Clipboard类

    7. 使用Excel应用程序连接到Excel文件。

    8. 粘贴复制的内容到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对象模型。

    评论

报告相同问题?

问题事件

  • 创建了问题 7月11日

悬赏问题

  • ¥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 有人能用聚类分析帮我分析一下文本内容嘛