Страница 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 ?