找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 561|回复: 0

[求助] 如何使用C#建立CAD与Excel之间“datalink”数据

[复制链接]

已领礼包: 1个

财富等级: 恭喜发财

发表于 2020-12-28 12:54:04 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
论坛已有建立CAD与Excel之间“datalink”数据方法的代码,但是现在链接整个Excel工作表,如何实现链接工作表区域,比如工作表“A1:H7”区域。有没有大神给改一下,指点迷津,不胜感激。



using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.EditorInput;
using Autodesk.AutoCAD.Runtime;
using Autodesk.AutoCAD.Windows;

namespace LinkToExcel
{
  public class Commands
  {
    [CommandMethod("TFS")]
    static public void TableFromSpreadsheet()
    {
      // Hardcoding the string
      // Could also select for it
      const string dlName =
        "Import table from Excel demo";

      Document doc =
        Application.DocumentManager.MdiActiveDocument;
      Database db = doc.Database;
      Editor ed = doc.Editor;

      OpenFileDialog ofd =
        new OpenFileDialog(
          "Select Excel spreadsheet to link",
          null,
          "xls; xlsx",
          "ExcelFileToLink",
          OpenFileDialog.OpenFileDialogFlags.
            DoNotTransferRemoteFiles
        );

      System.Windows.Forms.DialogResult dr =
        ofd.ShowDialog();

      if (dr != System.Windows.Forms.DialogResult.OK)
        return;

      ed.WriteMessage(
        "\nFile selected was \"{0}\".",
        ofd.Filename
      );

      PromptPointResult ppr =
        ed.GetPoint(
          "\nEnter table insertion point: "
        );
      if (ppr.Status != PromptStatus.OK)
        return;

      // Remove the Data Link, if it exists already

      DataLinkManager dlm = db.DataLinkManager;
      ObjectId dlId = dlm.GetDataLink(dlName);
      if (dlId != ObjectId.Null)
      {
        dlm.RemoveDataLink(dlId);
      }

      // Create and add the Data Link

      DataLink dl = new DataLink();
      dl.DataAdapterId = "AcExcel";
      dl.Name = dlName;
      dl.Description =
        "Excel fun with Through the Interface";
      dl.ConnectionString = ofd.Filename;
      dl.DataLinkOption =
        DataLinkOption.PersistCache;
      dl.UpdateOption |=
        (int)UpdateOption.AllowSourceUpdate;

      dlId = dlm.AddDataLink(dl);

      Transaction tr =
        doc.TransactionManager.StartTransaction();
      using (tr)
      {
        tr.AddNewlyCreatedDBObject(dl, true);

        BlockTable bt =
          (BlockTable)tr.GetObject(
            db.BlockTableId,
            OpenMode.ForRead
          );

        Table tb = new Table();
        tb.TableStyle = db.Tablestyle;
        tb.Position = ppr.Value;
        tb.SetDataLink(0, 0, dlId, true);
        tb.GenerateLayout();

        BlockTableRecord btr =
          (BlockTableRecord)tr.GetObject(
            db.CurrentSpaceId,
            OpenMode.ForWrite
          );

        btr.AppendEntity(tb);
        tr.AddNewlyCreatedDBObject(tb, true);
        tr.Commit();
      }

      // Force a regen to display the table
      ed.Regen();
    }
  }
}
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-11-17 21:32 , Processed in 0.186172 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表