簡體   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