Как сохранить CSV файл, разделенный точкой с запятой, используя VBA?
Я копирую данные в электронную таблицу, использую VBA для ее форматирования, затем сохраняю этот лист в файл CSV.
Я использую следующий код:
ws.SaveAs Filename:=filestr, Fileformat:=xlCSV
ws - это лист, который я сохранил.
Это дает мне CSV файл с разделителями-запятыми.
Я хотел бы сохранить этот лист в файл, разделенный точкой с запятой.
Я нашел следующее:
- Выберите "Пуск"> "Настройки"> "Язык и региональные стандарты".
- Нажмите на кнопку Настроить
- Рядом с разделителем списка введите точку с запятой (;)
Я следовал вышеописанной процедуре и изменил свой код на:
ws.SaveAs Filename:=filestr, Fileformat:=xlCSV, Local:=True
Я все еще получаю CSV файл с разделителями-запятыми в качестве вывода.
Я использую Excel 2003, и моя ОС - Windows XP.
Ответы
Ответ 1
Я только что проверил это, потому что имел ту же проблему. В этом случае имя файла не имеет функциональности.
Это то, что сработало для меня:
With ActiveWorkbook
.SaveAs Filename:="My File.csv", FileFormat:=xlCSV, Local:=True
.Close False
End With
В региональных настройках → ; < - как разделитель списка. Также важно не сохранять изменения при закрытии → с помощью Close, вы должны использовать False
.
Ответ 2
Не нужно объявлять все эти переменные, просто добавьте local: = true в конце вашего метода SaveAs, например:
ActiveWorkbook.SaveAs Filename:="C:/Path/TryMe.csv", FileFormat:=xlCSV, Local:=True
Ответ 3
Просто используйте этот код:
ActiveWorkbook.SaveAs "My File.csv", xlCSV, Local: = True
(не использовать: Filename: =)
Ответ 4
Чтобы использовать vbs script следующую конструкцию succeded:
.SaveAs Filename, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1
где аргументы:
Object Filename,
Object FileFormat,
Object Password,
Object WriteResPassword,
Object ReadOnlyRecommended,
Object CreateBackup,
XlSaveAsAccessMode AccessMode,
Object ConflictResolution,
Object AddToMru,
Object TextCodepage,
Object TextVisualLayout,
Object Local
SourceLink: https://msdn.microsoft.com/ru-ru/library/microsoft.office.tools.excel.workbook.saveas.aspx
Последний "1" в "SaveAs" равен Local = True
Кроме того, точка с запятой должна быть определена как разделитель списка в региональных настройках ОС (см. ответы выше)
Ответ 5
Использовать xlSCVMSDOS instread xlCSV
ActiveWorkbook.SaveAs Filename:="my File.csv", FileFormat:= xlCSVMSDOS, Local:=True
У меня сработало
Ответ 6
Я столкнулся с той же проблемой и, подумав о попытке изменить "разделитель строк" в региональных настройках с использованием кода VBA и вызовов ядра, решил, что это будет намного сложнее, поэтому вместо этого я нашел несколько примеров использования Scripting.FileSystemObject. вместо этого, чтобы удовлетворить мои потребности.
Следующий код возьмет существующий CSV файл и заменит все запятые символом тильды "~".
Private Sub commaReplace()
Dim objFSO
Dim filePath
Dim migratorFileName
Dim strFullPath1
Dim strFullPath2
Const ForReading = 1
'define a TextStream object
Dim objTS
Dim strContents As String
'note, my code actually uses the below commented out filepath
'as the location of the workbook can be arbitrary, e.g.
'Worksheets("FilePath").[A2:A2].Value is determined when workbook
'is opened
'filePath = Worksheets("FilePath").[A2:A2].Value
filePath = "C:\Temp\"
'our original file that we've exported as csv file in another section of code
migratorFileName = "MigratorInput.csv"
strFullPath1 = filePath + migratorFileName
'the path and file name we want to save to, tilde separated vs. comma
migratorFileName = "MigratorInput.tilde.csv"
strFullPath2 = filePath + migratorFileName
'read everything from the csv file, replacing comma with tilde
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objTS = objFSO.OpenTextFile(strFullPath1, ForReading)
strContents = objTS.ReadAll
strContents = Replace(strContents, ",", "~")
objTS.Close
'write everything out to another file, note, this could just overwrite
'the original file if you pass the optional overwrite flag
Set objTS = objFSO.CreateTextFile(strFullPath2)
objTS.Write strContents
objTS.Close
End Sub
Затем вы можете просто вызвать подпрограмму commaReplace из подпрограммы, которая создает файл csv.
Надеюсь, это поможет кому-то!