Автоматическое сохранение отчета в CSV формате

Весь MS Office, программирование на Visual Basic for Applications и MS VB

Модератор: Naeel Maqsudov

LOKI-85
Сообщения: 120
Зарегистрирован: 15 янв 2007, 17:34

Доброго времени суток всем!
Почему при ручном выборе сохранения файла в формате "CSV (разделители-запятые)" в качестве разделителей ставятся символы ";" и файл отображается в нужном мне виде при экспорте, а если я автоматически вызываю все те же операции сохранения (которые получила при помощи записи макроса) вместо ";" ставятся "," и файл отображается криво.
Мне необходимо автоматически сохранять в данном формате файл через определенные интервалы времени.Это возможно сделать?
Очень надеюсь на помощь!Заранее благодарна.
Аватара пользователя
VictorM
Сообщения: 794
Зарегистрирован: 23 окт 2006, 01:44
Откуда: Lugansk, Ukraine
Контактная информация:

Здравствуйте LOKI-85, как-то столкнулся с эти форматом. Вопрос стоял у меня несколько не так, но возможно в ЭТОЙ теме Вы найдете что-то полезное для себя. Может региональные настройки, а может задать принудительно в Вашем макросе нужный разделитель.
"Дайте людям рыбы, и вы накормите их на весь день;
научите их ловить рыбу - и вы накормите их на всю жизнь".
LOKI-85
Сообщения: 120
Зарегистрирован: 15 янв 2007, 17:34

Большое спасибо, VictorM.
Прочла соответствующую тему.В вашем случае, я так поняла, были неясности с разделителем чисел, у меня проблема с разделителем строк :confused:
Все таки эта загадка не дает мне покоя:почему при ручном сохранении разделители ставятся одни, а при выполнении с помощью кода тех же (!!!) записанных операций максросом Excel cтавит другие раздлители.Чем он руководствуется?
Так и не ясно мне...
Аватара пользователя
VictorM
Сообщения: 794
Зарегистрирован: 23 окт 2006, 01:44
Откуда: Lugansk, Ukraine
Контактная информация:

Чем он руководствуется?
а Вы все же попробуйте в региональных настройка посмотреть...
может заменить "," на "."
я, к сожалению, не могу смоделировать Вашу ситуацию и проверить
"Дайте людям рыбы, и вы накормите их на весь день;
научите их ловить рыбу - и вы накормите их на всю жизнь".
LOKI-85
Сообщения: 120
Зарегистрирован: 15 янв 2007, 17:34

VictorM писал(а):а Вы все же попробуйте в региональных настройка посмотреть...
может заменить "," на "."


Увы, но проблема у меня не с числами, а со строками...
А как программно задаются разделители CSV-листа?
Пишу:
ChDir "D:\Work"
ActiveWorkbook.SaveAs Filename:= _
"D:\Work\Мой отчет " & Date$ & ".csv ", FileFormat:=xlCSV, _
CreateBackup:=False

Этот текст взят из записи макроса самим Excel.Когда вручную выполняются соответствующий операции, т.е. жмется "сохранить как", далее выбирается формат CSV т.д., то работает все как надо.Но мне необходимо выполнить эти операции с помощью макроса!
Откликнитесь, пожаалуйста.Ситуация зашла в тупик :(
Teslenko_EA
Сообщения: 526
Зарегистрирован: 04 фев 2007, 18:37
Откуда: Сургут
Контактная информация:

Здравствуйте LOKI-85.

Возможно Вам удастся найти причину "бага", но сейчас предлагаю:
после создания файла, воспользоваться подобной процедурой

Код: Выделить всё

Sub toRealSCV()
convertSCV "c:\Книга1.csv"
End Sub
Function convertSCV(sFile$)
Dim fso, ts, s$, i%
Set fso = CreateObject("Scripting.FileSystemObject")
Set ts = fso.OpenTextFile(sFile, 1)
s = ts.ReadAll:     s = Replace(s, ",", ";") ' замена знаков пунктуации
ts.Close:           Set ts = Nothing
i = FreeFile
Open sFile For Output As #i
Print #i, s:        Close #i
End Function
она с помощью Replace, заменит все "неверные" знаки пунктуации
А разгадывать "проблему" можно будет позже.

Евгений.
Avsha
Сообщения: 665
Зарегистрирован: 08 сен 2005, 13:47
Откуда: KZ

когда вы сохраняете руками, excel удосуживается сходить в панель управления и посмотреть в разделе языки и стандарты - разделитель элементов списка ";"

а когда выполняет макросом, наверно - тупо думает, что надо ставить запятую - CSV comma (запятая) separated value

Варианты:
1)
макросом пробежаться по данным листа и выкинуть данные через точку-запятую в текстовый файл средствами VBA (функция Open)

2)
На отдельном листе сбить значения из нескольких столбцов в один функцией СЦЕПИТЬ, а затем уже произвести экспорт одного значения методом .SaveAs
LOKI-85
Сообщения: 120
Зарегистрирован: 15 янв 2007, 17:34

Спасибо, Teslenko_EA и Avsha!
НАчала с первого предложения. Мне не понятны последние 3 строки функции:
i = FreeFile
Open sFile For Output As #i
Print #i, s: Close #i
На команде "Open" вылетает с ошибкой Run-70 "Permission denied" ..Что не так, скажите, пожалуйста.. :confused:

Параллельно пытаюсь понять методы, предложенные Avsha.
О результатах сообщу!)
Teslenko_EA
Сообщения: 526
Зарегистрирован: 04 фев 2007, 18:37
Откуда: Сургут
Контактная информация:

LOKI-85, до открытия файла для записи все протекает нормально, очевидно файл не был закрыт до начала выполнения процедуры

Код: Выделить всё

...
convertSCV "c:\Книга1.csv" ' вызов процедуры "обработки" файла, он должен быть закрыт !!!
...
Function convertSCV(sFile$)
Dim fso, ts, s$, i%
Set fso = CreateObject("Scripting.FileSystemObject")
Set ts = fso.OpenTextFile(sFile, 1) '
s = ts.ReadAll 'чтение файла целиком    
s = Replace(s, ",", ";") ' замена знаков пунктуации
ts.Close: закрытие файла

Set ts = Nothing ' очищение переменной
i = FreeFile ' номер свободного дескриптора
Open sFile For Output As #i ' открытие файла для записи
Print #i, s ' запись значения переменной "s" в открытый файл под номером "i"
Close #i ' закрытие файла
...
Евгений.
LOKI-85
Сообщения: 120
Зарегистрирован: 15 янв 2007, 17:34

Вот незадача, но процедуру сохранения в CSV и обработки я выполняю непосредственно в макросе, который вызывается из моей книги. Т.е. вот это:
convertSCV "c:\Книга1.csv" ' вызов процедуры "обработки" файла, он должен быть закрыт !!!
не выполнимо для меня, или я в что то не въезжаю? :)
Макрос у меня помимо сохранения в формате также вызывает стороннее приложение и загрузку туда сохраненного CSV-файла.
Спасибо, Евгений!
Ответить