【问题标题】:MS Word 2010: time increment in tableMS Word 2010:表中的时间增量
【发布时间】:2014-01-24 15:07:01
【问题描述】:

我有一个包含大时间表的 Word 文档,其中有 n 行,每行与一天中的一项活动相关。我在表格的一列中为每个活动分配了持续时间 D(以分钟为单位),以及活动开始时间 T,其中 T(N+1) = T(N)+D(N):

Name      | Time  | Duration
Activity1 | 09:00 | 5
Activity2 | 09:05 | 10
Activity3 | 09:15 | ...

我希望时间列是一系列公式,以便在我更改开始时间或持续时间、添加或删除行时正确更新整个表格。

目前我每次都将列表导出到 excel 进行计算,我不想嵌入工作表,因为压力不要从文档创建者那里更改表格。

有没有办法在word中做到这一点?

【问题讨论】:

  • 无法在 excel 中复制表格(风格方面)?
  • 我假设您不允许将 word 文档中的表格与 excel 链接,因为它们与 shown here 是不同的东西
  • 到目前为止,我一直在将表格复制到 excel 并更新列,然后再粘贴回去。但通常,有人会在不改变开始时间的情况下更改持续时间,表格最终会结束不同步,所以我想在文档中放置一些东西来解决这个问题。可悲的是,我无法嵌入,因为文档的创建者希望它保留一个单词表。真的,整个文档应该是一个电子表格。
  • 如果数据是普通的数字数据,你可以在 Word 表格中使用公式......但从那时起,如果没有 VBA 就很难做到
  • 可以使用 Word 公式来处理时间(稍微妥协),但是您需要 Word VBA 或其他自动化来处理行添加,因为必须插入正确的公式每一行,除非您当然可以坚持用户使用某种自动文本或自动更正进行插入,否则用户从未接触过表格布局,等等。

标签: vba ms-word formula word-field


【解决方案1】:

wrt 我对行插入的评论,您可以使用以下域代码来执行此操作。

假设时间在 B 列,初始时间在 B2,持续时间只是 C 列中的分钟数。

然后在 B2 中有以下字段。要设置初始时间,用户必须显示字段并修改 { SET } 字段中的时间。或者您可以使用 ASK 字段。

{ SET s "09:15" }{ SET m { ={ref s \@HH }*60+{ref s \@mm } } }{ SEQ r \r2 \h }{ SET t1 "mod(int((m+SUM(C{ SEQ r \c }:C" }{ SET t2 "))/60),24)*100+mod(m+SUM(C{ SEQ r \c }:C" }{ SET t3 "),60)" }{ref  s }

在 B3 及以下,您需要以下字段:

{ SET c "{ t1 }{ SEQ r \c }{ t2 }{ SEQ r \c }{ t3 }"  }{ SEQ r \h }{ ={ c } \#00:00 }

时间计算是在 c 中建立的,例如在 B5 中,

mod(int(initial_time_in_minutes+SUM(C2:C5))/60),24)*100+mod(initial_time_in_minutes+SUM(C2:C5),60)

所有 {} 都是特殊的字段代码大括号对,您可以使用 ctrl-F9 在 Windows Word 中输入,用户必须选择列并按 F9 才能重新执行字段。如果您愿意,可以消除这些字段中的许多空格。您可能需要避免使用看起来像单元格地址的书签名称(“t1”等)

【讨论】:

  • 这看起来很像我想要的 - 我会努力让它发挥作用!
  • 谢谢!我最终并没有这样做(我将在下面写下我的),但这有很大帮助。作为单词公式的新手,我误读了“所有 {} 都是特殊字段代码大括号对”,并想知道为什么它一直打印出“{”。此外,Alt+F9 对于显示所有公式非常有用。
  • 看起来不错 - 是的,我认为人们在阅读有关 ctrl-F9 的信息时通常会呆住,但我发现除非您在消息中这么说,否则有时甚至以前使用过字段的人最终首先输入键盘字符。
【解决方案2】:

我最终确定了一个类似于上面 bibadia 的解决方案,没有列引用:

表格前的字段是:

设置表格的开始时间

{ set th {9}  }

设置表格的开始分钟

{ set tm {15} }

然后在每次单元格中粘贴以下字段:

打印时间

{ ref th \# 00 }:{ ref tm \# 00 }

从右边的列中获取增量并添加到分钟

{ set tm { = SUM(RIGHT, { ref tm }) } }

从 tm 中删除任何时间并增加时间(这不像 bibadia 那样考虑 24 次翻转)

{ set th { = SUM ({ ref th }, int({ ref tm }/60)) } }

获取剩余分钟数

{ set tm { = mod({ref tm, 60}) }}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多