aspose实现CAD与excel交互——cad c# 二次开发

发布于:2025-02-14 ⋅ 阅读:(28) ⋅ 点赞:(0)

如下,仅供技术学习,请勿用于商业等其他用途。

使用方法

  1. 下载 Aspose.Total.NET.lic 文件。
  2. 将该文件放置在您的项目目录中。
  3. 在应用程序启动时调用以下代码以激活许可证:
new Aspose.Words.License().SetLicense("Aspose.Total.NET.lic");
  1. 如果您使用的是 ASP.NET 项目,请确保在 web.config 文件中禁用影子复制功能。

其他说明

  • 该许可证密钥仅供学习和测试使用,请勿用于商业用途。
using System.Windows.Forms;
using Aspose.Cells;
using OpenFileDialog = System.Windows.Forms.OpenFileDialog;
[assembly: CommandClass(typeof(IFoxDemo.AsposeDemo))]//只允许此类快捷键命令
namespace IFoxDemo
{
    public class AsposeDemo
    {
        [CommandMethod("xx")]
        public void ExcelToPolyline()
        {
            Document doc = Acap.DocumentManager.MdiActiveDocument;
            Database db = doc.Database;
            Editor ed = doc.Editor;
            // 弹窗提示用户选择 Excel 文件
            OpenFileDialog openFileDialog = new OpenFileDialog();
            openFileDialog.Filter = "Excel Files|*.xls;*.xlsx";
            openFileDialog.Title = "选择包含坐标的 Excel 文件";
            if (openFileDialog.ShowDialog() != DialogResult.OK)
            {
                ed.WriteMessage("\n用户取消操作。");
                return;
            }
            string filePath = openFileDialog.FileName;
            //new Aspose.Cells.License().SetLicense(@"F:\段个人文件\二开\CAD_NET二开资料(C#)\IfoxDemo\IFoxDemo\Aspose.Total.NET.lic");
            激活aspose();
            try
            {
                // 读取 Excel 文件
                Workbook workbook = new Workbook(filePath);
                Worksheet worksheet = workbook.Worksheets[0]; // 获取第一个工作表
                // 存储坐标点
                List<Point2d> points = new List<Point2d>();
                // 遍历工作表的行
                for (int row = 1; row < worksheet.Cells.MaxDataRow + 1; row++)
                {
                    // 读取点号、X、Y 坐标
                    string pointNumber = worksheet.Cells[row, 0].StringValue; // 点号
                    double x = worksheet.Cells[row, 1].DoubleValue; // X 坐标
                    double y = worksheet.Cells[row, 2].DoubleValue; // Y 坐标
                    // 将坐标添加到点集合
                    points.Add(new Point2d(x, y));

                    ed.WriteMessage($"\n读取点 {pointNumber}: X = {x}, Y = {y}");
                }

                if (points.Count < 2)
                {
                    ed.WriteMessage("\n至少需要两个点来创建多段线。");
                    return;
                }

                // 创建多段线
                using (Transaction tr = db.TransactionManager.StartTransaction())
                {
                    BlockTable bt = tr.GetObject(db.BlockTableId, OpenMode.ForRead) as BlockTable;
                    BlockTableRecord btr = tr.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite) as BlockTableRecord;

                    Polyline polyline = new Polyline();
                    for (int i = 0; i < points.Count; i++)
                    {
                        polyline.AddVertexAt(i, points[i], 0, 0, 0);
                    }

                    // 闭合多段线(可选)
                    polyline.Closed = true;
                    btr.AppendEntity(polyline);
                    tr.AddNewlyCreatedDBObject(polyline, true);
                    tr.Commit();
                }
                ed.WriteMessage($"\n成功创建多段线,包含 {points.Count} 个点。");
            }
            catch (Exception ex)
            {
                ed.WriteMessage($"\n错误: {ex.Message}");
            }
            Env.Editor.ZoomExtents();
        }

