我正在寻找一些关于从文本中获取数秒的帮助。
这就是我在libreoffice计算专栏A中所拥有的:
我正在寻找一个解决方案(我对Libreoffice Basic不好)从列B中的这个持续时间获得秒数。问题来自解析列(这是计为文本,并且在数据中格式化仍然没有不行。我不知道如何拆分单元格以获取例如:35*86400+21*3600+56*60
单元格A1
。
我尝试使用libreoffice工具进行拆分,但是如果我在A列中没有天数,那么它会为例如:5(hours)*86400
等...对于单元格A4
答案 0 :(得分:0)
你没有说出你的首选语言,我可以用PHP向你展示一个例子。目标是只将数字留在字符串中并且计算总和。我不知道所有可能的字符串变体,但此代码适用于您的输入。
$durations = array(
'35 days 21 hours 56 minutes',
'3 days 0 hours 54 minutes',
'1 days 3 hours 0 minutes',
'5 hours 26 minutes',
'32 minutes',
'0 second'
);
$constants = array(60, 3600, 86400);
$durationsTime = array();
foreach ($durations as $duration) {
$numbers = preg_replace('/[^0-9\s]/i', '', $duration);
$values = explode(' ', $numbers);
$time = 0;
if (count($values) > 1) {
foreach ($values as $key => $value) {
$time += $value * $constants[count($values) - $key - 1];
}
} else {
$time = strpos($duration, 'second') !== false ? intval($values[0]) : $values[0] * $constants[0];
}
$durationsTime[] = $time;
}
var_dump($durationsTime);die();
答案 1 :(得分:0)
使用libreoffice API的Starbasic:
function GETSECONDS(s1 as string) as long
oFuncAccess = createUnoService( "com.sun.star.sheet.FunctionAccess" )
s1 = oFuncAccess.callFunction("SUBSTITUTE", array(s1, "days", "*24*60*60+"))
s1 = oFuncAccess.callFunction("SUBSTITUTE", array(s1, "hours", "*60*60+"))
s1 = oFuncAccess.callFunction("SUBSTITUTE", array(s1, "minutes", "*60+"))
s1 = oFuncAccess.callFunction("SUBSTITUTE", array(s1, "seconds", "*1+"))
s1 = left(s1, len(s1)-1)
lRes = 0
sAdd = split(s1, "+")
for i = lbound(sAdd) to ubound(sAdd)
sMult = split(sAdd(i),"*")
lResMult = 1
for j = lbound(sMult) to ubound(sMult)
lResMult = lResMult * val(sMult(j))
next
lRes = lRes + lResMult
next
getSeconds = lRes
end function
用作UDF,如:=GETSECONDS(A1)
时间测量单位必须是复数形式。
问候
阿克塞尔