Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.99/72: Рейтинг темы: голосов - 72, средняя оценка - 4.99
0 / 0 / 0
Регистрация: 15.02.2012
Сообщений: 9
1

Как в коде файлы .xls сохранять в .csv

15.02.2012, 12:28. Просмотров 14575. Ответов 13
Метки нет (Все метки)


у меня их много
я их последовательно открываю, обрабатываю и мне нужно сохранять их в ту же папку под тем же именем, но с расширением .csv
вот так пробовала
Visual Basic
1
2
book.SaveAs FileFormat:=xlCSV 
book.SaveAs (Replace(XLS.Name, ".xls", ".csv", , , vbTextCompare))
все неправильно
а как, не подскажете?

заранее спасибо
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.02.2012, 12:28
Ответы с готовыми решениями:

Как НЕ сохранять изменения в файле *.xls
Здравствуйте, хотелось бы узнать еще одну вещъ. В этом коде: Private Sub Command1_Click() ...

Как объединить 2 файла CSV или XLS в 1
Здравствуйте. Возникла необходимость в автоматическом режиме (с помощью макроса или еще как)...

Как вывести прайслист в формате xls или csv из 1С
День добрый! Подскажите пожалуйста как проще всего вывести прайслист в формате xls или csv из...

Как программно сохранять файл xls в текстовом формате, и всё время в одно и тоже место?
Коллеги, доброго времени суток! Помогите, как програмно сохранять файл *.xls в текстовом формате и...

__________________
Помогаю в написании студенческих работ здесь.
13
1 / 1 / 1
Регистрация: 10.04.2011
Сообщений: 415
15.02.2012, 15:20 2
Не знаю, но что мешает включить макрорекордер, а потом запустить полученный результат в уже написанном цикле?
0
0 / 0 / 0
Регистрация: 15.02.2012
Сообщений: 9
15.02.2012, 18:26  [ТС] 3
не знаю, но, вероятно, объективные обстоятельства
как вы думаете? или вы не умеете этого делать?
0
5 / 5 / 3
Регистрация: 17.10.2007
Сообщений: 1,119
15.02.2012, 20:36 4
Yulia_286

Это записал макрорекордер:

Visual Basic
1
2
3
   ActiveWorkbook.SaveAs Filename:= _
        "C:Book1.csv", FileFormat _
        :=xlCSVMSDOS, CreateBackup:=False
Имейте ввиду, что в csv (comma separated value) формате идут только одностраничные книги. При этом теряется форматирование и еще много чего.

Боясь повториться, спрошу: "что мешает включить макрорекордер, а потом запустить полученный результат в уже написанном цикле?"

vladconn
0
1 / 1 / 1
Регистрация: 10.04.2011
Сообщений: 415
16.02.2012, 13:18 5
Цитата Сообщение от Yulia_286
не знаю, но, вероятно, объективные обстоятельства
как вы думаете? или вы не умеете этого делать?
Меня в МВТУ учили не запоминать все наизусть, а знать, где найти ответ на возникающий вопрос. Да, я ни разу не сохранял кучу файлов экселя в .csv, но я знаю, что такого типа операцию можно записать (Сервис/Макрос/Начать запись...), потом посмотреть результат и спокойно использовать готовый код.
0
1 / 1 / 1
Регистрация: 18.06.2008
Сообщений: 329
16.02.2012, 13:18 6
Читайте вопрос внимательнее, товарищи.
Ей нужно в ту же папку, с тем же именем. Заранее неизвестными.
Т.е. надо подцеплять Application.Path и Application.Name
А макрорекордер этого не напишет.
Типа так надо:
Visual Basic
1
2
3
ActiveWorkbook.SaveAs _
Filename:=ActiveWorkbook.Path & "" & Replace(ActiveWorkbook.Name, ".xls", ".csv", , , vbTextCompare), _
FileFormat:=xlCSV
Но у меня при сохранении из VBA, а не ручками, почему-то сохраняется с разделителями - запятыми, а не точка с запятой.
(
Надо покопаться.
0
1 / 1 / 1
Регистрация: 10.04.2011
Сообщений: 415
16.02.2012, 13:48 7
Цитата Сообщение от Letter_D
Читайте вопрос внимательнее, товарищи.
Сам такой :-)
Я написал: [italic]запустить полученный результат в уже написанном цикле[/italic], то есть девушка уже грамотно выполнила преобразование расширения с .xls в .csv и написала цикл обработки всех файлов.
Кстати, столь грамотное использование VBA и удержало от подробного ответа - имхо тут просто было неверное понимание того, что банальной заменой расширения невозможно заставить эксель сохранять файл в нужном формате, требуется еще указать FileFormat:==xlCSVMSDOS.
0
5 / 5 / 3
Регистрация: 17.10.2007
Сообщений: 1,119
16.02.2012, 14:09 8
Letter_D,

Я не считаю, что обязан читать вопрос еще более внимательно. Это обязанность спрашивающего формулировать вопрос в ясном и простом виде. Когда на попытку выяснить детали для пользы же страждущего начинается заигрывание, а не разъяснение этих деталей, то и нечего ожидать.