        private static void 激活aspose()
        {
            string mys = @"PD94bWwgdmVyc2lvbj0iMS4wIj8+DQo8TGljZW5zZT4NCiAgPERhdGE+DQogICAgPExpY2Vuc2VkVG8+RG93bmxvYWREZXZUb29scy5jb208L0xpY2Vuc2VkVG8+DQogICAgPEVtYWlsVG8+U3VwcG9ydEBEb3dubG9hZERldlRvb2xzLmNvbTwvRW1haWxUbz4NCiAgICA8TGljZW5zZVR5cGU+U2l0ZSBPRU08L0xpY2Vuc2VUeXBlPg0KICAgIDxMaWNlbnNlTm90ZT5MaW1pdGVkIHRvIDEwMDAgZGV2ZWxvcGVycywgdW5saW1pdGVkIHBoeXNpY2FsIGxvY2F0aW9uczwvTGljZW5zZU5vdGU+DQogICAgPE9yZGVySUQ+MzY2MzIwMDg1NDgyPC9PcmRlcklEPg0KICAgIDxVc2VySUQ+NjU0MTk0Mzg2PC9Vc2VySUQ+DQogICAgPE9FTT5UaGlzIGlzIGEgcmVkaXN0cmlidXRhYmxlIGxpY2Vuc2U8L09FTT4NCiAgICA8UHJvZHVjdHM+DQogICAgICA8UHJvZHVjdD5Bc3Bvc2UuVG90YWwgZm9yIC5ORVQ8L1Byb2R1Y3Q+DQogICAgPC9Qcm9kdWN0cz4NCiAgICA8RWRpdGlvblR5cGU+RW50ZXJwcmlzZTwvRWRpdGlvblR5cGU+DQogICAgPFNlcmlhbE51bWJlcj44OGI3NWM5OS0yM2ExLTRlNTUtOTUxNC0wMTNlYTIwMjNkYTc8L1NlcmlhbE51bWJlcj4NCiAgICA8U3Vic2NyaXB0aW9uRXhwaXJ5PjIwOTkxMjE1PC9TdWJzY3JpcHRpb25FeHBpcnk+DQogICAgPExpY2Vuc2VFeHBpcnk+MjA5OTAxMTQ8L0xpY2Vuc2VFeHBpcnk+DQogICAgPExpY2Vuc2VWZXJzaW9uPjMuMDwvTGljZW5zZVZlcnNpb24+DQogIDwvRGF0YT4NCiAgPFNpZ25hdHVyZT5BYnowUUw1QmZXeEhmdTR1dm9tWGROek95dG9RTEZrd2FCNGQ2Tk9OUDg0QkFSL2lVdmViQnpQMm1GYkp5c3hsYTBvcG9JTEtUckVBWHR3ZURsSSs5VVlxcmZvZkVzR3VIU1hSaS9pL24ybTJDRHFBaHRFZEc3VXF6bXRjeTlhQmUreEQ1eU1CcEw5VHdHTnFhOUJtZVcyYzRrWGZZbGw3N0hmZnFhME45b2c9PC9TaWduYXR1cmU+DQo8L0xpY2Vuc2U+";
            new Aspose.Cells.License().SetLicense(new MemoryStream(Convert.FromBase64String(mys)));
        }

        [CommandMethod("tt")]
        public void CreatExcel()
        {
            激活aspose();
            // 创建一个新的工作簿
            Workbook workbook = new Workbook();
            Worksheet worksheet = workbook.Worksheets[0];

            // 设置表头
            worksheet.Cells["A1"].PutValue("序号");
            worksheet.Cells["B1"].PutValue("x坐标");
            worksheet.Cells["C1"].PutValue("y坐标");

            // 填充数据
            Random random = new Random();
            for (int i = 1; i <= 50; i++)
            {
                // 序号
                worksheet.Cells[$"A{i + 1}"].PutValue(i);
                // x坐标
                worksheet.Cells[$"B{i + 1}"].PutValue(i);
                // y坐标(100-300的随机数)
                worksheet.Cells[$"C{i + 1}"].PutValue(random.Next(100, 301));
            }

            // 获取当前用户的桌面路径
            string desktopPath = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);

            // 设置初始文件名
            string baseFileName = "1";
            string fileExtension = ".xlsx"; // 注意:EPPlus生成的是.xlsx文件,不是.xls
            string fileName = Path.Combine(desktopPath, baseFileName + fileExtension);

            // 检查文件名是否已存在,如果存在则添加数字直到找到一个不重复的文件名
            int counter = 1;
            while (File.Exists(fileName))
            {
                fileName = Path.Combine(desktopPath, $"{baseFileName}_{counter}{fileExtension}");
                counter++;
            }
            string filePath = System.IO.Path.Combine(desktopPath, fileName);
            //workbook.Save(filePath, SaveFormat.Excel97To2003);
            workbook.Save(filePath, SaveFormat.Xlsx);

            Env.Editor.WriteMessage($"Excel文件已创建并保存到桌面,文件名为{fileName}");
        }
        public void Lic转字符串()
        {
            // 获取当前用户的桌面路径
            string desktopPath = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);

            // 设置输出文件的路径
            string outputFilePath = Path.Combine(desktopPath, "1.txt");

            // 设置要转换的XML文件的路径
            string xmlFilePath = @"F:\段个人文件\二开\CAD_NET二开资料(C#)\IfoxDemo\IFoxDemo\Aspose.Total.NET.lic"; // 请替换为您的XML文件实际路径

            try
            {
                // 读取XML文件的字节内容
                byte[] xmlBytes = File.ReadAllBytes(xmlFilePath);

                // 将字节内容转换为Base64编码的字符串
                string base64String = Convert.ToBase64String(xmlBytes);

                // 将Base64编码的字符串写入到桌面上的1.txt文件中
                File.WriteAllText(outputFilePath, base64String, Encoding.UTF8);

                // Console.WriteLine("XML文件已成功转换为Base64字符串并输出到桌面1.txt文件中。");
            }
            catch (Exception ex)
            {
                // 捕获并输出异常信息
                Console.WriteLine($"发生错误: {ex.Message}");
            }
        }
    }
    
}


网站公告

今日签到

点亮在社区的每一天
去签到