win32com LineStyle Excel

问题描述 投票:0回答:1

enter image description here

幸运的是我找到了这个网站: https://www.linuxtut.com/en/150745ae0cc17cb5c866/

(定义了很多线型
Excel 枚举 XlLineStyle)

(xlContinuous    =  1
 xlDashDot       =  4
 xlDashDotDot    =  5
 xlSlantDashDot  = 13
 xlDash          = -4115
 xldot           = -4118
 xlDouble        = -4119
 xlLineStyleNone = -4142)

我用 try and except +/- 100.000 次设置行运行,因为我认为任何地方都应该是这个[索引]号,以便将这条线也放入我的图片中,但它们不是 - 为什么不呢?

如何设置这条线?

为什么有些线索引处于如此巨大的负值范围内,而不仅仅是 1、2、3...?

我怎样才能发现像“数字”这样的东西来做这样的事情?

为什么这是可能的,要在特定位置发送应用程序数据,我想更深入一点,我在哪里可以了解更多相关信息?

python excel vba win32com
1个回答
1
投票

(1) 您无法在线条样式枚举中找到虚线介质,因为没有。绘制为边框的线是

lineStyle
Weight
的组合。线条样式为 xlDash,表中值 03 的粗细为
xlThin
,值 08 的粗细为
xlMedium

(2) 要了解如何在 VBA 中设置类似的内容,请使用宏记录器,它将显示在设置边框时设置了 lineStyle、Weight(和颜色)。

(3) 有很多页面描述了所有常量,例如查看评论中链接到的@FaneDuru。它们也可以在 Microsoft 本身找到:https://learn.microsoft.com/en-us/office/vba/api/excel.xllinestylehttps://learn.microsoft.com/en-us/办公室/vba/api/excel.xlborderweight。似乎有人在 linuxTut 页面上将它们翻译为 Python 常量。

(4) 不要问为什么枚举不是连续值。我认为特别是带有负数的常数不仅仅有一个目的。只是永远不要直接使用这些值,始终使用定义的常量。

(5) 您可以假设没有定义常量的数值可以工作,但结果是不可预测的。不太可能有没有常量的值会导致“新”的东西(例如不同的边框样式)。

如下表所示,并非所有组合都会给出不同的边框。将粗细设置为

xlHairline
将忽略线条样式。将其设置为
xlThick
也会忽略 lineStyle,但
xlDouble
除外。另一方面,当重量不是
xlDouble
时,
xlThick
将被忽略。

Sub border()
    With ThisWorkbook.Sheets(1)
        With .Range("A1:J18")
            .Clear
            .Interior.Color = vbWhite
        End With
        
        Dim lStyles(), lWeights(), lStyleNames(), lWeightNames
        lStyles() = Array(xlContinuous, xlDash, xlDashDot, xlDashDotDot, xlDot, xlDouble, xlLineStyleNone, xlSlantDashDot)
        lStyleNames() = Array("xlContinuous", "xlDash", "xlDashDot", "xlDashDotDot", "xlDot", "xlDouble", "xlLineStyleNone", "xlSlantDashDot")
        lWeights = Array(xlHairline, xlThin, xlMedium, xlThick)
        lWeightNames = Array("xlHairline", "xlThin", "xlMedium", "xlThick")
 
        Dim x As Long, y As Long
        For x = LBound(lStyles) To UBound(lStyles)
            Dim row As Long
            row = x * 2 + 3
            .Cells(row, 1) = lStyleNames(x) & vbLf & "(" & lStyles(x) & ")"
            
            For y = LBound(lWeights) To UBound(lWeights)
                Dim col As Long
                col = y * 2 + 3
                If x = 1 Then .Cells(1, col) = lWeightNames(y) & vbLf & "(" & lWeights(y) & ")"
                With .Cells(row, col).Borders
                    .LineStyle = lStyles(x)
                    .Weight = lWeights(y)
                End With
            Next
        Next
    End With
End Sub

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.