【问题标题】:Rounding number from XML to Excel从 XML 到 Excel 的舍入数
【发布时间】:2016-01-30 04:00:00
【问题描述】:

我正在从 XML 中读取一些值:

<DocumentSetNumber>20151027301060001</DocumentSetNumber>

$DSN = $xml.metaBI.DocumentSetNumber

然后使用 PowerShell 写入 Excel:

$ExcelWorkSheet.Cells.Item($Row,1).Value2 = $DSN 

但在 Excel 中我得到这个数字:2.0151E+16

如果我更改 Excel 格式,我可以得到:20151027301060000

这不是同一个数字,我需要得到完全相同的数字。

我尝试使用 Excel 格式并在变量上使用 Tostring(),但没有运气。

我还可以尝试什么?

PS。如果我手动复制并粘贴此值,它仅适用于我使用

匹配目标格式

Excel 中的选项。

如何从 PowerShell 设置此选项?

【问题讨论】:

    标签: xml excel powershell rounding excel.application


    【解决方案1】:

    您必须将这个长 DSN 作为字符串放入单元格中。 Excel 有一个15 digit precision 并将任何超过 15 位的数字四舍五入到最近的占位符。

    鉴于您的代码,似乎在 $DSN 前面加上一个单引号(例如 ' 或 ASCII 039)作为 Range.PrefixCharacter property 就足够了。或者,您可以将接收单元格的数字格式更改为 Text,但我认为强制前缀字符是最好的。由于单引号(又名 tick)在 PowerShell 中用作引用运算符,因此我们需要将其作为 [char]39 引入。

    $tic = [char]39
    $DSN = $xml.metaBI.DocumentSetNumber
    $ExcelWorkSheet.Cells.Item($Row,1).Value2 = $tic + $DSN
    # write-host $tic$dsn <~~ this outputs correctly but apparently not correct for XL cell value. see comments.
    

    这应该将20151027301060001 更改为'20151027301060001,Excel 将接受它作为字符串文本,而不会尝试将其强制转换为数字。

    【讨论】:

    • 感谢您澄清实际有效的方法。我没有设置完整的 XL 测试台,而是依赖 write-host $tic$dsn,它似乎发送了正确的连接字符串。我会根据你的经验调整我上面的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多