Экспорт нескольких листов в .csv

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

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

Shamji
Сообщения: 8
Зарегистрирован: 03 окт 2009, 17:47

Нужно одним нажатием кнопки из 5 листов Excel, сделать 5 .csv(c именами страниц).Помогите, как это организовывать на Visual Basic ?
Teslenko_EA
Сообщения: 526
Зарегистрирован: 04 фев 2007, 18:37
Откуда: Сургут
Контактная информация:

и снова здравствуйте Shamji.
требуется уточнение:
лист Excel имеет 256 колонок и 65536 строк, все они должны попасть в файл CSV?
пять листов - любые, первые пять или с заданным именем или номером?
Евгений.
Shamji
Сообщения: 8
Зарегистрирован: 03 окт 2009, 17:47

Спасибо за предупреждение.
Если быть точным то экспорт из Excel с 5 листами(a,ws,wc,ms,mc) в 1 файл .csv
В каждом листе выбирать все колонки кроме последней, и все строки с информацией, кроме первой.
Очень надеюсь на Вашу помощь, Уважаемые Знатоки VB.
Teslenko_EA
Сообщения: 526
Зарегистрирован: 04 фев 2007, 18:37
Откуда: Сургут
Контактная информация:

Здравствуйте Shamji.
сначала Вы хотели "сделать 5" теперь "в 1 файл .csv", надо быстрее ответить пока ещё задача не сильно усложнилась. :)
подобный код поможет Вам в её решении

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

Sub toSVC()
Const sLst = "a^ws^wc^ms^mc" 'допустииые имена листов
Dim oS As Worksheet, i&, j%, g&, q%
For Each oS In Worksheets
    If InStr(1, sLst, oS.Name) > 0 Then
        i = oS.UsedRange.Rows.Count
        j = oS.UsedRange.Columns.Count - 1
        s = s + oS.Name + vbCrLf
        If i > 1 Then
            For g = 2 To i
                For q = 1 To j
                    s = s + oS.Cells(g, q).Text + ";"
                Next
                s = s + vbCrLf
            Next
        End If
    End If
Next
If Len(s) > 0 Then
    Open "C:\1файл.csv" For Output As 1
    Print #1, s
    Close 1#
End If
End Sub
Евгений.
Shamji
Сообщения: 8
Зарегистрирован: 03 окт 2009, 17:47

Спасибо за код, я создал пустой файл в дериктории с: , вставил код в MVB и запустил, 1 ядро - полная загрузки, и ничего не происходит. исходный файл - http://d1232682.std90.hosting.ua/images ... g_csv.xlsm
Teslenko_EA
Сообщения: 526
Зарегистрирован: 04 фев 2007, 18:37
Откуда: Сургут
Контактная информация:

и снова здравствуйте Shamji.
присутствие проблем :( , если компутер жужит - ядро загружено, о выключении безопасности VBA речь не пойдет, возможно если ОС Windows Vista она не даёт создать файл в корне системного диска, других причин я не вижу, т.к. присланный Вами файл создал у меня на диске С: CSV.
процесс (жужание) проходил очень(!) долго слишком много пустых строк, "вычекнув" пустые строки из обработки выполнение прошло быстрее, но это перебор ячеек, и он не может выполняться быстро по определению.
код не обрабатывающий пустые строки:

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

Sub toSVC()
Const sLst = "a^ws^wc^ms^mc" 'допустииые имена листов
Dim oS As Worksheet, i&, j%, g&, q%, o, sR As Range
For Each oS In Worksheets
Set o = Application.WorksheetFunction
    If InStr(1, sLst, oS.Name) > 0 Then
        i = oS.UsedRange.Rows.Count
        j = oS.UsedRange.Columns.Count - 1
        s = s + oS.Name + vbCrLf
        sN = oS.Name
        If i > 1 Then
            For g = 2 To i
                Set sR = Range(Cells(g, 1), Cells(g, j))
                If o.CountA(sR) = 0 Then
                Else
                    For q = 1 To j
                        s = s + oS.Cells(g, q).Text + ";"
                    Next
                    s = s + vbCrLf
                End If
            Next
        End If
    End If
Next
If Len(s) > 0 Then
    Open "D:\cat.csv" For Output As 1
    Print #1, s
    Close 1#
End If
End Sub
Евгений.
Shamji
Сообщения: 8
Зарегистрирован: 03 окт 2009, 17:47

Проверил, Все класс хоть и процессор грузит. только один нюанс: 1 строка CSV пустая , кроме первой ячейки(там "a"), по всей видимости вставляет название листа. А хотелось бы, хоть это и не указанно в первом посте (предпологалось это делать руками) вставить в первую строку csv - шапку(1 строку) из любого листа excel.
Shamji
Сообщения: 8
Зарегистрирован: 03 окт 2009, 17:47

Прошло больше месяца, никто не знает как доделать программу ?
Teslenko_EA
Сообщения: 526
Зарегистрирован: 04 фев 2007, 18:37
Откуда: Сургут
Контактная информация:

Здравствуйте Shamji.
"Прошло больше месяца..." а Вам никак не удалось сообразить, что добавить строку заголовка можно добавив в начале кода строку:
s = "Поле1;Поле2;...ПолеN" + vbCrLf
плохо. :(
Евгений.
Shamji
Сообщения: 8
Зарегистрирован: 03 окт 2009, 17:47

спасибо за помощь.

перешел на новый хостинг. необходиммо создавать .csv в кодировке utf-8 вместо windows-1251.

пробовал с использованием пользовательских функций модернизировать скрипт, но результат = 0.

посоветуйте, что нужно изменить в коде чтобы сохраняло .csv в кодировке utf-8
Ответить