【发布时间】:2020-03-23 13:13:33
【问题描述】:
我尝试将 CSV 文件加载到 Access 数据库中,ANSI 文件一切正常,但 UTF-8 出现错误。 适用于 ANSI 文件的代码:
function Import-MsAccessCsv
{
param (
[Parameter(Mandatory = $True)] [__ComObject] $Access,
[Parameter(Mandatory = $True)] [string] $Path,
[Parameter(Mandatory = $True)] [string] $TableName,
[Parameter(Mandatory = $False)] [switch] $HasFieldNames,
[Parameter(Mandatory = $False)] [string] $SpecificationName=$null
)
$transferType = 0
$DoCmd = $Access.DoCmd
$DoCmd.TransferText( $transferType, $SpecificationName, $TableName, $Path, [bool]$HasFieldNames )
}
尝试将代码页添加到 TransferText:
function Import-MsAccessCsv
{
param (
[Parameter(Mandatory = $True)] [__ComObject] $Access,
[Parameter(Mandatory = $True)] [string] $Path,
[Parameter(Mandatory = $True)] [string] $TableName,
[Parameter(Mandatory = $False)] [switch] $HasFieldNames,
[Parameter(Mandatory = $False)] [string] $HTMLTableName=$null,
[Parameter(Mandatory = $False)] [int] $CodePage=65001,
[Parameter(Mandatory = $False)] [string] $SpecificationName=$null
)
$transferType = 0
$DoCmd = $Access.DoCmd
$DoCmd.TransferText( $transferType, $SpecificationName, $TableName, $Path, [bool]$HasFieldNames, $HTMLTableName, $CodePage )
}
错误:
目标表“选民”中不存在字段“”。在 C:\Users\Nobody\Desktop\ms-access.ps1:24 char:5 + $DoCmd.TransferText($transferType, $SpecificationName, $TableNam ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~ + CategoryInfo : OperationStopped: (:) [], COMException + FullyQualifiedErrorId : System.Runtime.InteropServices.COMException
【问题讨论】:
-
您的 CSV 文件是用 UTF-8 with BOM 编码,还是 UTF-8 不带 BOM 编码?这有什么不同吗? (错误表明该文件在内容之前有一个 ByteOrderMark,而 Access 对此感到窒息)
-
是的,带有 BOM 的 UTF-8
-
无论如何,找到了将过程
https://www.eileenslounge.com/viewtopic.php?f=29&t=25643保存在Access db模板中的方法
标签: powershell ms-access