簡體   English   中英

如何使用分號分隔符將Excel(xlsm)保存為CSV文件?

[英]How to save an Excel (xlsm) as CSV file with semicolon delimiter?

對於一個項目,我試圖這樣做:

  • 使用powershell,打開一個excel文件。 (完成)
  • 通過與網站的數據連接來刷新表。 (完成)
  • 將刷新的Excel保存在同一路徑中。(完成)
  • 將該文件轉換為用於加載到SQL Server的CSV文件(史詩失敗)

Powershell用逗號分隔符而不是分號保存文件:

#Refresh Excel
$app = New-Object -comobject Excel.Application
$app.Visible = $false
$wb = $app.Workbooks.Open("C:\test\test.xlsm")
$wb.Name
$wb.RefreshAll()
$wb.Save()
$wb.Close()
$app.Quit()

#Export To CSV
Function ExportWSToCSV ($excelFileName, $csvLoc)
{
    $excelFile = "C:\test\" + $excelFileName + ".xlsm"
    $E = New-Object -ComObject Excel.Application
    $E.Visible = $false
    $E.DisplayAlerts = $false
    $wb = $E.Workbooks.Open($excelFile)
    foreach ($ws in $wb.Worksheets)
    {
        $n = $excelFileName + "_" + $ws.Name
        write-host $n
        write-host ($csvLoc + $n + ".csv")
        $ws.SaveAs($csvLoc + $n + ".csv",6)
    }
    $E.Quit()
}

ExportWSToCSV -excelFileName "test" -csvLoc "C:\test\new\"

我還需要如何將數據批量插入SQL Server的表中...

提前致謝!

要使用分號而不是逗號來保存CSV,請嘗試為SaveAs方法指定local參數的$true值:

$ws.SaveAs($csvLoc + $n + ".csv",6, 0, 0, 0, 0, 0, 0, 0, $true)

代替:

$ws.SaveAs($csvLoc + $n + ".csv",6)

這是MSDN的摘錄,解釋了局部參數( 此處有更多信息):

本地

類型:System.Object

true根據Excel語言(包括控制面板設置)保存文件; false默認值 )使用Visual Basic for Applications(VBA)的語言保存文件。

要將CSV文件批量插入SQL Server(在此示例中,我的CSV文件只有2列):

IF  OBJECT_ID('dbo.IMPORT_FROM_CSV') IS NOT NULL
DROP TABLE dbo.IMPORT_FROM_CSV 

CREATE TABLE dbo.IMPORT_FROM_CSV (
  [COL_1]            [VARCHAR] (max) NULL,
  [COL_2]            [VARCHAR] (max) NULL
)

BULK INSERT dbo.IMPORT_FROM_CSV
FROM 'C:\test\new\test_Sheet1.csv'
WITH (
 FIRSTROW = 2,
 FIELDTERMINATOR = ';',
 ROWTERMINATOR = '\n'
)

當我遇到分隔符問題時,通常只在代碼中添加兩行

(Get-Content -Path "C:\test\new\test.csv") | % {$_ -replace ';' , '|'}|
Out-File -FilePath "C:\test\new\test.csv" -Encoding UTF8

您可以調整隔板並更換隔板,我使用'|' 一個是因為很難將其作為文本的一部分來查找。

希望這對您有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM