我尝试使用Excel作为ComObject将XLS文件转换为CSV,同时保持相关数据的精确度。我已经尝试将风格改为" @"或"文字"或类似的格式化每个单元格,但这仍然导致有限的精度,似乎并不适用于整个文件。
例如:我的源xls文档中的单元格D4的值为 0.5124839309949 ,但由于Excel的数字格式,它被视为 0.51 。 手动将此更改为文本格式解决了这个问题,但我需要Powershell为我运行此功能,然后导出(以CSV格式)相同的 0.5124839309949 而不是0 *。* 51 。
与此同时,我担心这将如何处理日期单元格。按照目前的情况,我的数组中的每一行都有一个日期,Excel将其读作DD / MM / YYYY,除非将其设置为CSV,这将成为Excel序列日期编号(对于我将其批量加载到SQL Server中的最终目标没用。)< / p>
我知道Excel中的File-SaveAs练习产生了一个CSV,但是由于业务需求,我需要通过Powershell运行它,并且运行这个转换&#39;手动锻炼也会导致精度限制,所以我正在寻找一种方法。
如果您能够修改以下Powershell脚本,我将不胜感激! 谢谢你的帮助。
#
# Set the current folder path to temp
Set-Location \\xyz01\data\shared\data_warehouse\ntrs\temp
#Backup files
Copy-Item -path *.* -recurse \\xyz01\data\Shared\data_warehouse\test\performance
# Set variables
$file = "ABC Trust*"
$infile = "\\xyz01\data\shared\data_warehouse\ntrs\temp\"+$file
$outfile = "\\xyz01\data\shared\data_warehouse\test\temp\test_performance.csv"
# Set com object to Excel
$Excel = New-Object -ComObject Excel.Application
# Open the excel file and save as CSV
$workbook=$Excel.Workbooks.Open($infile)
$worksheet=$workbook.Worksheets.Item(1)
$worksheet.range.("D") = $worksheet.range.("D").Text
$workbook.SaveAs($outfile,6) # 6 is the code for .CSV
$workbook.Close($false)
$Excel.Quit()
以下可能有帮助吗?我试图在这里复制所有建议,但没有用。
答案 0 :(得分:0)
尝试更改此行......
$worksheet.range.("D") = $worksheet.range.("D").Text
到此......
$worksheet.range.("D") = $worksheet.range.("D").Value