2013-10-09 2 views
7

Я в настоящее время использовать эту функцию для сохранения, но у меня есть проблема с этим:Сохранить как CSV с разделителем запятой

Private Sub spara() 
    ActiveWorkbook.SaveAs Filename:="T:\filepath+ ActiveWorkbook.Name", _ 
    FileFormat:=xlCSV, CreateBackup:=False 
End Sub 

Он автоматически сохраняет с ,, но мне нужно, чтобы сохранить с ; в файле , Можно ли изменить способ его сохранения?

Я пробовал поиск по этой проблеме, но все макросы, касающиеся сохранения .csv-файлов, - это как сохранить в .csv и как разбить несколько листов на .csv.

+0

Нелегко я боюсь. Csv определяется как запятая.И синтаксический анализ csv в полной общности затруднен, так как вам нужно правильно обрабатывать цитируемые строки, содержащие запятые. Что бы я сделал, если бы я был вами, это пост-процесс сам csv. В простейшем случае вам может понадобиться конвертировать каждую запятую в выходной файл с точкой с запятой. В более сложных случаях (как я уже упоминал) вы можете использовать регулярное выражение. Или создайте собственную заставку в vba. – Bathsheba

+0

Как видно из названия CVS - значения Comma Seperatd. Вы можете использовать скрипт для открытия файла .csv, а затем заменить ',' на ';' и сохранить. – Thanushan

+1

@ Батшеба К сожалению, это не так. Локализованные версии Excel используют «;» как Сеператор. Немедленная версия Excel делает это, я не знаю, что другие делают это. Кроме того, csv также может обозначать «символьные отдельные значения», что делает csv ужасно нарушенным форматом. –

ответ

10

На каком языке используется ваш Excel? Если ваш родной язык использует «;» по умолчанию, вы можете передать параметр «локальный: = True»

ActiveWorkbook.SaveAs Filename:="C:\Temp\Fredi.csv", FileFormat:=xlCSV, CreateBackup:=False, local:=True 

Если нет, то ваш единственный выбор является поиск и замена после ...

+0

Добавление 'local: = True', похоже, не работает на моей машине (по-прежнему использует', 'as separator). –

+0

он действительно работает здесь, в Швеции, поэтому я благодарю вас за это. local: = True был способ пойти –

+0

@saknarnamn Мне интересно, в чем ваши настройки находятся в разделе «Параметры Excel», «Дополнительно», «Редактирование» и «Использовать системные разделители». – pnuts

1

Это вполне возможно, эта проблема не решается с помощью Excel VBA только. Проблема заключается в том, что Excel Save As... использует идентификатор разделителя списка машин, Excel VBA всегда использует локальный язык в США, поэтому он всегда использует , в качестве разделителя списков.

Я бы рекомендовал сохранить CSV, а затем использовать пользовательское консольное приложение/скрипт для постобработки. Существует множество парсеров CSV, которые могут читать ,-csv, а затем сохранить его как ;-csv.

+0

+1 для рекомендации. (Я не полностью согласен с содержанием первой части!) – pnuts

2

Изменить параметры Excel (Advanced, опции редактирования), чтобы установить Десятичный разделитель , (очевидно (!))

+1

Я этого не знал. Теперь я это делаю. – Jeeped

+0

@Jeeped. '(Очевидно (!))' Был саркастическим комментарием о том, насколько менее вопиющим это! – pnuts

0

Я искал это, чтобы помочь решить подобную проблему у меня был, я имел первенствовать лист, который я экспортирую в файл csv, это затем загружается в другое место, но для использования разметки символов требуется использовать точки с запятой, а не запятые, это отлично работает, когда я вручную экспортировал файл, поскольку я уже изменил следующее: Панель управления >> Регион и язык >> дополнительные настройки >> Разделитель списков от запятой до точки с запятой. Но когда я попытался автоматизировать с помощью VBA, он по умолчанию вернулся в запятую, , чтобы исправить. Я добавил локальный папаметр, как это предложил Кристиан Зауэр, который затем подхватывает тот факт, что я изменил свои региональные настройки.

ActiveWorkbook.SaveAs Filename:="Filename.txt", FileFormat:=xlCSV, CreateBackup:=False, Local:=True 

Благодаря христианскому указателю.

0

Я решил, что добавление «SaveChanges: = False» при закрытии Рабочего

With ActiveWorkbook 
    .SaveAs Filename:="T:\filepath+ ActiveWorkbook.Name", FileFormat:=xlCSV, Local:=True 
    .Close SaveChanges:=False 
End With 
0

для людей, имеющих проблемы с этим кодом

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 заменит ";" для ",".

После входа в локальные настройки и создания ";" разделитель списка, VBA все еще разделял «,». Изменен код выше, и это было сделано.

Надеюсь, что это бросит некоторый свет для некоторых

Смежные вопросы