Excel 使用分号分隔符另存为CSV
我目前正在使用此功能进行保存,但我有一个问题:Excel 使用分号分隔符另存为CSV,excel,csv,locale,vba,Excel,Csv,Locale,Vba,我目前正在使用此功能进行保存,但我有一个问题: Private Sub spara() ActiveWorkbook.SaveAs Filename:="T:\filepath+ ActiveWorkbook.Name", _ FileFormat:=xlCSV, CreateBackup:=False End Sub 它会用,自动保存,但我需要它用保存在其文件中。是否有可能以某种方式改变它的保存方式 我试过在谷歌上搜索这个问题,但是所有关于.csv文件保存的宏都只是如何保存在
Private Sub spara()
ActiveWorkbook.SaveAs Filename:="T:\filepath+ ActiveWorkbook.Name", _
FileFormat:=xlCSV, CreateBackup:=False
End Sub
它会用,
自动保存,但我需要它用保存代码>在其文件中。是否有可能以某种方式改变它的保存方式
我试过在谷歌上搜索这个问题,但是所有关于.csv文件保存的宏都只是如何保存在.csv中以及如何将多张工作表拆分为.csv。您的Excel使用哪种语言?如果您的母语使用“;”作为默认值,则可以传递参数“local:=True”
如果没有,您唯一的选择是在以后搜索和替换…很可能仅使用Excel VBA无法解决此问题。问题是,当Excel另存为…
使用机器区域设置定义列表分隔符值时,Excel VBA总是使用en-US区域设置,因此,它总是使用,
作为列表分隔符
我建议保存CSV,然后使用自定义控制台应用程序/脚本进行后处理。有很多可用的CSV解析器可以读取,-CSV
,然后将其保存为-csv
更改Excel选项(高级,编辑选项)以将十进制分隔符设置为,
(显然是(!)我一直在查找此选项,以帮助解决我遇到的类似问题,
我有一个excel工作表,我将其导出到csv文件,然后在其他地方添加,但需要使用分号而不是逗号来分隔字符,这在我手动导出文件时效果很好,因为我已经更改了以下内容
控制面板>>区域和语言>>附加设置>>列表分隔符
从逗号到分号。
但当我试图通过VBA实现自动化时,它默认返回逗号,
为了解决这个问题,我按照上面Christian Sauer的建议添加了本地参数,然后发现我已经改变了我的区域设置
ActiveWorkbook.SaveAs Filename:="Filename.txt", FileFormat:=xlCSV, CreateBackup:=False, Local:=True
感谢Christian提供的指针。我在关闭工作簿时添加了“SaveChanges:=False”解决了这个问题
With ActiveWorkbook
.SaveAs Filename:="T:\filepath+ ActiveWorkbook.Name", FileFormat:=xlCSV, Local:=True
.Close SaveChanges:=False
End With
适用于对此代码有问题的人
dim wa as Workbook
Workbooks.OpenText FileName:=path2file, _
DataType:=xlDelimited, Semicolon:=True, Local:=True
set wa = ActiveWorkbook
wa.SaveAs FileName:=path2file, FileFormat:=xlCSV, _ ConflictResolution:=xlLocalSessionChanges, Local:=True
wa.Close False
第二行非常重要,如果wa.Close False
不存在,它将请求批准保存,或者如果wa.Close True
它将替换“;”for“,”
在进入本地设置并使用“;”作为列表分隔符之后,VBA仍然使用“,”分隔。将代码修改为上面的代码,就这样完成了
希望这能为这里的一些好答案带来一些启发,但它们对我不起作用,因为我正在尝试创建一个工具,它可以为任何用户在他们自己的计算机上工作,我不想在每个人的PC上都设置这种语言环境。我甚至尝试使用FileSystemObject滚动我自己的CSV导出程序,但是目标路径名在SharePoint上,因此也失败了
然后我偶然发现了一个非常简单的解决方法:创建一个新的工作表,将所有信息连接到一列中,并用分号分隔,例如:
CONCAT('Old WS'!A1,";",'Old WS'!B1,";",'Old WS'!C1,";",'Old WS'!D1,";",'Old WS'!E1)
然后添加如下代码以将其导出:
Call Worksheets("Export WS").Copy
ActiveWorkbook.SaveAs Filename:=CSVname, FileFormat:=xlCSV, CreateBackup:=False
ActiveWorkbook.Close
因为它都在一列中,Excel不会添加自己的分隔符 恐怕不容易。csv定义为带有逗号。而csv解析在完全通用性上是困难的,因为您必须正确处理包含逗号的带引号字符串。如果我是你,我会做的是自己对csv进行后期处理。在最简单的情况下,可以用分号转换输出文件中的每个逗号。在更复杂的情况下(正如我提到的),可以使用正则表达式。或者在vba中构建自己的保护程序。就其名称而言,CVS是逗号分隔的值。您可以使用脚本打开.csv文件,然后将“,”替换为“;”“救命!”芭丝谢芭很不幸,这不是真的。Excel的本地化版本使用“;”作为分隔符。德文版的Excel可以做到这一点,我不知道还有哪些人可以做到这一点。此外,csv还可以代表“字符分隔值”——这使得csv格式非常糟糕。@Christian Sauer知道这一点很有帮助。你认为萨克纳尔·纳姆(saknar namn)会以某种方式欺骗他的优秀员工,让他们认为它的语言环境是德语吗?@芭丝谢芭:不,我认为不是。我寻找了一种简单的方法来实现这一点,因为函数的本地化很烦人,但我没有找到简单的切换。添加local:=True
似乎在我的机器上不起作用(仍然使用,
作为分隔符)。它实际上在瑞典很有效,因此我非常感谢您。当地人:=真的是去戈伊的路,我不知道。现在我知道了。
Call Worksheets("Export WS").Copy
ActiveWorkbook.SaveAs Filename:=CSVname, FileFormat:=xlCSV, CreateBackup:=False
ActiveWorkbook.Close