在 excel、libreoffice/openoffice 或任何其他免费电子表格中以度分秒为单位进行计算

在 excel、libreoffice/openoffice 或任何其他免费电子表格中以度分秒为单位进行计算

我爸爸对占星术很感兴趣,所以他需要做一些计算——大多数书都使用度分秒非计量单位- 有没有办法设置 excel 或 open office calc 来处理 DMS 方面的计算?

编辑:我们目前正在使用 excel 2007

编辑2:我怀疑安装 open office / libre office 是一种选择,而且可能没有 MS Excel 的方式来做到这一点 - 所以我扩大了问题,Office 2007 是首选,但几乎任何常见的 Windows 电子表格都可以

编辑 3:显然,使用时间作为解决方法不允许乘法 - 在这种情况下这是必需的

答案1

开箱即用的 Excel 不支持您要求的功能。可能有一些插件可以帮助解决这个问题,但我想提供一个解决方法:

您可以将数字格式化为时间,以便 Excel(可能还有 OOo 和 LibreOffice)使用正确的除法、基数等显示和计算您需要的值。

使用以下自定义格式(Excel、OOo 和 LibreOffice 都有等效格式,但我手头没有副本可以测试)也会使用正确的符号呈现它们。这可以[h]防止小时在达到 24 时重置为零,从而允许任意大的角度。如果您想要前导零,则只需将每个字母加倍即可。

[h]º m' s\"

可以根据需要将它们加在一起等等(毕竟,它们只是下面的数字)。然而,这只有在最终结果为正时才有效;Excel不会 将 呈现负面时代

如果您需要将该值转换为十进制度值,则只需乘以 24,因为 Excel 时间格式中的“天”的值为 1(因此一小时是 1/24,等等)。

只需确保此公式所在的单元格具有正常格式 - 而不是时间:

=A1*24

或者,您也可以使用以下命令从时间值中提取特定成分:

=INT(A1*24)    returns degrees
=MINUTE(A1)    returns minutes
=SECOND(A1)    returns seconds

答案2

以下是两个宏,它们可以完成我的天文学电子表格的工作。方向值(度、分、秒)被格式化为文本。如果单元格 A1 包含-77° 26' 09.5",我可以=DMS2Real(A1)在单元格 A2 中输入,然后会显示 -77.4359722222。A3=Real2DMS(A2)中的转换将反转。

通过输入宏函数工具 > 宏 > 组织宏 > LibreOffice Basic > 标准(或者您想要存储它们的任何地方)。

请注意,十进制度不是三角函数所需的弧度值。

' Convert degrees, minutes, seconds to a single real number and back. 

' Tested in LibreOffice Calc 5.1.6.2
' Based on  https://support.microsoft.com/en-gb/help/213449/how-to-convert-degrees-minutes-seconds-angles-to-or-from-decimal-angle


Function DMS2Real(Degree_DMS As String) As Double  ' -77° 26' 09.5" -> -77.4359722222
    ' use double precision floating-point.
    Dim degrees As Double
    Dim minutes As Double
    Dim seconds As Double
    Dim sign As Integer

    ' Set degree to value appearing before "°" in argument string.
    degrees = Val(Left(Degree_DMS, InStr(1, Degree_DMS, "°") - 1))

    ' Only positive value is computed. Sign of result is changed in final statement
    '  i.e. -7° 8' 9"  means (-7 - 8/60 - 9/3600)
    If degrees < 0 Then
        degrees = degrees * -1
        sign = -1
    Else 
        sign = 1
    End If

    ' Set minutes to the value between the "°" and the "'"
    '  of the text string for the variable Degree_Deg divided by 60.
    ' The Val function converts the text string to a number.
    minutes = Val(Mid(Degree_DMS, InStr(1, Degree_DMS, "°") + 2, InStr(1, Degree_DMS, "'") - InStr(1, Degree_DMS, "°") - 2)) / 60
    ' Set seconds to the number to the right of "'" that is
    ' converted to a value and then divided by 3600.
    seconds = Val(Mid(Degree_DMS, InStr(1, Degree_DMS, "'") + 2, Len(Degree_DMS) - InStr(1, Degree_DMS, "'") - 2)) / 3600
    DMS2Real =  sign * (degrees + minutes + seconds)
End Function


Function  Real2DMS(dms)    ' -77.4359722222 -> -77° 26' 9.5"
    DIM sign As String
    ' allow for negative values
    If dms < 0 Then
        dms = dms * -1
        sign = "-"
    Else 
        sign = " "
    End If

    'Set degree to Integer of Argument Passed
    Degrees = Int(dms)
    'Set minutes to 60 times the number to the right
    'of the decimal for the variable Decimal_Deg
    Minutes = (dms - Degrees) * 60
    'Set seconds to 60 times the number to the right of the
    'decimal for the variable Minute
    Seconds = Format(((Minutes - Int(Minutes)) * 60), "0.0")
    'Returns the Result of degree conversion
    '(for example, 10.46 = 10~ 27  ' 36")
    Real2DMS = sign & Degrees & "° " & Int(Minutes) & "' " & Seconds + Chr(34)
End Function

Sub Main
End Sub

答案3

在使用以下函数时,没有办法告诉 Excel 在弧度和度之间切换

=SIN(DEGREES)

因此你要么必须在每个公式中进行显式转换,例如

=SIN(RADIANS(DEGREES + MINUTES/60 + SECONDS/3600))

或者你可以在 VBA 中创建自定义公式,例如

Function SinDMS(Deg As Double, Min As Double, Sec As Double) As Double

    SinDMS = Sin((3.1415 * 2 * (Deg + Min / 60 + Sec / 3600)) / 360)

End Function

(但如果计算量很大的话就会比较慢)

答案4

在 Excel 中以度为单位进行计算,然后使用公式将答案转换为度、分和秒(在单元格 A3 中设置输入角度):

=+FLOOR(A3,1)&" deg "&FLOOR((A3-(FLOOR(A3,1)))*60,1)&" min "&ROUND((((A3-(FLOOR(A3,1)))*60)-FLOOR((A3-(FLOOR(A3,1)))*60,1))*60,0)&" sec"

相关内容