sql-server - 如何使用分号分隔符将 Excel (xlsm) 保存为 CSV 文件?

标签 sql-server excel powershell csv sqlbulkcopy

对于一个项目,我试图这样做:

  • 使用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,请尝试指定 $true local 的值SaveAs 的参数方法:

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

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

    这是 MSDN 中解释本地参数的摘录(更多信息 here):

    Local

    Type: System.Object

    true saves files against the language of Excel (including control panel settings); false (default) saves files against the language of 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'
    )
    

    关于sql-server - 如何使用分号分隔符将 Excel (xlsm) 保存为 CSV 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50016195/

    相关文章:

    excel - 将数据框从 pandas 导出到 excel 时丢失数据

    python - 时间为00 :00时Pandas读取excel返回类型对象

    python - Django:openpyxl 将工作簿保存为附件

    xml - Powershell HasChildNodes是否适用于文本?

    sql-server - SQL Server 索引 View 与 Oracle 物化 View

    sql - 如果没有找到匹配项,简单的 SQL 查询将返回 null

    sql - 将所有与不存在的并入并插入

    sql-server - SQL Server 中用于别名的方括号和单引号有什么区别?

    powershell - 选择并遍历属性

    git - Powershell的Git命令别名管道