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

Все таки эта загадка не дает мне покоя:почему при ручном сохранении разделители ставятся одни, а при выполнении с помощью кода тех же (!!!) записанных операций максросом Excel cтавит другие раздлители.Чем он руководствуется?
Так и не ясно мне...
- VictorM
- Сообщения: 794
- Зарегистрирован: 23 окт 2006, 01:44
- Откуда: Lugansk, Ukraine
- Контактная информация:
а Вы все же попробуйте в региональных настройка посмотреть...Чем он руководствуется?
может заменить "," на "."
я, к сожалению, не могу смоделировать Вашу ситуацию и проверить
"Дайте людям рыбы, и вы накормите их на весь день;
научите их ловить рыбу - и вы накормите их на всю жизнь".
научите их ловить рыбу - и вы накормите их на всю жизнь".
VictorM писал(а):а Вы все же попробуйте в региональных настройка посмотреть...
может заменить "," на "."
Увы, но проблема у меня не с числами, а со строками...
А как программно задаются разделители CSV-листа?
Пишу:
ChDir "D:\Work"
ActiveWorkbook.SaveAs Filename:= _
"D:\Work\Мой отчет " & Date$ & ".csv ", FileFormat:=xlCSV, _
CreateBackup:=False
Этот текст взят из записи макроса самим Excel.Когда вручную выполняются соответствующий операции, т.е. жмется "сохранить как", далее выбирается формат CSV т.д., то работает все как надо.Но мне необходимо выполнить эти операции с помощью макроса!
Откликнитесь, пожаалуйста.Ситуация зашла в тупик

-
- Сообщения: 526
- Зарегистрирован: 04 фев 2007, 18:37
- Откуда: Сургут
- Контактная информация:
Здравствуйте LOKI-85.
Возможно Вам удастся найти причину "бага", но сейчас предлагаю:
после создания файла, воспользоваться подобной процедурой она с помощью Replace, заменит все "неверные" знаки пунктуации
А разгадывать "проблему" можно будет позже.
Евгений.
Возможно Вам удастся найти причину "бага", но сейчас предлагаю:
после создания файла, воспользоваться подобной процедурой
Код: Выделить всё
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
А разгадывать "проблему" можно будет позже.
Евгений.
когда вы сохраняете руками, excel удосуживается сходить в панель управления и посмотреть в разделе языки и стандарты - разделитель элементов списка ";"
а когда выполняет макросом, наверно - тупо думает, что надо ставить запятую - CSV comma (запятая) separated value
Варианты:
1)
макросом пробежаться по данным листа и выкинуть данные через точку-запятую в текстовый файл средствами VBA (функция Open)
2)
На отдельном листе сбить значения из нескольких столбцов в один функцией СЦЕПИТЬ, а затем уже произвести экспорт одного значения методом .SaveAs
а когда выполняет макросом, наверно - тупо думает, что надо ставить запятую - CSV comma (запятая) separated value
Варианты:
1)
макросом пробежаться по данным листа и выкинуть данные через точку-запятую в текстовый файл средствами VBA (функция Open)
2)
На отдельном листе сбить значения из нескольких столбцов в один функцией СЦЕПИТЬ, а затем уже произвести экспорт одного значения методом .SaveAs
Спасибо, Teslenko_EA и Avsha!
НАчала с первого предложения. Мне не понятны последние 3 строки функции:
i = FreeFile
Open sFile For Output As #i
Print #i, s: Close #i
На команде "Open" вылетает с ошибкой Run-70 "Permission denied" ..Что не так, скажите, пожалуйста..
Параллельно пытаюсь понять методы, предложенные Avsha.
О результатах сообщу!)
НАчала с первого предложения. Мне не понятны последние 3 строки функции:
i = FreeFile
Open sFile For Output As #i
Print #i, s: Close #i
На команде "Open" вылетает с ошибкой Run-70 "Permission denied" ..Что не так, скажите, пожалуйста..

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

Макрос у меня помимо сохранения в формате также вызывает стороннее приложение и загрузку туда сохраненного CSV-файла.
Спасибо, Евгений!