我最近在Word表格上学习了公式,它虽然不像Excel那样通用,但它可以用于我的大型数据集。到目前为止我唯一的问题是格式化。
我想用科学记数法格式化。我没有运气就尝试了Excel中的格式:
有什么想法吗?
答案 0 :(得分:1)
Word的字段代码语言没有格式说明符,所以你必须采取另一种方法,例如
(1)可能是你最好的选择,特别是如果计算很复杂,因为与Excel相比,Word表公式真的有限
(2)意味着你失去了Word的域代码所带来的好处。
(3)很笨重,但我认为可以做到。但是,最大的问题是,与Excel不同,Word不区分单元格的值和单元格的格式化值。例如,假设一个单元格计算要显示的中间结果1234.5678,并且您将结果显示为2DP。然后你必须在单元格中进行计算,这将导致1.23E + 3。但是,当您现在在另一个计算中引用该单元格时,其值将为1230,而不是1234.5678。因此,如果您需要这样做,我认为您必须使用一个单元格用于实际的中间结果,而另一个单元格用于显示。此外,这里描述的方法不能正确处理可变精度。
(4)非常笨重。它仅适用于Windows版本的Word。它实际上只适用于格式化表外的值,因为DATABASE字段不能在Word表中使用。这意味着您必须创建一个外部Access / Jet .mdb并将其放在Word可以打开它的地方。如果您想分发您的解决方案,那可能很困难。然后使用Jet SQL format()函数格式化每个数字。每次要格式化数字时,Word都会执行查询。
(3)的方法最初是由macropod创建的 - 你可以在" Word Field Maths"上找到他的教程。 here(您可能需要注册才能获得)。
我实际上没有教程的当前版本,但我看到的版本只处理从1.E-9到大约1.0E + 10的正数(和0)。它有这样的字段:
{QUOTE
{SET a {SourceVal}}
{SET
b{=9-(a<10^9)-(a<10^8)-(a<10^7)-(a<10^6)-(a<10^5)-(a<10^4)-(a<10^3)-(a<10^2)
-(a<10^1)-(a<10^0)-(a<10^-1)-(a<10^-2)-(a<10^-3)-(a<10^-4)-(a<10^-5)-(a<10^-
6)-(a<10^-7)-(a<10^-8)}}
{SET c{=int(a/10^b)+mod(a,10^b)/10^b}}
{c \# 0.00}E{b \# +00;-00}}
所有{}都是可以使用 ctrl - F9 在Windows Word中插入的特殊字段代码括号对。对于表字段,您要做的是将整个字段集复制到表格单元格中,并将{SourceVal}字段替换为您在单元格中实际需要的{=}字段。
但是,我认为我引用的公式版本存在一些问题,例如
我认为问题(1)是因为当Word计算10 ^ 6(例如)时,结果不完全是1000000.(您可以使用{= 10 ^ 6-1000000#0。}来检查
最后,macropod显然有理由使用int和mod函数计算c的值。我不知道为什么,但是对你来说可能很明显,在这种情况下你可能需要修改我给出的版本。
虽然不太清楚,但我认为以下编码可能会解决所有这些问题,但你应该检查一下。
首先,在文档的开头(或者可能在标题中),您需要输入以下字段并执行它们:
{ SET p_1 100000000000000000 }{ SET p_2 10000000000000000 }{ SET p_3 1000000000000000 }
{ SET p_4 100000000000000 }{ SET p_5 10000000000000 }{ SET p_6 1000000000000 }
{ SET p_7 100000000000 }{ SET p_8 10000000000 }{ SET p_9 1000000000 }{ SET p_10 100000000 }
{ SET p_11 10000000 }{ SET p_12 1000000 }{ SET p_13 100000 }{ SET p_14 10000 }
{ SET p_15 1000 }{ SET p_16 100 }{ SET p_17 10 }{ SET p_18 1 }{ SET p_19 .1 }
{ SET p_20 .01 }{ SET p_21 .001 }{ SET p_22 .0001 }{ SET p_23 .00001 }{ SET p_24 .000001 }
{ SET p_25 .0000001 }{ SET p_26 .00000001 }{ SET p_27 .000000001 }{ SET p_28 .0000000001 }
{ SET p_29 .00000000001 }{ SET p_30 .000000000001 }{ SET p_31 .0000000000001 }
{ SET p_32 .00000000000001 }{ SET p_33 .000000000000001 }{ SET p_34 .0000000000000001 }
通过使用这些,我们避免计算10的幂。
然后使用以下字段执行格式:
{ QUOTE
{ SET w { SourceVal } }
{ SET x { =abs(w) }
{ SET y { =1+(x<p_1)+(x<p_2)+(x<p_3)+(x<p_4)+(x<p_5)+(x<p_6)+(x<p_7)+(x<p_8)+(x<p_9)+(x<p_10)+(x<p_11)+(x<p_12)+(x<p_13)+(x<p_14)+(x<p_15)+(x<p_16)+(x<p_17)+(x<p_18)+(x<p_19)+(x<p_20)+(x<p_21)+(x<p_22)+(x<p_23)+(x<p_24)+(x<p_25)+(x<p_26)+(x<p_27)+(x<p_28)+(x<p_29)+(x<p_30)+(x<p_31) +(x<p_32) +(x<p_33) +(x<p_34) }
{ IF w = 35 "0.00E+00"
"{ =w \#;- }{ SET z "p_{ y }" }{ IF { =x/{ z } \#0.00 } = 10
"{ SET y { =y-1 } }{ SET z "p_{ y }" }"
}{ =x/{ z } \#0.00 }{ =18-w \#'+'00;00 }" } }
(我可能已经错过了一个大括号或#34;标记出该批次)
你可以把所有这些都放在一行上。如果您愿意,也可以留出很多空间:
{QUOTE
{SET w {SourceVal}}
{SET x {=abs(w)}
{SET y {=1+(x<p_1)+(x<p_2)+(x<p_3)+(x<p_4)+(x<p_5)+(x<p_6)+(x<p_7)+(x<p_8)+(x<p_9)+(x<p_10)+(x<p_11)+(x<p_12)+(x<p_13)+(x<p_14)+(x<p_15)+(x<p_16)+(x<p_17)+(x<p_18)+(x<p_19)+(x<p_20)+(x<p_21)+(x<p_22)+(x<p_23)+(x<p_24)+(x<p_25)+(x<p_26)+(x<p_27)+(x<p_28)+(x<p_29)+(x<p_30)+(x<p_31)+(x<p_32)+(x<p_33)+(x<p_34)}
{IF w = 35 "0.00E+00"
"{=w \#;-}{SET z "p_{y}"}{IF {=x/{z} \#0.00} = 10
"{SET y {=y-1}}{SET z "p_{y}"}"}{=x/{z} \#0.00}{=18-w \#'+'00;00}"}}
显然,您可以通过一些小的修改来修改精度。
最后,如果您想尝试使用DATABASE字段方法,您需要将DATABASE字段放在表格之外,然后将其结果复制回表格中的相应单元格。例如假设您希望E5包含E2 * E3 * E4的格式化结果。然后,一种方法是将表格加入书签(让我们调用书签&#34; mytable&#34;)。在表格之外,您可以引用单元格,但只能将它们的引用括在一个合适的函数中。
在这种情况下,您可以
{ =PRODUCT(mytable E2:E4) }
或
{ =PRODUCT(mytable E2,mytable E3, mytable E4) }
但是如果你需要E2 +(E3 / E4),你可能需要像
这样的东西{ =SUM(mytable E2,{=SUM(mytable E3)}/{=SUM(mytable E4)})}
或者您可以在单元格中进行计算,例如F4,然后使用以下字段代码来使用表外的结果:
{ =SUM(mytable F4) }
对于格式化,我们假设您在c:\ a中有一个名为a.mdb的数据库。然后你可以使用(比方说)
{ SET result { QUOTE { DATABASE \d "c:\\a\\a.mdb" \s "SELECT format({ =SUM(mytable F4) },'Scientific')" } } }
然后在E5中你可以放
{ =result }
您可以修改格式选项 - 例如,请参阅the MS documentation for the format function