在使用PowerShell时停止数字转换为Excel中的文本

我正在使用powershell从CSV复制数据到Excel工作表(在现有的电子表格)。 在另一个工作表中有一个数据透视表,它引用了我从CSV复制的数据。 唯一的问题是,CSV文件中的数值正在被转换为Excel中的文本,该文本将计算的字段丢在数据透视表中。

电子表格中的字段被定义为数字(我已经确认了这一点)

CSV文件中的值正在从SQL查询中导出,并用引号引起来。 我把它加载到Excel表格之前删除了引号,它没有任何区别。 作为一次性任务开始的结果是多次使用,我想自动化这个。

这里的任何build议将是非常有益的

这里的stream量是

  1. Powershell脚本启动一个SQL脚本,并将输出复制到一个CSV文件,其中包含数字数据的4列
  2. 将CSV文件中的数据复制到包含2个工作表的现有电子表格中的工作表中
  3. 第二个工作表包含引用第一个工作表中的数据的数据透视表。

与Excel导入CSV的方式一样,这对Powershell不是问题。

你有没有考虑做一个macros,导入(和格式化)的数据到Excel表格,而不是做一个CSV? 也许有Powershell代码将数据写入特定的格式(甚至CSV)文件,然后让Excel工作表中的macros读取该文件,并将单元格从文本转换为数字,因为它将数据放在每个单元格中。

另一个更好的select是让Powershell直接将数据导出到Excel电子表格中,绕过整个CSV步骤; Powershell将实际单元格设置为正确的types(数字),因为它使用COM对象导出数据。 Excel必须安装在您运行脚本的计算机上才能正常工作。

一个代码片断它让你开始可能看起来像这样:

 $xl=New-Object -ComObject Excel.Application $wb=$xl.WorkBooks.Open('C:\Temp\MyData.xls') $ws=$wb.WorkSheets.item(1) $xl.Visible=$false # Don't make excel pop up before the person running the script. $ws.Cells.Item(1,1)=1 $wb.SaveAs('c:\temp\MyData.xls') $xl.Quit() Remove-Variable xl 

通过这个代码的步骤:

  1. 创build连接对象
  2. 打开实际的工作簿
  3. 指定您在工作簿中需要的表格
  4. 确保它是可见的(个人select)
  5. 设置有问题的单元格的值,在本例中为第1行第1列
  6. 保存退出
  7. closures连接到工作簿(closuresComObject)

如果你想更奇特:[int32] $ a = 255

 $xl=New-Object -ComObject Excel.Application $wb=$xl.WorkBooks.Open('C:\Temp\Servers.xls') $ws=$wb.WorkSheets.item(1) $xl.Visible=$false # don't show excel poped up to the user. # set the cell to be the value we desire $ws.Cells.Item(2,3)=$a # is it a string? if ($a -is [string]) { # it's a string $ws.Cells.Item(2,3).NumberFormat = "@" } else { # yes, numeric..-- set to a number $ws.Cells.Item(2,3).numberformat = "0" # or could be "0.00", etc.. } # save and close the sheet.. $wb.SaveAs('c:\temp\Servers1.xls') $xl.Quit() 

如果这回答你的问题,请标记“已回答”。