gpt4 book ai didi

excel - 使用vba修改csv文件

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

我需要使用 VBA 修改 CSV 文件的帮助。我做了研究并提出了这个解决方案。但是,我无法获得预期的输出。例如,我有一个 CSV 文件:

ProductID,ProductName,SupplierName,CategoryID,Unit,Price
,,,,,
1,Chais,John Ray,1,10 boxes x 20 bags,18.00093483
2,Chang,Michael,1,24 - 12 oz bottles,19.66890343

我想更改 productnamesuppliername 下的所有值。并更改诸如 ProductID 和列名称的组合之类的内容。我的预期输出应如下所示:

    ProductID,ProductName,SupplierName,CategoryID,Unit,Price
,,,,,
1,1 ProductName,1 SupplierName,1,10 boxes x 20 bags,18.00093483
2,2 ProductName,2 SupplierName,1,24 - 12 oz bottles,19.66890343

它可以发生多次并且可以更改列位置。这是我的代码:

Sub test()

Dim FilePath As String, LineFromFile As Variant, LineItems() As String, strFile As Variant
FilePath = "C:\Users\mestrivo\Documents\Files\MyFirstProg\test.csv"
Open FilePath For Input As #1

Do Until EOF(1)
Line Input #1, LineFromFile
LinteItems = Split(LineFromFile, ",")
LineItems(1) = LineItems(0) & " ProductName"
LineItems(2) = LineItems(0) & " SupplierName"
strFile = Join(LineItems, ",")
Loop

Open "C:\Users\mestrivo\Documents\Files\MyFirstProg\test - 2.csv" For Output As #1

Print #1, strFile
Close #1

End Sub

请帮我检查我的代码。我在这部分遇到错误:

Open "C:\Users\mestrivo\Documents\Files\MyFirstProg\test - 2.csv" For Output As #1

它说文件已经打开。

最佳答案

永远不要对文件句柄进行硬编码,它们不是供您获取的,它们是供 VBA 查询可用的内容并给您一个免费的、可用的文件句柄。使用 FreeFile 函数来执行此操作。

Dim fileHandle As Long
fileHandle = FreeFile

然后将所有硬编码的 #1 句柄替换为 #fileHandle

您无法使用同一句柄打开两个不同的文件。您已经打开文件进行输入:

Open FilePath For Input As #1

因此,当您尝试使用相同的句柄进行输出时...

Open "C:\Users\mestrivo\Documents\Files\MyFirstProg\test - 2.csv" For Output As #1

这就是你收到错误的时候;您尚未关闭 #1 句柄,现在您正尝试重用它来打开另一个文件 - 您不能这样做。

您正在处理两个文件,因此要么打开第一个文件,读取它,然后关闭它,然后再打开第二个文件,写入它,然后关闭它 - 或者,您打开两者,并在阅读另一个时写入其中一个,然后关闭两者。

无论哪种方式,您都不应该对文件句柄进行硬编码。使用FreeFile 获取空闲文件句柄。永远。

关于excel - 使用vba修改csv文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58289002/

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