gpt4 book ai didi

excel - 如何去掉 CSV 文件中字符串末尾不需要的逗号

转载 作者:行者123 更新时间:2023-12-04 15:03:59 24 4
gpt4 key购买 nike

我编写了以下代码,目的是将两个范围保存到一个 CSV 文件中:

Sub Export_range_to_CSV()
Dim myCSVFileName As String
Dim myWB As Workbook
Dim tempWB As Workbook
Dim range1 As Range
Dim range2 As Range
Set range1 = Sheets("sheet1").Range("G2:G4")
Set range2 = Sheets("sheet1").Range("G5:H53")

Application.DisplayAlerts = False
On Error GoTo err

Set myWB = ThisWorkbook
myCSVFileName = "filepath" & "\" & "name" & VBA.Format(VBA.Now, "yyyymmdd_hhmm") & ".csv"

range1.Copy

Set tempWB = Application.Workbooks.Add(1)
With tempWB
.Sheets(1).Range("A1").PasteSpecial xlPasteValues
range2.Copy
.Sheets(1).Range("A4").PasteSpecial xlPasteValues
.SaveAs Filename:=myCSVFileName, FileFormat:=xlCSV, CreateBackup:=False
.Close
End With
err:
Application.DisplayAlerts = True
End Sub

上面的代码完成了工作,但对于 range1,当保存为 CSV 时,它在字符串末尾有逗号。我需要删除这些以便下游的工作正常工作。如何去掉 range1 末尾的逗号?

这是保存为 CSV 文件后的样子:

范围1

- # X=Y, <- need to remove these commas
- # Z=U,
- # M=Q,

范围2

- datetime,quantity
- 2021-03-05 23:00:00+00:00,17
- 2021-03-05 23:30:00+00:00,17
- 2021-03-06 00:00:00+00:00,17
- 2021-03-06 00:30:00+00:00,17

我认为问题出在 range1 只有一个列,一旦 range2 开始发挥作用,它就假设 range1 应该是两列列也是如此。

最佳答案

最后一列是通过检查两个范围的最后一列来计算的。取高者。让我解释一下。

假设数据到第 J 列

Set range1 = Sheets("sheet1").Range("G2:G4")
Set range2 = Sheets("sheet1").Range("G5:J53")

那么在这个场景中,会加3个逗号。同样,如果 range2 中的最后一列是 K,而 range1 中的最后一列是 H,那么第一个范围将添加 3 个逗号。

当你反转范围时也是如此

Set range1 = Sheets("sheet1").Range("G5:J53")
Set range2 = Sheets("sheet1").Range("G2:G4")

现在第二个范围将有额外的逗号

解决方案

读取数组中的数据,然后删除最后一个逗号。所以一旦你的 Csv 文件被写入,将文件传递给这个过程,它会处理剩下的事情

下面的代码一次性读取数组中的 csv,然后检查每一行右边是否有 ,。如果有,则将其删除。最后,它删除旧的 csv 并通过将数组一次性放入文本文件来写入新文件。我已经对代码进行了注释,因此您理解它应该没有问题。但如果你这样做了,那就直接问吧。

'~~> Example usage
Sub Sample()
CleanCsv "C:\Users\Siddharth Rout\Desktop\aaa.txt"
End Sub

'~~> Cleans csv
Sub CleanCsv(fl As String)
Dim MyData As String, strData() As String
Dim i As Long

'~~> Read the file in one go into an array
Open fl For Binary As #1
MyData = Space$(LOF(1))
Get #1, , MyData
Close #1
strData() = Split(MyData, vbCrLf)

'~~> Check for "," and remove
For i = LBound(strData) To UBound(strData)
If Right(strData(i), 1) = "," Then
Do While Right(strData(i), 1) = ","
strData(i) = Left(strData(i), Len(strData(i)) - 1)
Loop
End If
Next i

'~~> Kill old file
Kill fl

'~~> Output the array in one go into a text file
Dim ff As Long
ff = FreeFile
Open fl For Binary As #ff

Put #ff, , Join(strData, vbCrLf)

Close #ff
End Sub

关于excel - 如何去掉 CSV 文件中字符串末尾不需要的逗号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66485748/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com