带公式的.csv文件导入

时间:2015-02-13 09:28:16

标签: excel powershell

我使用PowerShell导入了一个逗号分隔的csv文件。 我得到了导入,看起来应该是这样。问题是,单元格包含公式。 喜欢= 20 + 50 + 70。除非我点击输入顶部字段,否则无法计算。 另一个问题是,一些单元包含数字= 50,2 + 70,5。这些细胞excel根本不明白。除非我删除它,或用点(。)替换它,否则它不能对它们进行计算。但这不是一种可能性。 我该怎么解决这个问题? 使用以下命令导入csv文件:

[threading.thread]::CurrentThread.CurrentCulture = 'en-US'
$wbpath=Join-Path "$psscriptroot" 'file.xlsx'
$importcsv=Join-Path "$psscriptroot" 'file.csv'
$xl = New-Object -ComObject Excel.Application
$xl.Visible = $false
$xl.Workbooks.OpenText($importcsv)
$xl.DisplayAlerts = $false
[threading.thread]::CurrentThread.CurrentCulture = 'en-US'
$xl.ActiveWorkbook.SaveAs($wbpath,51)
$xl.Quit()
while([System.Runtime.Interopservices.Marshal]::ReleaseComObject($xl)){'released'}

[threading.thread]::CurrentThread.CurrentCulture = 'en-US'

是必要的,否则我会收到错误,因为我的系统区域设置不是我们。

谢谢。

CSV示例:

name1.name1.name1,"=20","=7,65","=20,01"
name2.name2.name2,"=20+10","=4,96+0,65","=20,01+10"
name3.name3.name3,"=20","=4,96+0,88","=21,01+11"

2 个答案:

答案 0 :(得分:1)

您需要的声音

a)强制工作表进行计算

b)如果要坚持使用en-US语言环境,则需要将这些逗号替换为小数点。这就是GB / US标准,以及Excel如何解释小数。但是,我强烈建议您坚持使用设置数据的语言环境。

(未经测试,因为我目前在Mac上)

[threading.thread]::CurrentThread.CurrentCulture = 'en-US'
$wbpath=Join-Path "$psscriptroot" 'file.xlsx'
$importcsv=Join-Path "$psscriptroot" 'file.csv'
$xl = New-Object -ComObject Excel.Application
$xl.Visible = $false
$wb = $xl.Workbooks.OpenText($importcsv)
$xl.DisplayAlerts = $false
[threading.thread]::CurrentThread.CurrentCulture = 'en-US'
$sh = $wb.Sheets.Item(1)
# loop through the used range and replace any commas with decimals
foreach ($cell in $sh.usedRange)
{
    [string]$formula = $cell.formula
    $formula -replace ',','.'
    $cell.formula = $formula
}
# force the sheet to calculate
$sh.Calculate()
$xl.ActiveWorkbook.SaveAs($wbpath,51)
$xl.Quit()
while([System.Runtime.Interopservices.Marshal]::ReleaseComObject($xl)){'released'}

答案 1 :(得分:0)

与上一个答案一样,您必须考虑语言环境;并非所有.csv文件都基于其编码所在国家/地区设置而具有相同的格式。尽管UTF是标准格式,但在某些方面CSV是“旧格式”,即使它是使用明文传输数据的最轻便,最简单的方法。

山姆已经回答了大多数困难的事情,所以我只添加几件事。如果您要制作一个自动化解决方案并与多个国家/地区合作,则有几种方法可以确定其编码方式。您可以走技术上更熟练的路线,并实现类似于此https://gist.github.com/jpoehls/2406504的自定义功能,或者由于它是CSV,因此可以做出合理的猜测,因为最常见的编码格式使用不同的定界符;我相信您提到的那个使用制表符作为编码。

由于没有提到这些内容,因此我将重点介绍Excel导入中的那些内容。 “数据”选项卡中有一个相当简洁的功能,可让您根据使用的定界符来自定义导入。在第三步中,按“高级”时,它可以告诉它源数据使用的是哪个分隔符(逗号或十进制),选择该选项并按“完成”后,它将把结果转换为您设置的语言环境。用于Excel并正确评估函数。 Example picture因此,工作流程将是打开一本新的Excel书籍,选择“数据”>“来自文本”,然后从那里开始。它将文本从您选择的语言环境(可能是1252)转换为您指定的任何十进制格式。