CSV в Excel без потери специальных символов - PullRequest
0 голосов
/ 04 октября 2019

Я использую приведенный ниже код, он работает, как и ожидалось, но проблема в том, что если в результатах запроса SQL есть специальные символы, такие как «öäõü», они будут некорректно отображаться в Excel.

Для CSV -Encoding UTF8 поможет, но для Excel я попытался Google, но, кажется, нет простого решения, чтобы это исправить.

$Server = "server"
$Database = "db"
$Query = "SELECT * FROM mytable"
$FilePath = "C:\OutputFile.csv"

Invoke-Sqlcmd -Query $Query -Database $Database -ServerInstance $Server |
    Export-Csv $FilePath -NoTypeInformation -Encoding UTF8

$inputCSV = "C:\OutputFile.csv"
$outputXLSX = "C:\OutputFile.xlsx"

$excel = New-Object -ComObject Excel.Application 
$workbook = $excel.Workbooks.Add(1)
$worksheet = $workbook.Worksheets.Item(1)

### Build the QueryTables.Add command
### QueryTables does the same as when clicking "Data » From Text" in Excel
$TxtConnector = ("TEXT;" + $inputCSV)
$Connector = $worksheet.QueryTables.Add($TxtConnector, $worksheet.Range("A1"))
$query = $worksheet.QueryTables.Item($Connector.Name)

### Set the delimiter (, or ;) according to your regional settings
$query.TextFileOtherDelimiter = $Excel.Application.International(3)

### Set the format to delimited and text for every column
### A trick to create an array of 2s is used with the preceding comma
$query.TextFileParseType  = 1
$query.TextFileColumnDataTypes = ,2 * $worksheet.Cells.Columns.Count
$query.AdjustColumnWidth = 1

### Execute & delete the import query
$query.Refresh()
$query.Delete()

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