Powershell脚本如下:
$E = New-Object -ComObject Excel.Application
$E.Visible = $false
$E.DisplayAlerts = $false
$wb = $E.Workbooks.Open($args[0])
$wb_name = fix-wbname($wb.Name)
foreach ($ws in $wb.Worksheets)
{
$n = $wb.Name + "_" + $ws.Name + ".csv"
$n = Join-Path -Path $args[1] -ChildPath $n
$ws.SaveAs($n, 6)
}
它有效,但Excel对文本格式化做了愚蠢的事情。 YYYY-MM-DD格式的日期更改为M / D / YYYY。编号18446744073709500000更改为" 1.84467E + 19"
我有什么方法可以做到这一点并让Excel只导出值,因为它们?
答案 0 :(得分:0)
一般来说,没有。 excel中的日期不会以与您在屏幕上看到的格式相同的格式存储在内部。它们以某种二进制数字格式存储,几乎无疑与Windows内部使用的格式相同。我还没有研究过这个。您将不得不找出转换为csv时发生的默认转换。这可能取决于文化。
可以通过excel内部的设置来控制文化依赖性。如果由Powershell完成对csv的转换,您可以通过指定可选参数来控制文化依赖。
对不起,这太模糊了。