Что касается запятых, а не точек с запятыми, так уже объяснил: csv означает comma separated value (значения разделенные запятыми).

Согласен с Johny Walker: спрашивaющий не понимал того, что если блондинку перекрасить, то она от этого не поумнеет.

vladconn


0
1 / 1 / 1
Регистрация: 18.06.2008
Сообщений: 329
16.02.2012, 15:46 9
Ишь какие!
Ругаются. )

А xlCSVMSDOS вообще означает сохранение в dos-формате, очень приятному для юзера.
)

Што такое "csv" - оно понятно (оно и в диалоге сохранения написано, гы), я говорил про другое:
когда ручками, то оно сохраняет через точку с запятой, через такой же записанный макрос - через просто запятые.

Во как. Что-то с нацнастройками или локальной версией, имхо.
0
0 / 0 / 0
Регистрация: 15.02.2012
Сообщений: 9
16.02.2012, 18:02  [ТС] 10
всем привет
не ожидала откликов в таком масштабе))
то, что мне нужно, правда, нельзя подсмотреть в коде, записанном макрорекодером
иначе я бы не спрашивала
но всем спасибо

с запятыми - это для меня не проблема

я сама вечером додумала
могу выложить, посмотрите, что получилось
берет из одной папки, обрабатывает, кладет туда же в формате .csv, все сохраняет и закрывает без всплывающих окон
Visual Basic
1
2
3
4
5
6
7
8
9
Sub DemoOpenTextFile()
For Each XLS In CreateObject("scripting.FileSystemObject").GetFolder("C:    esting").Files
Set book = Application.Workbooks.Open(XLS.Name)
'тут обработка
book.SaveAs FileName:=Replace(XLS.Name, ".xls", ".csv", , , vbTextCompare), FileFormat:=xlCSV, CreateBackup:=False
book.Saved = True
book.Close
Next XLS
End Sub
0
5 / 5 / 3
Регистрация: 17.10.2007
Сообщений: 1,119
16.02.2012, 21:12 11
Yulia_286,

1. У меня нужно вместо XLS.Name XLS.Path, сверьте.
2. Ваш цикл без нужды обрабатывает и новорожденные csv файлы, раз они в той же папке.
3. Вы забыли показать декларации ваших XLS и book.
4 Вы уверены, что не создаете scripting.FileSystemObject столько раз, сколько файлов в папке?

vladconn
0
0 / 0 / 0
Регистрация: 15.02.2012
Сообщений: 9
17.02.2012, 17:29  [ТС] 12
2. я сама боялась, что будет такая бесконечность, но он не берет csv почему-то, к счастью, хотя, по идее, должен?
3. а я не знаю, что такое декларация и для чего это?
4. не уверена, а чем это чревато?

я вообще-то занимаюсь VBA дней 10 всего, поэтому, извините, не знаю многих, очевидных для Вас вещей

буду благодарна за ответы
0
5 / 5 / 3
Регистрация: 17.10.2007
Сообщений: 1,119
17.02.2012, 22:39 13
Yulia_286

2. Ваш цикл рассматривает все файлы, включая и новые. Вставьте If ... = ".xls" ...

3. Декларация (пример):
Dim objExcel as Excel.Application
Dim intIndex as Integer

4. Это чревато поеданием памяти

5. vbBinaryCompare может быть быстрей vbTextCompare. Можете проверить, но это не очень важно.

6. Replace заменит .xls даже если это часть имени, а не расширение, и не возьмет .XLS, .Xls и так далее. Посмотрите методы FileSystemObject для этого. Тоже верно и для ... & "" & ... - что, если "" последняя часть Path? Вдруг это зависит от каких-то локальных настроек? FileSystemObject должен иметь подходящие методы.

Успехов

vladconn
0
0 / 0 / 0
Регистрация: 30.10.2009
Сообщений: 1
10.04.2014, 15:16 14
Если уж выкладываете коды, то делайте это без ошибок!!!
Visual Basic
1
2
3
4
5
6
7
8
9
Sub DemoOpenTextFile()
For Each XLS In CreateObject("scripting.FileSystemObject").GetFolder("C:\esting").Files
Set book = Application.Workbooks.Open(XLS)
'тут обработка
book.SaveAs FileName:=Replace(XLS, ".xls", ".csv", , , vbTextCompare), FileFormat:=xlCSVMSDOS, CreateBackup:=False, Local:=True
book.Saved = True
book.Close (False)
Next XLS
End Sub
Вот так все работает)))

Найдете 10 отличий
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.04.2014, 15:16

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.

Как сохранять сгенерированные файлы
Добрый вечер. Как задать путь для сохранения файла? Я указываю напрямую, так конечно не стоит...

Как сохранять файлы в формате Word?
Подскажите, как сохранять текстовку в DOC (Word-97)? И еще как искать текст по шаблону (пример...

Exel(csv) в xls
Необходимо из таблицы с данными, генерировать xml файл. Все готовые сервисы генерируют только:...

Сохранение xls в csv
Здравствуйте. В общем просто руками сохранять в csv из xls я умею. Хочу узнать реально ли это...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.