繁体   English   中英

导入的 .csv 文件和公式

[英]Imported .csv file with formulas

我已经使用 powershell 导入了一个逗号分隔的 csv 文件。 我被导入并看起来应该如此。 问题是,单元格包含公式。 喜欢 =20+50+70。 除非我单击顶部字段,否则不会计算它。 另一个问题是,某些单元格包含诸如 =50,2+70,5 之类的数字。 这些单元格excel根本看不懂。 它无法计算它们,除非我删除 ,或者用点 (.) 替换它。 但这不是一种可能。 我该如何解决这个问题? csv 文件是使用 powershell 导入的:

[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"

听起来你需要

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'}

与之前的答案一样,您必须考虑语言环境; 并非所有 .csv 文件都具有相同的格式,具体取决于它们编码所在的国家/地区。虽然 UTF 是标准格式,但在某些方面 CSV 是“传统格式”,即使它是使用纯文本传输数据的最轻量级、最简单的方法。

Sam 已经回答了大部分困难的问题,所以我将添加一些内容。 如果您正在制定自动化解决方案并与多个国家/地区合作,您可以通过多种方式确定其编码方式。 您可以走技术更熟练的路线并实现与此类似的自定义功能https://gist.github.com/jpoehls/2406504或者,因为它是 CSV,您可以进行合理的猜测,因为最常见的编码格式使用不同的分隔符; 我相信您提到的那个使用制表符作为编码。

我将重点介绍 Excel 导入中的那些,因为没有提到那些。 数据选项卡中有一个相当简洁的功能,允许您根据导入的分隔符自定义导入。 在第三步中,当您按 Advanced 时,它允许您告诉它源数据使用的是哪个分隔符(逗号或小数),一旦您选择它并按 Finish,它就会将结果转换为您的语言环境设置的任何内容用于 Excel 并正确评估函数。 示例图片因此,此工作流将打开一个新的 Excel 工作簿,选择数据 > 从文本并从那里继续。 它会将您选择的语言环境中的文本(在您的情况下可能是 1252)转换为您指定的任何十进制格式。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM