2

我正在寻找有关从文本中获取几秒钟的帮助。

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

  • A1 : 35 天 21 小时 56 分钟
  • A2 : 3 天 0 小时 54 分钟
  • A3 : 1 天 3 小时 0 分钟
  • A4 : 5 小时 26 分钟
  • A5 : 32 分钟
  • A6 : 0 秒

而且我正在寻找一种解决方案(我对 Libreoffice Basic 不满意)从 B 列中的持续时间中获取秒数。问题出在解析列(这算作文本,并且在数据中对其进行格式化仍然不起作用) )。我不知道如何拆分单元格以获取例如:35*86400+21*3600+56*60for cell A1

我尝试使用 libreoffice 工具进行拆分,但如果我在 A 列中没有天数,它会生成例如 :5(hours)*86400等.. 用于单元格A4

4

2 回答 2

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();
于 2014-09-16T08:47:06.470 回答
0

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

用作 UDF,如:=GETSECONDS(A1)

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

问候

阿克塞尔

于 2014-09-16T18:09:29.850 回答