【发布时间】:2020-01-02 01:15:52
【问题描述】:
我在 Windows 2012 R2 服务器上使用 powershell 将数据从 Access 表导出到 CSV 文件。我想在不修改 Access 数据库架构且不在 access 数据库中编写任何 VBA 代码的情况下执行此操作。
powershell 脚本归结为如下内容:
$Table = 'tblUsers'
$Filepath = 'C:\tblUsers.csv'
$Acc = New-Object -Com Access.Application
$Acc.OpenCurrentDataBase($DBFilePath)
$Acc.DoCmd.Transfertext(2, [Type]::Missing, $Table, $Filepath, 1)
其中一个表有一列包含数字字段,其中字段大小为双倍,格式为百分比,小数位数设置为 2。该字段包含 100%、50% 和 87.5% 等值.当我运行此命令时,CSV 中 100% 值的输出为,1.00,,而87.5% 的输出为,0.87,。似乎这个过程中的某些东西正在降低这些列的显着精度。
脚本中有没有办法确保我获得数据库中每一列的所有有效数字?还有其他类型的列需要担心吗?
我知道有 2 个解决方案有缺点:
如果可能的话,我想要一个新的答案而不是这两个答案。这两个答案有很大的缺点。
- From this forum thread:更改计算机上的语言设置,使其显示更多(最多 9 位)小数。我不希望整个计算机的十进制设置必须更改,并且我不想只在 9 而不是 2 处设置新的限制 - 如果数据库中的数字在小数点后有 15 个有效数字怎么办?李>
- 使用查询指定数据并将数字转换为字符串。这样做的缺点是需要我检查每列的定义并为每个表编写查询。我要导出 30 多个包含数百列的表,所以这将是太多的工作。
【问题讨论】:
-
在定义具有您提到的确切类型的数字列后,我无法重现。并使用相同的参数导出。 CSV 数据为所有行保留两位小数。请务必在文本编辑器中检查输出(不是可以在打开时应用格式的 Excel)。
-
@Parfait 感谢您为重现该问题所做的工作。我正在 Mac 和 Linux 机器上使用 grep 检查生成的 CSV 文件。你在 Windows 2012 上吗?如果您进入控制面板更改语言设置,使数字有 2 位小数,您仍然会得到输出中的所有数字吗?
-
我不认为这是重复的,因为它是关于 PowerShell 而不是关于 VBA,但也许我只是对 PowerShell 和 VBA 了解不够,不知道可以在 Powershell 中应用相同的技术?
标签: powershell ms-access export-to-csv