乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 87|回复: 2

关于在VB.net中采用GetBoundingBox或者图块文字坐标的问题

[复制链接]

3

主题

6

帖子

2

银币

初来乍到

Rank: 1

铜币
18
发表于 2020-1-1 11:02:00 | 显示全部楼层 |阅读模式
各位大哥好,有个问题想请教一下,不知道能不能帮忙看看啊,谢谢。我想在VB.net编制的程序(独立的exe文件)中实现这么一个功能:程序自动根据excel表格的数据,调取对应的图块,并把图块插入cad文件中,然后图块中的各个属性需根据excel表格的内容进行修改,有的属性修改后文字超出了图块的范围,为保证美观需要对该文字进行缩放。这个功能已经在VBA中实现了,但是VBA需要依靠CAD 才能运行,因此单独编制了基于VB.net的程序。VBA代码拷贝到VB.net中基本能用,只是无法实现文字缩放,问题截图及代码如下,麻烦帮忙看看是哪里的问题啊,谢谢!(代码有所简化,个别不需要缩放的属性对应的代码没贴)

mmqedvcufuy.jpg

mmqedvcufuy.jpg


drjkwhagob4.jpg

drjkwhagob4.jpg


调试中发现这句代码:attVars(k).GetBoundingBox(minExt, maxExt),对某一个块的第一个属性修改后,它能计算出修改后的文字的坐标,但是后面修改的其他属性的坐标无法计算,结果始终保持为第一个属性的文字的坐标,在VBA中没有这个问题。
代码如下:
  1. Imports System.Windows.Forms
  2. Imports Microsoft.Office.Interop
  3. Imports System.IO
  4. Imports System.Threading '导入命名空间
  5. Imports
  6. Public Class Form1
  7.     Private Sub Button1_Click_1(sender As System.Object, e As System.EventArgs) Handles Button1.Click
  8.         '读取excel负荷表
  9.         Dim ExcelApp As Microsoft.Office.Interop.Excel.Application        '声明Excel对象
  10.         Dim ExcelWorkBook As Excel.Workbook         '声明工作簿对象
  11.         Dim ExcelWorkSheet As Excel.Worksheet       '声明工作表对象
  12.         Dim arr_FuHeBiao
  13.         ExcelApp = New Microsoft.Office.Interop.Excel.Application         '实例化Excel对象
  14.         ExcelWorkBook = ExcelApp.Workbooks.Open("D:\桌面文件\VB.net测试\output1.xlsx")
  15.         ExcelApp.Visible = False                                          '隐藏Excel文件
  16.         ExcelWorkBook = ExcelApp.Workbooks(1)
  17.         arr_FuHeBiao = ExcelWorkBook.Sheets("sheet1").UsedRange.value     '负荷表读入数组
  18.         ExcelWorkBook.Close(True)   '关闭工作簿  
  19.         ExcelApp.Quit()             '结束EXCEL对象
  20.         ExcelApp = Nothing          '释放xlApp对象
  21.         ExcelWorkBook = Nothing
  22.         ExcelWorkSheet = Nothing
  23.         '关闭excel进程
  24.         Dim arrProcesses As Process() = Process.GetProcessesByName("excel")
  25.         Dim objNewExcelProcess As Process = (From objProcess As Process In Process.GetProcessesByName("excel")
  26.         Where Not arrProcesses.Contains(objProcess))(0)
  27.         objNewExcelProcess.Kill()
  28.         Dim xx As Integer
  29.         Dim yy As Integer
  30.         xx = UBound(arr_FuHeBiao, 2)          'excel表格列数
  31.         yy = UBound(arr_FuHeBiao, 1)          'excel表格行数
  32.         Dim AcadApp As AcadApplication
  33.         Dim AcadDoc As AcadDocument
  34.         On Error Resume Next
  35.         AcadApp = GetObject(, "AutoCAD.Application")     '如果CAD已经运行,则返回对CAD应用程序对象的引用,否则发生一个错误         
  36.         If Err.Number Then                               '如果Err.Number非零(为真)            
  37.             Err.Clear()
  38.             AcadApp = CreateObject("AutoCAD.Application")
  39.             If Err.Number Then
  40.                 MsgBox(Err.Description)
  41.                 Exit Sub
  42.             End If
  43.         End If
  44.         AcadApp.Visible = True                            '设置界面可视         
  45.         AcadApp.WindowState = AutoCAD.AcWindowState.acMax '设置界面最大化         
  46.         AppActivate(AcadApp.Caption)                      '显示AutoCAD界面           
  47.         Dim count As Integer
  48.         Dim i As Integer
  49.         Dim dir_dwg As String
  50.         dir_dwg = "d:\400V\shigong"
  51.         Dim j As Integer
  52.         Dim blk As String
  53.         Dim blk_obj As Object
  54.         Dim startp(0 To 2) As Double
  55.         Dim countg As Integer
  56.         Dim attVars As Object
  57.         Dim k As Integer
  58.         Dim mulian As Integer
  59.         Dim guihao As Integer          '1、柜号
  60.         Dim xinghao As Integer         '2、型号
  61.         Dim chicun As Integer          '3、尺寸
  62.         Dim huiluhao As Integer        '4、回路号
  63.         Dim xiaoshiguige As Integer    '5、模数
  64.         Dim kaiguanhao As Integer      '6、开关号
  65.         Dim duanluqi As Integer        '7、断路器型号
  66.         Dim tuokouqi As Integer        '8、脱扣器型号
  67.         Dim liuhu As Integer           '9、流互
  68.         Dim dianliubiao As Integer     '10、电流表
  69.         Dim diandubiao As Integer      '11、电度表
  70.         Dim langyong As Integer         '浪涌保护器
  71.         Dim mingcheng As Integer       '17、回路名称
  72.         Dim shebeirongliang As Integer '18、设备容量
  73.         Dim jisuanrongliang As Integer '19、计算容量
  74.         Dim jisuandianliu As Integer   '20、计算电流
  75.         Dim zhengding As Integer       '21、整定
  76.         Dim peidianxiang As Integer    '22、配电箱
  77.         Dim dianlan As Integer         '23、电缆
  78.         Dim xiajizhengding As Integer   '24、下级整定
  79.         Dim fuhedengji As Integer      '25、负荷等级
  80.         Dim sanyao As Integer          '26、三遥
  81.         Dim jiankong As Integer         '27、监控
  82.         Dim fujian As Integer          '28、接地保护及定值
  83.         Dim xiaofang As Integer         '29、负荷类型
  84.         Dim beizhu As Integer          '30、备注
  85.         Dim muxianduan As Integer      '31、母线段
  86.         Dim duanyanshi As Integer           '32、短延时整定值
  87.         Dim shundong As Integer           '33、瞬动整定值
  88.         Dim xiangxian As Integer           '34、相线截面
  89.         Dim nxian As Integer           '35、N线截面
  90.         Dim pexian As Integer           '36、PE线截面
  91.         Dim m As Integer
  92.         Dim deng As Integer
  93.         count = yy   '行数
  94.         For i = 1 To xx
  95.             Select Case arr_FuHeBiao(1, i)
  96.                 Case "开关柜编号"
  97.                     guihao = i
  98.                 Case "开关柜型号"
  99.                     xinghao = i
  100.                 Case "外型尺寸"
  101.                     chicun = i
  102.                 Case "回路编号"
  103.                     huiluhao = i
  104.                 Case "模数"
  105.                     xiaoshiguige = i
  106.                 Case "主回路开关编号"
  107.                     kaiguanhao = i
  108.                 Case "断路器型号"
  109.                     duanluqi = i
  110.                 Case "脱扣器型号"
  111.                     tuokouqi = i
  112.                 Case "电流互感器"
  113.                     liuhu = i
  114.                 Case "电流表"
  115.                     dianliubiao = i
  116.                 Case "电度表"
  117.                     diandubiao = i
  118.                 Case "浪涌保护器"
  119.                     langyong = i
  120.                 Case "回路名称"
  121.                     mingcheng = i
  122.                 Case "设备容量"
  123.                     shebeirongliang = i
  124.                 Case "计算容量"
  125.                     jisuanrongliang = i
  126.                 Case "计算电流"
  127.                     jisuandianliu = i
  128.                 Case "长延时整定值"
  129.                     zhengding = i
  130.                 Case "下级配电箱编号"
  131.                     peidianxiang = i
  132.                 Case "馈线电缆截面"
  133.                     dianlan = i
  134.                 Case "下级配电箱整定值"
  135.                     xiajizhengding = i
  136.                 Case "负荷等级"
  137.                     fuhedengji = i
  138.                 Case "操作机构"
  139.                     sanyao = i
  140.                 Case "电气火灾监控模块"
  141.                     jiankong = i
  142.                 Case "接地保护及定值"
  143.                     fujian = i
  144.                 Case "负荷类型"
  145.                     xiaofang = i
  146.                 Case "备注"
  147.                     beizhu = i
  148.                 Case "母线段"
  149.                     muxianduan = i
  150.                 Case "短延时整定值"
  151.                     duanyanshi = i
  152.                 Case "瞬动整定值"
  153.                     shundong = i
  154.                 Case "相线截面"
  155.                     xiangxian = i
  156.                 Case "N线截面"
  157.                     nxian = i
  158.                 Case "PE线截面"
  159.                     pexian = i
  160.             End Select
  161.         Next i
  162.         Me.Visible = False
  163.         AcadDoc = AcadApp.ActiveDocument
  164.         Dim intp(0 To 2) As Double
  165.         'CAD中块插入的初始坐标
  166.         intp(0) = 0
  167.         intp(1) = 0
  168.         intp(2) = 0
  169.         Dim fitPoint(0 To 2) As Double
  170.         Dim minExt As Object
  171.         Dim maxExt As Object
  172.         Dim intp_gui(0 To 2) As Double
  173.         mulian = 0
  174.         Dim ij As Integer
  175.         Dim gui As String
  176.         Dim guishu As Integer
  177.         Dim kk As Integer
  178.         blk = dir_dwg + "表头" + ".dwg"     '图块路径及图块名称
  179.         blk_obj = AcadApp.ActiveDocument.ModelSpace.InsertBlock(intp, blk, 1, 1, 1, 0)     '插入块InsertBlock(插入点,名称,1,1,1,0)
  180.         intp(0) = intp(0) + 20              '下一个图块插入点的x坐标
  181.         i = 2
  182.         While i  "" Then
  183.                                     attVars(k).TextString = System.Math.Round(arr_FuHeBiao(i, jisuandianliu), 2)
  184.                                 Else
  185.                                     attVars(k).TextString = ""
  186.                                 End If
  187.                         End Select
  188.                     Next k
  189.                 Case "进线"
  190.                     blk = dir_dwg + "进线" + ".dwg"       '图块路径及图块名称
  191.                     blk_obj = AcadApp.ActiveDocument.ModelSpace.InsertBlock(intp, blk, 1, 1, 1, 0)   '插入图块InsertBlock(插入点,名称,1,1,1,0)
  192.                     attVars = blk_obj.GetAttributes      'GetAttributes获得图块的属性
  193.                     For k = 0 To UBound(attVars)
  194.                         Select Case attVars(k).TagString
  195.                             Case "断路器型号"
  196.                                 attVars(k).TextString = arr_FuHeBiao(i, duanluqi)
  197.                                 attVars(k).GetBoundingBox(minExt, maxExt)                    'GetBoundingBox(minExt, maxExt)获取文字的左端和右端的坐标
  198.                                 If minExt(0)  (intp(0) + 20) Then    '文字左端坐标小于方框的左端坐标,或者文字右端坐标大于方框右端的坐标,即可判断为文字已超出方框
  199.                                     attVars(k).Alignment = acAlignmentFit()                  '文字对齐方式:调整
  200.                                     fitPoint(0) = intp(0) + 0.5 : fitPoint(1) = minExt(1) : fitPoint(2) = minExt(2)
  201.                                     attVars(k).InsertPoint = fitPoint
  202.                                     fitPoint(0) = intp(0) + 19.5 : fitPoint(1) = minExt(1) : fitPoint(2) = minExt(2)
  203.                                     attVars(k).TextAlignmentPoint = fitPoint
  204.                                 End If
  205.                             Case "脱扣器型号"
  206.                                 attVars(k).TextString = arr_FuHeBiao(i, tuokouqi)
  207.                                 attVars(k).GetBoundingBox(minExt, maxExt)
  208.                                 If minExt(0)  (intp(0) + 20) Then
  209.                                     attVars(k).Alignment = acAlignmentFit
  210.                                     fitPoint(0) = intp(0) + 0.5 : fitPoint(1) = minExt(1) : fitPoint(2) = minExt(2)
  211.                                     attVars(k).InsertPoint = fitPoint
  212.                                     fitPoint(0) = intp(0) + 19.5 : fitPoint(1) = minExt(1) : fitPoint(2) = minExt(2)
  213.                                     attVars(k).TextAlignmentPoint = fitPoint
  214.                                 End If
  215.                             Case "电流互感器"
  216.                                 attVars(k).TextString = arr_FuHeBiao(i, liuhu)
  217.                                 attVars(k).GetBoundingBox(minExt, maxExt)
  218.                                 If minExt(0)  (intp(0) + 20) Then
  219.                                     attVars(k).Alignment = acAlignmentFit
  220.                                     fitPoint(0) = intp(0) + 0.5 : fitPoint(1) = minExt(1) : fitPoint(2) = minExt(2)
  221.                                     attVars(k).InsertPoint = fitPoint
  222.                                     fitPoint(0) = intp(0) + 19.5 : fitPoint(1) = minExt(1) : fitPoint(2) = minExt(2)
  223.                                     attVars(k).TextAlignmentPoint = fitPoint
  224.                                 End If
  225.                             Case "馈线电缆截面"
  226.                                 attVars(k).TextString = arr_FuHeBiao(i, dianlan)
  227.                                 attVars(k).GetBoundingBox(minExt, maxExt)
  228.                                 If minExt(0)  (intp(0) + 20) Then
  229.                                     attVars(k).Alignment = acAlignmentFit()
  230.                                     fitPoint(0) = intp(0) + 0.5 : fitPoint(1) = minExt(1) : fitPoint(2) = minExt(2)
  231.                                     attVars(k).InsertPoint = fitPoint
  232.                                     fitPoint(0) = intp(0) + 19.5 : fitPoint(1) = minExt(1) : fitPoint(2) = minExt(2)
  233.                                     attVars(k).TextAlignmentPoint = fitPoint
  234.                                 End If
  235.                         End Select
  236.                     Next k
  237.                 Case "有源滤波"
  238.                     blk = dir_dwg + "有源滤波" + ".dwg"
  239.                     blk_obj = AcadApp.ActiveDocument.ModelSpace.InsertBlock(intp, blk, 1, 1, 1, 0)
  240.                     attVars = blk_obj.GetAttributes
  241.                     For k = 0 To UBound(attVars)
  242.                         Select Case attVars(k).TagString
  243.                             Case "断路器型号"
  244.                                 attVars(k).TextString = arr_FuHeBiao(i, duanluqi)
  245.                                 attVars(k).GetBoundingBox(minExt, maxExt)
  246.                                 If minExt(0)  (intp(0) + 20) Then
  247.                                     attVars(k).Alignment = acAlignmentFit
  248.                                     fitPoint(0) = intp(0) + 0.5 : fitPoint(1) = minExt(1) : fitPoint(2) = minExt(2)
  249.                                     attVars(k).InsertionPoint = fitPoint
  250.                                     fitPoint(0) = intp(0) + 19.5 : fitPoint(1) = minExt(1) : fitPoint(2) = minExt(2)
  251.                                     attVars(k).TextAlignmentPoint = fitPoint
  252.                                 End If
  253.                             Case "脱扣器型号"
  254.                                 attVars(k).TextString = arr_FuHeBiao(i, tuokouqi)
  255.                                 attVars(k).GetBoundingBox(minExt, maxExt)
  256.                                 If minExt(0)  (intp(0) + 20) Then
  257.                                     attVars(k).Alignment = acAlignmentFit
  258.                                     fitPoint(0) = intp(0) + 0.5 : fitPoint(1) = minExt(1) : fitPoint(2) = minExt(2)
  259.                                     attVars(k).InsertionPoint = fitPoint
  260.                                     fitPoint(0) = intp(0) + 19.5 : fitPoint(1) = minExt(1) : fitPoint(2) = minExt(2)
  261.                                     attVars(k).TextAlignmentPoint = fitPoint
  262.                                 End If
  263.                             Case "电流互感器"
  264.                                 attVars(k).TextString = arr_FuHeBiao(i, liuhu)
  265.                                 attVars(k).GetBoundingBox(minExt, maxExt)
  266.                                 If minExt(0)  (intp(0) + 20) Then
  267.                                     attVars(k).Alignment = acAlignmentFit
  268.                                     fitPoint(0) = intp(0) + 0.5 : fitPoint(1) = minExt(1) : fitPoint(2) = minExt(2)
  269.                                     attVars(k).InsertionPoint = fitPoint
  270.                                     fitPoint(0) = intp(0) + 19.5 : fitPoint(1) = minExt(1) : fitPoint(2) = minExt(2)
  271.                                     attVars(k).TextAlignmentPoint = fitPoint
  272.                                 End If
  273.                             Case "馈线电缆截面"
  274.                                 attVars(k).TextString = arr_FuHeBiao(i, dianlan)
  275.                                 attVars(k).GetBoundingBox(minExt, maxExt)
  276.                                 If minExt(0)  (intp(0) + 20) Then
  277.                                     attVars(k).Alignment = acAlignmentFit
  278.                                     fitPoint(0) = intp(0) + 0.5 : fitPoint(1) = minExt(1) : fitPoint(2) = minExt(2)
  279.                                     attVars(k).InsertionPoint = fitPoint
  280.                                     fitPoint(0) = intp(0) + 19.5 : fitPoint(1) = minExt(1) : fitPoint(2) = minExt(2)
  281.                                     attVars(k).TextAlignmentPoint = fitPoint
  282.                                 End If
  283.                         End Select
  284.                     Next k
  285.                 Case "母联"
  286.                     blk = dir_dwg + "母联1" + ".dwg"
  287.                     blk_obj = AcadApp.ActiveDocument.ModelSpace.InsertBlock(intp, blk, 1, 1, 1, 0)
  288.                     attVars = blk_obj.GetAttributes
  289.                     For k = 0 To UBound(attVars)
  290.                         Select Case attVars(k).TagString
  291.                             Case "断路器型号"
  292.                                 attVars(k).TextString = arr_FuHeBiao(i, duanluqi)
  293.                                 attVars(k).GetBoundingBox(minExt, maxExt)
  294.                                 If minExt(0)  (intp(0) + 20) Then
  295.                                     attVars(k).Alignment = acAlignmentFit()
  296.                                     fitPoint(0) = intp(0) + 0.5 : fitPoint(1) = minExt(1) : fitPoint(2) = minExt(2)
  297.                                     attVars(k).InsertPoint = fitPoint
  298.                                     fitPoint(0) = intp(0) + 19.5 : fitPoint(1) = minExt(1) : fitPoint(2) = minExt(2)
  299.                                     attVars(k).TextAlignmentPoint = fitPoint
  300.                                 End If
  301.                             Case "脱扣器型号"
  302.                                 attVars(k).TextString = arr_FuHeBiao(i, tuokouqi)
  303.                                 attVars(k).GetBoundingBox(minExt, maxExt)
  304.                                 If minExt(0)  (intp(0) + 20) Then
  305.                                     attVars(k).Alignment = acAlignmentFit()
  306.                                     fitPoint(0) = intp(0) + 0.5 : fitPoint(1) = minExt(1) : fitPoint(2) = minExt(2)
  307.                                     attVars(k).InsertPoint = fitPoint
  308.                                     fitPoint(0) = intp(0) + 19.5 : fitPoint(1) = minExt(1) : fitPoint(2) = minExt(2)
  309.                                     attVars(k).TextAlignmentPoint = fitPoint
  310.                                 End If
  311.                             Case "电流互感器"
  312.                                 attVars(k).TextString = arr_FuHeBiao(i, liuhu)
  313.                                 attVars(k).GetBoundingBox(minExt, maxExt)
  314.                                 If minExt(0)  (intp(0) + 20) Then
  315.                                     attVars(k).Alignment = acAlignmentFit()
  316.                                     fitPoint(0) = intp(0) + 0.5 : fitPoint(1) = minExt(1) : fitPoint(2) = minExt(2)
  317.                                     attVars(k).InsertPoint = fitPoint
  318.                                     fitPoint(0) = intp(0) + 19.5 : fitPoint(1) = minExt(1) : fitPoint(2) = minExt(2)
  319.                                     attVars(k).TextAlignmentPoint = fitPoint
  320.                                 End If
  321.                             Case "馈线电缆截面"
  322.                                 attVars(k).TextString = arr_FuHeBiao(i, dianlan)
  323.                                 attVars(k).GetBoundingBox(minExt, maxExt)
  324.                                 If minExt(0)  (intp(0) + 20) Then
  325.                                     attVars(k).Alignment = acAlignmentFit()
  326.                                     fitPoint(0) = intp(0) + 0.5 : fitPoint(1) = minExt(1) : fitPoint(2) = minExt(2)
  327.                                     attVars(k).InsertPoint = fitPoint
  328.                                     fitPoint(0) = intp(0) + 19.5 : fitPoint(1) = minExt(1) : fitPoint(2) = minExt(2)
  329.                                     attVars(k).TextAlignmentPoint = fitPoint
  330.                                 End If
  331.                         End Select
  332.                     Next k
  333.                 Case Else
  334.                     Select Case arr_FuHeBiao(i, muxianduan)
  335.                         Case "11"
  336.                             blk = dir_dwg + "12级馈线" + ".dwg"
  337.                             blk_obj = AcadApp.ActiveDocument.ModelSpace.InsertBlock(intp, blk, 1, 1, 1, 0)
  338.                         Case "111"
  339.                             blk = dir_dwg + "12级馈线(三相流互)" + ".dwg"
  340.                             blk_obj = AcadApp.ActiveDocument.ModelSpace.InsertBlock(intp, blk, 1, 1, 1, 0)
  341.                         Case "12"
  342.                             blk = dir_dwg + "照明馈线" + ".dwg"
  343.                             blk_obj = AcadApp.ActiveDocument.ModelSpace.InsertBlock(intp, blk, 1, 1, 1, 0)
  344.                         Case "121"
  345.                             blk = dir_dwg + "照明馈线(三相流互)" + ".dwg"
  346.                             blk_obj = AcadApp.ActiveDocument.ModelSpace.InsertBlock(intp, blk, 1, 1, 1, 0)
  347.                         Case "14"
  348.                             blk = dir_dwg + "照明总开关(左-右)" + ".dwg"
  349.                             blk_obj = AcadApp.ActiveDocument.ModelSpace.InsertBlock(intp, blk, 1, 1, 1, 0)
  350.                         Case "141"
  351.                             blk = dir_dwg + "照明总开关(三相流互)(左-右)" + ".dwg"
  352.                             blk_obj = AcadApp.ActiveDocument.ModelSpace.InsertBlock(intp, blk, 1, 1, 1, 0)
  353.                         Case "15"
  354.                             blk = dir_dwg + "照明总计量(左-右)" + ".dwg"
  355.                             blk_obj = AcadApp.ActiveDocument.ModelSpace.InsertBlock(intp, blk, 1, 1, 1, 0)
  356.                         Case "151"
  357.                             blk = dir_dwg + "照明总计量(三相流互)(左-右)" + ".dwg"
  358.                             blk_obj = AcadApp.ActiveDocument.ModelSpace.InsertBlock(intp, blk, 1, 1, 1, 0)
  359.                     End Select
  360.                     attVars = blk_obj.GetAttributes
  361.                     For k = 0 To UBound(attVars)
  362.                         Select Case attVars(k).TagString
  363.                             Case "断路器型号"
  364.                                 attVars(k).TextString = arr_FuHeBiao(i, duanluqi)
  365.                                 attVars(k).GetBoundingBox(minExt, maxExt)
  366.                                 If minExt(0)  (intp(0) + 20) Then
  367.                                     attVars(k).Alignment = acAlignmentFit()
  368.                                     fitPoint(0) = intp(0) + 0.5 : fitPoint(1) = minExt(1) : fitPoint(2) = minExt(2)
  369.                                     attVars(k).InsertionPoint = fitPoint
  370.                                     fitPoint(0) = intp(0) + 19.5 : fitPoint(1) = minExt(1) : fitPoint(2) = minExt(2)
  371.                                     attVars(k).TextAlignmentPoint = fitPoint
  372.                                 End If
  373.                             Case "脱扣器型号"
  374.                                 attVars(k).TextString = arr_FuHeBiao(i, tuokouqi)
  375.                                 attVars(k).GetBoundingBox(minExt, maxExt)
  376.                                 If minExt(0)  (intp(0) + 20) Then
  377.                                     attVars(k).Alignment = acAlignmentFit()
  378.                                     fitPoint(0) = intp(0) + 0.5 : fitPoint(1) = minExt(1) : fitPoint(2) = minExt(2)
  379.                                     attVars(k).InsertionPoint = fitPoint
  380.                                     fitPoint(0) = intp(0) + 19.5 : fitPoint(1) = minExt(1) : fitPoint(2) = minExt(2)
  381.                                     attVars(k).TextAlignmentPoint = fitPoint
  382.                                 End If
  383.                             Case "电流互感器"
  384.                                 attVars(k).TextString = arr_FuHeBiao(i, liuhu)
  385.                                 attVars(k).GetBoundingBox(minExt, maxExt)
  386.                                 If minExt(0)  (intp(0) + 20) Then
  387.                                     attVars(k).Alignment = acAlignmentFit()
  388.                                     fitPoint(0) = intp(0) + 0.5 : fitPoint(1) = minExt(1) : fitPoint(2) = minExt(2)
  389.                                     attVars(k).InsertionPoint = fitPoint
  390.                                     fitPoint(0) = intp(0) + 19.5 : fitPoint(1) = minExt(1) : fitPoint(2) = minExt(2)
  391.                                     attVars(k).TextAlignmentPoint = fitPoint
  392.                                 End If
  393.                             Case "回路名称"
  394.                                 attVars(k).TextString = arr_FuHeBiao(i, mingcheng)
  395.                                 attVars(k).GetBoundingBox(minExt, maxExt)
  396.                                 If minExt(0)  (intp(0) + 20) Then
  397.                                     attVars(k).Alignment = acAlignmentFit()
  398.                                     fitPoint(0) = intp(0) + 0.5 : fitPoint(1) = minExt(1) : fitPoint(2) = minExt(2)
  399.                                     attVars(k).InsertionPoint = fitPoint
  400.                                     fitPoint(0) = intp(0) + 19.5 : fitPoint(1) = minExt(1) : fitPoint(2) = minExt(2)
  401.                                     attVars(k).TextAlignmentPoint = fitPoint
  402.                                 End If
  403.                             Case "馈线电缆截面"
  404.                                 attVars(k).TextString = arr_FuHeBiao(i, dianlan)
  405.                                 attVars(k).GetBoundingBox(minExt, maxExt)
  406.                                 If minExt(0)  (intp(0) + 20) Then
  407.                                     attVars(k).Alignment = acAlignmentFit()
  408.                                     fitPoint(0) = intp(0) + 0.5 : fitPoint(1) = minExt(1) : fitPoint(2) = minExt(2)
  409.                                     attVars(k).InsertionPoint = fitPoint
  410.                                     fitPoint(0) = intp(0) + 19.5 : fitPoint(1) = minExt(1) : fitPoint(2) = minExt(2)
  411.                                     attVars(k).TextAlignmentPoint = fitPoint
  412.                                 End If
  413.                         End Select
  414.                     Next k
  415.             End Select
  416.             intp(0) = intp(0) + 20
  417.             i = i + 1
  418.         End While
  419.         MsgBox("已完成排列图绘制,请核查!")
  420.         Me.Visible = True
  421.     End Sub
  422.     Private Function acAlignmentFit() As Object
  423.         Throw New NotImplementedException
  424.     End Function
  425. End Class
回复

使用道具 举报

3

主题

6

帖子

2

银币

初来乍到

Rank: 1

铜币
18
发表于 2020-1-2 16:18:00 | 显示全部楼层
已解决,获取下一个文本外框坐标前,需要将上一个文本的外框坐标清除。
回复

使用道具 举报

9

主题

66

帖子

5

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
102
发表于 2020-1-19 21:39:00 | 显示全部楼层
操作Excel,别用微软自己的Microsoft.Office.Interop.Excel.Application。这个实在太难用,读、写均是龟速。且操作不当,经常你的程序退出了,但是系统中存留一大堆Excel的线程。
推荐EPPlus,超级简单,速度快。
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-13 02:11 , Processed in 0.494094 second(s), 61 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表