Time 从持续时间中获取秒数

Time 从持续时间中获取秒数,time,libreoffice,duration,calc,Time,Libreoffice,Duration,Calc,我正在寻找一些关于从文本中获取秒数的帮助 这是我在libreoffice calc A列中的内容: A1:35天21小时56分钟 A2:3天0小时54分钟 A3:1天3小时0分钟 A4:5小时26分钟 A5:32分钟 A6:0秒 我正在寻找一个解决方案(我对libreofficebasic不太熟悉)来从列B中的持续时间中获得秒数。问题在于解析列(这是作为文本计算的,在数据中格式化仍然不起作用)。我不知道如何拆分单元格以获得例如:35*86400+21*3600+56*60for cellA1

我正在寻找一些关于从文本中获取秒数的帮助

这是我在libreoffice calc A列中的内容:

  • A1:35天21小时56分钟
  • A2:3天0小时54分钟
  • A3:1天3小时0分钟
  • A4:5小时26分钟
  • A5:32分钟
  • A6:0秒
我正在寻找一个解决方案(我对libreofficebasic不太熟悉)来从列B中的持续时间中获得秒数。问题在于解析列(这是作为文本计算的,在数据中格式化仍然不起作用)。我不知道如何拆分单元格以获得例如:
35*86400+21*3600+56*60
for cell
A1


我尝试使用libreoffice工具进行拆分,但如果A列中没有天数,则会生成例如:
5(小时)*86400
,等等。。对于cell
A4

您没有提到您的首选语言,我可以向您展示一个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();

Starbasic与libreoffice API:

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
用作自定义项,如:
=GETSECONDS(A1)

时间测量单位必须为复数形式

问候


阿克塞尔

事实上,我想知道是否有一种方法可以通过libreoffice来实现。但如果我必须在Basic中构建它,我会保留它。谢谢你的帮助,效果很好!我没有想过用乘法代替我的课文。非常感谢你