PowerShell 和 CSV:阻止 CSV 将文本数据转换为科学记数法

PowerShell and CSV: Stop CSV from turning text data into Scientific Notation

我有一个 CSV 列,其中一列包含字母数字组合。 我稍后将通过导入数据在 PowerShell 脚本中使用此 csv 文件。

示例:1A01、1C66、1E53。 现在,在输入这​​些值之前,我确保将列格式化为文本。 现在一开始它起作用了。我输入数据,保存。我在 PowerShell 中测试导入它并 所有数据均显示有效,包括 1E53。但是假设我稍后再次编辑文件以添加数据,然后保存并关闭。我重新导入到 PowerShell 中,1E53 以 1.00E+53 的形式出现。我怎样才能永久防止这种情况发生?请注意,该列充满了代码,并且有很多#E##。

您的问题不在于 PowerShell,而在于 Excel。为了演示,取 1E53 并将其输入 Excel,然后将 excel 文件保存为 CSV 文件。您会看到值现在更改为 1.00E+53.

如何解决这个问题?

有几种禁用科学记数法的方法:

https://superuser.com/questions/452832/turn-off-scientific-notation-in-excel https://www.logicbroker.com/excel-scientific-notation-disable-prevent/

我希望其中一些对你有用。

我认为您可以将文件重命名为 .txt 而不是 .csv,excel 可能会以不同的方式对待它。

祝你好运

如评论:

您可能会从文件加载 csv:

$csv = Import-Csv -Path 'X:\original.csv' -UseCulture

下面的代码在 Here-String 中使用了一个虚拟 csv:

$csv = @'
"Column1","Column2","ValueThatMatters"
"Something","SomethingElse","1E53"
"AnotherItem","Whatever","4E12"
'@ | ConvertFrom-Csv

# in order to make Excel see the values as Text and not convert them into scientific numbers
$csv | ForEach-Object {
    # add a TAB character in front of the values in the column
    $_.ValueThatMatters = "`t{0}" -f $_.ValueThatMatters
}
$csv | Export-Csv -Path 'X:\ExcelFriendly.csv' -UseCulture -NoTypeInformation