我有一个在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)
字符串
但是没有成功.
我也试过:
$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表中。
2条答案
按热度按时间dwthyt8l1#
好吧,经过太多的时间,我找到了一个解决方案,最好称之为工作:
1.在Excel工作簿中创建一个与SQL表的列同名的表,然后手动插入一些虚拟值。
1.从数据库中获取数据信息的方式如下:
$dt1 = SQLCommand -File_Path $QueryReplacedFullPath -服务器“tnsdw”-名称“TMS_SalesDW”-输出$dt_table1 = $dt1.Tables[0] $WorkSheet = $Workbook. xml| where-object {$_.Name -eq $SheetName} $WorkSheet.Activate()
1.删除在下一个代码之前手动插入的虚拟数据:
$StartRow = 2 $FinalRow = 200 $null = $WorkSheet.Range(“A$($StartRow):A$($FinalRow)”)$WorkSheet.usedrange.offset($StartRow,0).specialcells(12).重新排序.删除()
1.使用以下命令在Excel表格中插入数据:
为([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]::ToDecorder($dt_table1.xml [$m].ItemArray[$r])} else { $Workbook.ActiveSheet.Cells.Item($inrow,$incolumn)=$dt_table1.xml [$m].ItemArray[$r].ToString()} }
请注意,我只在我希望为decimal的列中将值转换为decimal。
zlwx9yxi2#
您正在将格式设置应用于源列范围,而不是目标列范围,由于您只复制值而不是格式(
.PasteSpecial -4163
),因此在您未指定所需格式的情况下,将采用目标格式。如果希望在目标中使用相同的格式设置,则必须为列K2、L20指定该格式设置,或应用.PasteSpecial xlPasteValuesAndNumberFormats