如何将 Excel (xlsm) 保存为带分号分隔符的 CSV 文件?
How to save an Excel (xlsm) as CSV file with semicolon delimiter?
对于一个项目,我试图这样做:
- 使用 powershell,打开一个 excel 文件。 (完成)
- 刷新 table 与网站的数据连接。 (完成)
- 在同一路径中保存刷新 Excel。(完成)
- 将该文件转换为用于加载到 SQL 服务器的 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 服务器中的 table...
提前致谢!
要使用分号而不是逗号作为分隔符保存 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 中解释本地参数的摘录(更多信息 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 服务器(在此示例中,我的 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
您可以调整分隔符并替换它们,我使用“|”一个是因为它很难作为文本的一部分找到。
希望对您有所帮助。
对于一个项目,我试图这样做:
- 使用 powershell,打开一个 excel 文件。 (完成)
- 刷新 table 与网站的数据连接。 (完成)
- 在同一路径中保存刷新 Excel。(完成)
- 将该文件转换为用于加载到 SQL 服务器的 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 服务器中的 table...
提前致谢!
要使用分号而不是逗号作为分隔符保存 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 中解释本地参数的摘录(更多信息 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 服务器(在此示例中,我的 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
您可以调整分隔符并替换它们,我使用“|”一个是因为它很难作为文本的一部分找到。
希望对您有所帮助。