【发布时间】:2019-07-03 13:23:02
【问题描述】:
我需要使用 VBScript 从 Excel 导出为 CSV。我将 CSV 导入的数据库希望数据用引号引起来。
' Set output type constant
Const xlCSV = 23
Const xlYes = 1
Const xlAscending = 1
Const xlDescending = 2
' Open Excel in background
Set objExcel = CreateObject("Excel.Application")
objExcel.DisplayAlerts = FALSE
' Make Excel object visible
objExcel.visible = TRUE
' Open source file
Set obj2 = objExcel.Workbooks.open("\\ntptc\Public\test\bins\DomesticCollectionItemsV2.csv")
' Set data format
obj2.Worksheets("DomesticCollectionItemsV2").range("D:E").NumberFormat = "0"
obj2.Worksheets("DomesticCollectionItemsV2").range("Q:R").NumberFormat = "dd/mm/yyyy"
obj2.Worksheets("DomesticCollectionItemsV2").range("X:Y").NumberFormat = "dd/mm/yyyy"
'Sort data
Set objWorksheet = obj2.Worksheets(1)
Set objRange = objWorksheet.UsedRange
Set objRange1 = objExcel.Range("N1")
Set objRange2 = objExcel.Range("O1")
objRange.Sort objRange1,xlYes
' Remove duplicates
obj2.Worksheets("DomesticCollectionItemsV2").range("A:EE").RemoveDuplicates Array(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15), xlYes
obj2.Worksheets("DomesticCollectionItemsV2").range("A:EE").RemoveDuplicates Array(12,13,14,15,16,17,18,19,20,21,22,23,24,25), xlYes
' Remove Expired and erroneous data
Dim myRow
For myRow = 5000 To 1 Step -1
If (obj2.Worksheets("DomesticCollectionItemsV2").Cells(myRow, 14).Value = "Expired") Then
obj2.Worksheets("DomesticCollectionItemsV2").Rows(myRow).EntireRow.Delete
End If
If (obj2.Worksheets("DomesticCollectionItemsV2").Cells(myRow, 14).Value = "Quotation") Then
obj2.Worksheets("DomesticCollectionItemsV2").Rows(myRow).EntireRow.Delete
End If
Next
'Sort data
objRange.Sort objRange1, xlAscending, objRange2, , xlAscending, , , xlYes
' Remove Expired and erroneous data
Dim myRow1
For myRow1 = 10000 To 1 Step -1
If (obj2.Worksheets("DomesticCollectionItemsV2").Cells(myRow1, 15).Value = "Assisted Collection Contract") Then
obj2.Worksheets("DomesticCollectionItemsV2").Rows(myRow1).EntireRow.Delete
End If
If (obj2.Worksheets("DomesticCollectionItemsV2").Cells(myRow1, 15).Value = "Clinical Waste Collection Service Contract") Then
obj2.Worksheets("DomesticCollectionItemsV2").Rows(myRow1).EntireRow.Delete
End If
If (obj2.Worksheets("DomesticCollectionItemsV2").Cells(myRow1, 15).Value = "NULL") Then
obj2.Worksheets("DomesticCollectionItemsV2").Rows(myRow1).EntireRow.Delete
End If
Next
' Open template
Set obj1 = objExcel.Workbooks.open("\\ntptc\Public\test\bins\toby\When-is-my-bin-day(new3).xlsx")
' Copy from source file to template
obj2.Worksheets("DomesticCollectionItemsV2").range("A1:AE110000").copy
obj1.Worksheets("DataTransform").range("A:AE").pastespecial
obj1.Worksheets("DataTransform").range("D:E").NumberFormat = "0"
obj1.Worksheets("DataTransform").range("Q:R").NumberFormat = "dd/mm/yyyy"
obj1.Worksheets("DataTransform").range("X:Y").NumberFormat = "dd/mm/yyyy"
' Close Source file
obj2.Close False
' Copy within template
obj1.Worksheets("DataTransform").range("AN:AP").copy
obj1.Worksheets("Export File").range("A:C").PasteSpecial -4163
'obj1.Worksheets("Export File").range("A:A").NumberFormat = "0"
obj1.Worksheets("Export File").range("C:C").NumberFormat = "dd/mm/yyyy"
obj1.Worksheets("DataTransform").range("AR:BB").copy
obj1.Worksheets("Export File").range("D:N").PasteSpecial -4163
' Remove duplicates
obj1.Worksheets("Export File").range("A:N").RemoveDuplicates Array(1,2,3,4,5,6,7,8,9,10,11,12,13,14), xlYes
' Set worksheet to be exported
Set obj3 = obj1.Worksheets("Export File")
' Save output as CSV
obj3.SaveAs "\\ntptc\Public\test\bins\KESCollections.csv", xlCSV
' Close Template
obj1.Close False
' Close Excel
objExcel.Quit
如果我在 Excel 中添加引号或格式化单元格以添加引号,它会在单元格数据的每一侧输出三个引号。
我尝试使用"\0\" 或"\@\" 将列格式化为自定义。我已经尝试在 VBS 中添加引号,但无论我做什么,我仍然在 CSV 中得到太多引号
原始输出
100060018803,Garden Waste Collection Service,09/07/2019
实际输出
"""100060018803""","""Garden Waste Collection Service""","""09/07/2019"""
期望的输出
"100060018803","Garden Waste Collection Service","09/07/2019"
有没有办法让它只用一组引号输出 CSV?
【问题讨论】:
-
那是因为Excel是按照标准的csv格式导出的。它只在需要时添加双引号。你想要的不是标准的csv。