我倾向于使用 LibreOffice Calc 来跟踪某种(测量)数据(例如,来自已进行的实验)。在几乎所有情况下,这些数据都是以特定测量单位表示数量(例如,能量用焦耳表示,长度用厘米表示,等等)的数字。
我现在所做的是将单位写下来作为列标题的一部分(例如Measurement XY / Joules
),然后将测量的数量写为数值作为该列中的条目。
这种方法有点行得通,但也有很多缺点,例如:
- 在使用获得的数据进行计算时,相关单位会被完全忽略(显然),因此无法进行合理性检查(à la
eh, you're trying to add time to distance over here
) - 将数据从一个单位转换为另一个单位(例如从厘米转换为米)通常需要在原始单位旁边添加一个单独的列,并使用公式为您执行转换。因此,实际上您是在重复数据,这会损害工作表的可读性。
- 如果当前看不到列标题(例如因为向下滚动得太远),那么您面前的数据单位也不会迫在眉睫。
所以我的基本问题是:在 LibreOffice Calc 中使用物理单位管理数据的最佳(合理)方法是什么?
我知道有CONVERT
函数可以进行单位转换,但它似乎仅限于处理一组硬编码的单位。据我所知,没有办法通过为函数本身已知的单位提供转换因子来扩展支持的单位。
如果这样的扩展是可能的,我可以想象尝试将一些东西拼凑在一起,其中列标题由两个单元格组成,其中第一个是名称,第二个是单位下拉菜单,在那里更改所选单位将自动转换列中的数据。
编辑:这个问题主要是作为一个比较笼统的问题。我提供的具体问题主要是为了说明由于没有本机单位支持而引起的总体问题。
我感兴趣的是其他人如何解决由此遇到的不同问题。
我遇到的一个特殊问题让我深入研究了整个事情,那就是我有一个这样的专栏
My Energy / Hartree
1
2
3
但现在我被要求以电子伏特而不是哈特里为单位给出能量。我想要做的是简单地更改标题中的单位,然后让列中的数值自动转换。
请注意,我明确希望避免添加包含相同数据但以 eV 为单位的第二列,因为我认为这会使电子表格完全混乱并使其难以阅读。
答案1
以下是一个用户定义函数的示例。首先在单元格 A1 至 C3 中输入以下内容。
distance 1 distance 2 distance sum (cm)
~~~~~~~~~~ ~~~~~~~~~~ ~~~~~~~~~~~~~~~~~
2 m 50 cm
5 m 1 m
现在,在标准图书馆工具 > 宏 > 组织宏 > 基本。
Function Convert_To(sNumWithUnits As String, sDestUnit)
aNumWithUnits = Split(sNumWithUnits)
dNum = CDbl(aNumWithUnits(0))
sInputUnit = aNumWithUnits(1)
If sInputUnit = sDestUnit Then
Convert_To = dNum
Exit Function
End If
If sInputUnit = "m" and sDestUnit = "cm" Then
conversionFactor = 100
End If
Convert_To = dNum * conversionFactor
End Function
最后在C2单元格中输入=(CONVERT_TO(A2;"cm")+CONVERT_TO(B2;"cm")) & " cm"
并向下填充。
结果:
distance sum (cm)
~~~~~~~~~~~~~~~~~
250 cm
600 cm