Страница 1 из 4

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

Добавлено: 18 июл 2008, 10:49
LOKI-85
Доброго времени суток всем!
Почему при ручном выборе сохранения файла в формате "CSV (разделители-запятые)" в качестве разделителей ставятся символы ";" и файл отображается в нужном мне виде при экспорте, а если я автоматически вызываю все те же операции сохранения (которые получила при помощи записи макроса) вместо ";" ставятся "," и файл отображается криво.
Мне необходимо автоматически сохранять в данном формате файл через определенные интервалы времени.Это возможно сделать?
Очень надеюсь на помощь!Заранее благодарна.

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

Добавлено: 18 июл 2008, 11:51
VictorM
Здравствуйте LOKI-85, как-то столкнулся с эти форматом. Вопрос стоял у меня несколько не так, но возможно в ЭТОЙ теме Вы найдете что-то полезное для себя. Может региональные настройки, а может задать принудительно в Вашем макросе нужный разделитель.

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

Добавлено: 18 июл 2008, 14:46
LOKI-85
Большое спасибо, VictorM.
Прочла соответствующую тему.В вашем случае, я так поняла, были неясности с разделителем чисел, у меня проблема с разделителем строк :confused:
Все таки эта загадка не дает мне покоя:почему при ручном сохранении разделители ставятся одни, а при выполнении с помощью кода тех же (!!!) записанных операций максросом Excel cтавит другие раздлители.Чем он руководствуется?
Так и не ясно мне...

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

Добавлено: 18 июл 2008, 15:31
VictorM
Чем он руководствуется?
а Вы все же попробуйте в региональных настройка посмотреть...
может заменить "," на "."
я, к сожалению, не могу смоделировать Вашу ситуацию и проверить

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

Добавлено: 18 июл 2008, 15:54
LOKI-85
VictorM писал(а):а Вы все же попробуйте в региональных настройка посмотреть...
может заменить "," на "."


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

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

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

Добавлено: 18 июл 2008, 19:03
Teslenko_EA
Здравствуйте 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, заменит все "неверные" знаки пунктуации
А разгадывать "проблему" можно будет позже.

Евгений.

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

Добавлено: 18 июл 2008, 19:22
Avsha
когда вы сохраняете руками, excel удосуживается сходить в панель управления и посмотреть в разделе языки и стандарты - разделитель элементов списка ";"

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

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

2)
На отдельном листе сбить значения из нескольких столбцов в один функцией СЦЕПИТЬ, а затем уже произвести экспорт одного значения методом .SaveAs

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

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

Параллельно пытаюсь понять методы, предложенные Avsha.
О результатах сообщу!)

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

Добавлено: 18 июл 2008, 21:49
Teslenko_EA
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 ' закрытие файла
...
Евгений.

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

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