Число в этой ячейке отформатировано как текст или ему предшествует апостроф - Powershell - PullRequest
0 голосов
/ 09 июля 2020

У меня есть n приложение, созданное на Powershell, которое считывает результат из базы данных и помещает данные в таблицу Excel. Когда числа целые, у меня нет никаких проблем, но когда я пытаюсь намотать десятичное число, появляется следующая ошибка: «Число в этой ячейке отформатировано как текст или ему предшествует апостроф».

Пробовал следующее после вставки данных:

$range1 = "F2:G20"
$range2 = "K2:L20"
$WorkSheet.Columns.item('F').NumberFormat = "#.##0,00"
$WorkSheet.Columns.item('G').NumberFormat = "#.##0,00"

$range = $WorkSheet.Range($range1).Copy()
$x = $WorkSheet.Range($range2).Select()
$WorkSheet.UsedRange.PasteSpecial(-4163,-4142) 

Но безуспешно ... Есть другой способ? Я хочу, чтобы эти 2 столбца F и G были отформатированы как Number ....

Я тоже пробовал:

$WorkSheet.Columns.item('F').NumberFormat = "#.##0,00"
$WorkSheet.Columns.item('G').NumberFormat = "#.##0,00"
$Tr = $WorkSheet.Range('K2','L20')
$WorkSheet.Range('F2','G20').Copy()
$Tr.Select()
$Tr.PasteSpecial(-4163) 

Значения все еще вставляются как текст, а не как десятичное число ...

Очень важно: я пытаюсь вставить значения в таблицу Excel.

1 Ответ

0 голосов
/ 10 июля 2020

Хорошо, спустя слишком много времени я нашел решение, лучше назовите его workround:

  1. В своей книге Excel создайте таблицу с тем же именем, что и ваш столбец SQL table, затем вставьте несколько фиктивных значений вручную.

  2. Получите информацию о ваших данных из БД следующим образом:

    $ dt1 = SQLCommand -File_Path $ QueryReplacedFullPath -Server " tnsdw "-Name" TMS_SalesDW "-Out $ dt_table1 = $ dt1.Tables [0] $ WorkSheet = $ Workbook.worksheets | where-object {$ _. Name -eq $ SheetName} $ WorkSheet.Activate ()

  3. Удалить фиктивные данные, вставленные вручную перед следующим кодом:

    $ StartRow = 2 $ FinalRow = 200 $ null = $ WorkSheet.Range ("A $ ($ StartRow): A $ ($ FinalRow)") $ WorkSheet.usedrange.offset ($ StartRow, 0) .specialcells (12) .Entirerow .Delete ()

  4. Вставьте данные в таблицу Excel с помощью этой команды:

    for ([Int] $ m = 0; $ m -lt $ dt_table1. Rows.Count; $ m ++) {для ([Int] $ r = 0; $ r -lt $ dt_table1.Columns.Count; $ r ++) {$ incolumn = $ r + 1; $ inrow = $ inheaderlenght + 2 + $ m; if ($ incolumn -gt 4) {$ Workbook.ActiveSheet.Cells.Item ($ inrow, $ incolumn) = [System.Convert] :: ToDecimal ($ dt_table1.Rows [$ m] .ItemArray [$ r])} else {$ Workbook.ActiveSheet.Cells.Item ($ inrow, $ incolumn) = $ dt_table1.Rows [$ m] .ItemArray [$ r] .ToString ()}}}

Обратите внимание, что я конвертирую значения в десятичные только в тех столбцах, которые я хочу быть десятичными.

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