Страница 3 из 4
Re: Автоматическое сохранение отчета в CSV формате
Добавлено: 20 июл 2008, 09:21
Teslenko_EA
LOKI-85, если выполнять предложенную мной процедуру с сохранением файла в текстовом формате с разделителем "Tab", это решает проблему 1 на которую указал
Aent. .
Код: Выделить всё
Sub Create_report()
Const sName$ = "C:\Книга", sExt$ = ".csv", sDataFormat$ = "YYYYMMDDhhmm"
Dim sFile$
sFile = sName & Format(Now, sDataFormat) & sExt
Range("A:A,C:C,D :D ,H:H,I:I,J:J").Copy
Workbooks.Add
ActiveSheet.Paste
Application.CutCopyMode = False
ActiveWorkbook.SaveAs Filename:=sFile, FileFormat:=xlText
Application.DisplayAlerts = False
ActiveWindow.Close
Application.DisplayAlerts = True
convertCSV sFile
Workbooks.Open Filename:=sFile
End Sub
Function convertCSV(sFile$)
...
s = Replace(s, Chr(9), Chr(59))
...
End Function
По поводу "Использование FSO несколько избыточно":
FSO я применил для чтения содержимого файла "целиком".
Евгений.
Re: Автоматическое сохранение отчета в CSV формате
Добавлено: 20 июл 2008, 12:51
Aent
FSO я применил для чтения содержимого файла "целиком". Евгений
Код: Выделить всё
..............................
On Error Resume Next
f = FreeFile
Open sFile For Binary As #f
If Err.Number <> 0 Then
'Сигнализируем об ошибке (если надо)
Exit Sub
End If
sВесьФайл = String(LOF(f), Chr(0))
Get #f, , sВесьФайл
Close #f
.......
Re: Автоматическое сохранение отчета в CSV формате
Добавлено: 20 июл 2008, 17:26
Teslenko_EA
To Aent
Здравствуйте Андрей.
Подскажите как исрользовать подобную конструкцию
...Get #f, , sВесьФайл ...
не заполняет переменную содержимым файла и потому я использую FSO.
Евгений.
Re: Автоматическое сохранение отчета в CSV формате
Добавлено: 20 июл 2008, 19:10
Aent
Здравствуйте, Евгений.
не заполняет переменную содержимым файла
Непонятно. Если буфер проинициализирован как в моём примере
то операция Get как раз считывает в буфер весь файл
Вот оттестированный код из реального проекта
Код: Выделить всё
Public Function ReadWholeFile(sFile As String) As String
Dim f As Integer
Dim sВесьФайл As String
On Error Resume Next
f = FreeFile
Open sFile For Binary As #f
If Err.Number <> 0 Then
ReadWholeFile = vbNullString
Exit Function
End If
ReadWholeFile = String(LOF(f), Chr(0))
Get #f, , ReadWholeFile
Close #f
End Function
Re: Автоматическое сохранение отчета в CSV формате
Добавлено: 20 июл 2008, 21:37
Teslenko_EA
Aent, ошибка (если можно так сказать) нашлась.
После того как "sВесьФайл" поменяла тип с Variant на String, удивительно, но она начала получать информацию из файла.

Конечно в конструкции VBS это не применимо, но в VB теперь, я скорее всего, буду обходиться без FSO
Спасибо.
Евгений.
Re: Автоматическое сохранение отчета в CSV формате
Добавлено: 21 июл 2008, 00:40
Aent
Евгений, Variant это специфический по реализации тип данных мало подходящий под буфер чтения.
Обратите внимание что при использовании оператора GET буфер чтения необходимо предварительно инициализироать. Вместо String можно с успехом тспользовать байтовый массив.
Re: Автоматическое сохранение отчета в CSV формате
Добавлено: 21 июл 2008, 11:22
LOKI-85
Уважаемые девелоперы!!!
Благодарю за огромнейшую помощь!!Все помогло, Все работает.
Некоторые вопсроы если позволите.
Метод
Aent вначале не работал, постоянно срабатывал код ошибки <> 0, т.е. программа завершалась на операторе
MsgBox "Ошибка создания файла отчёта", vbCritical, ""
Exit Sub
Закомментировала данный кусок, все заработало, все создается как надо.В чем причина?Любопытно

ТАкже юзаю метод Teslenko_EA
Хотелось бы узнать, по производительности какой метод работает быстрее??)
Всем еще раз огромное спасибо!)Developing.ru - самый лучший форму-сайт

Re: Автоматическое сохранение отчета в CSV формате
Добавлено: 21 июл 2008, 20:09
Aent
Метод Aent вначале не работал
Ну так посмотрите код ошибки (Err.Num) или вообще уберите on error resume next
Ошибка возникает при неверном имени файла. Или если не удалось стереть файл так как он
был не закрыт в другом приложении (kill)
Re: Автоматическое сохранение отчета в CSV формате
Добавлено: 21 апр 2009, 21:25
ermitag
Здравствуйте! В продолжение темы прошу о помощи.
Есть прайс сформированный программой с заголовками и пустыми столбцами. Нужно регулярно получать из него файл csv с разделителями запятыми, удалив пустые с толбцы. Возможно ли автоматизировать этот процесс (при помощи макроса или надстройки)?
В прикрепленном файле этот прайс, помогите пожалуйста!
Большое Вам спасибо за внимание!
Re: Автоматическое сохранение отчета в CSV формате
Добавлено: 03 окт 2009, 18:26
Shamji
Помогите! Нужно одним нажатием кнопки из 5 листов Excel, сделать 5 .csv. Как это организовывать на Visual Basic ?