首页 > 解决方案 > 如何使用分号分隔符将 Excel (xlsm) 保存为 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 中的表中......

提前致谢!

标签: sql-serverexcelpowershellcsvsqlbulkcopy

解决方案


要使用分号而不是逗号作为分隔符保存 CSV,请尝试为方法的参数指定一个$true值:localSaveAs

$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'
)

推荐阅读