打开cad中的excel ole

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

您可以采用以下步骤:

  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对象模型。