Импорт файла CSV Powershell с помощью TransferText - PullRequest
0 голосов
/ 23 марта 2020

Я пытаюсь загрузить файл 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 )
}

Ошибка:

Поле '' didn ' не существует в таблице назначения «избирателей». В C: \ Users \ Nobody \ Desktop \ ms-access.ps1: 24 char: 5 + $ DoCmd.TransferText ($ TransferType, $ SpecificationName, $ TableNam ... + ~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~ + CategoryInfo: OperationStopped: (:) [], COMException + FullyQualifiedErrorId: System.Runtime.InteropServices.COMException

1 Ответ

0 голосов
/ 24 марта 2020

Найдя ответ с помощью комментария, владелец удалил его, поэтому, к сожалению, я не могу дать оценку. HTMLTableName должно быть [Type]::Missing, а не null

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,
        [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, [Type]::Missing, $CodePage )
}

$dbPath = "C:\Users\Nobody\Desktop\Mexico_1.accdb"
$access = New-Object -ComObject Access.Application
$access.OpenCurrentDatabase($dbPath)
$access.Visible = $true

# import csv file into a new table
Import-MsAccessCsv -Access $access -Path "D:\Data\Mexico-1.csv" -TableName 'voters' -HasFieldNames

# close access
$access.Quit()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...