Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Сохранение RecordSet в csv или xml - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Сохранение RecordSet в csv или xml (Макросы/Sub)
Сохранение RecordSet в csv или xml
TD_MElec Дата: Понедельник, 21.03.2022, 10:48 | Сообщение № 1
Группа: Пользователи
Ранг: Участник
Сообщений: 73
Репутация: 1 ±
Замечаний: 0% ±

Excel 2019
Доброго дня.

Возникла потребность сохранять выгрузки из sql. Выгрузка содержит более млн строк, поэтому excel не катит. На примете csv (предпочтительней) или xml файлы.
Для сохранения в csv пытался использовать код: [vba]
Код
CSVData = RecordsetToCSV(oRS, True)

    Open "C:\MyFileName.csv" For Binary Access Write As #1
        Put #1, , CSVData
    Close #1

Public Function RecordsetToCSV(oRS, _
        Optional ShowColumnNames As Boolean = True, _
        Optional NULLStr As String = "") As String
    Dim K As Long, RetStr As String
    If ShowColumnNames Then
        For K = 0 To oRS.Fields.Count - 1
            RetStr = RetStr & ",""" & oRS.Fields(K).Name & """"
        Next K
        RetStr = Mid(RetStr, 2) & vbNewLine
    End If
    
    RetStr = RetStr & """" & oRS.GetString(adClipString, -1, """,""", """" & vbNewLine & """", NULLStr)
    RetStr = Left(RetStr, Len(RetStr) - 3)
    
    RecordsetToCSV = RetStr
End Function
[/vba] Но возникает ошибка "Аргументы имеют неверный тип, выходят за пределы допустимого диапазона или вступают в конфликт друг с другом" на строке: [vba]
Код
RetStr = RetStr & """" & oRS.GetString(adClipString, -1, """,""", """" & vbNewLine & """", NULLStr)
[/vba]Да и кажется мне, что этот вариант будет оч долгим, по сравнению со следующим:
Команда: [vba]
Код
myRecordset.Save "C:\yourFile.xml", adPersistXML
[/vba] Отлично, быстро сохраняет в файл, НО потом у меня ни как не получается прочитать этот файл .notepad++ открывает одни кракозябры, перепробовал много разных кодировок, ничего не получается. Пытался подключиться PowerQwery, так же безрезультатно, выдает ошибку.


Сообщение отредактировал TD_MElec - Понедельник, 21.03.2022, 10:54
 
Ответить
СообщениеДоброго дня.

Возникла потребность сохранять выгрузки из sql. Выгрузка содержит более млн строк, поэтому excel не катит. На примете csv (предпочтительней) или xml файлы.
Для сохранения в csv пытался использовать код: [vba]
Код
CSVData = RecordsetToCSV(oRS, True)

    Open "C:\MyFileName.csv" For Binary Access Write As #1
        Put #1, , CSVData
    Close #1

Public Function RecordsetToCSV(oRS, _
        Optional ShowColumnNames As Boolean = True, _
        Optional NULLStr As String = "") As String
    Dim K As Long, RetStr As String
    If ShowColumnNames Then
        For K = 0 To oRS.Fields.Count - 1
            RetStr = RetStr & ",""" & oRS.Fields(K).Name & """"
        Next K
        RetStr = Mid(RetStr, 2) & vbNewLine
    End If
    
    RetStr = RetStr & """" & oRS.GetString(adClipString, -1, """,""", """" & vbNewLine & """", NULLStr)
    RetStr = Left(RetStr, Len(RetStr) - 3)
    
    RecordsetToCSV = RetStr
End Function
[/vba] Но возникает ошибка "Аргументы имеют неверный тип, выходят за пределы допустимого диапазона или вступают в конфликт друг с другом" на строке: [vba]
Код
RetStr = RetStr & """" & oRS.GetString(adClipString, -1, """,""", """" & vbNewLine & """", NULLStr)
[/vba]Да и кажется мне, что этот вариант будет оч долгим, по сравнению со следующим:
Команда: [vba]
Код
myRecordset.Save "C:\yourFile.xml", adPersistXML
[/vba] Отлично, быстро сохраняет в файл, НО потом у меня ни как не получается прочитать этот файл .notepad++ открывает одни кракозябры, перепробовал много разных кодировок, ничего не получается. Пытался подключиться PowerQwery, так же безрезультатно, выдает ошибку.

Автор - TD_MElec
Дата добавления - 21.03.2022 в 10:48
TD_MElec Дата: Понедельник, 21.03.2022, 20:24 | Сообщение № 2
Группа: Пользователи
Ранг: Участник
Сообщений: 73
Репутация: 1 ±
Замечаний: 0% ±

Excel 2019
Удалил все параметры из .GetString и дело пошло. В CSV сохраняет. НО большой массив данных, как раз на этапе .GetString зависает на очень продолжительное время (30+ минут).

Решил вопрос переводом RecordSet в array и от туда уже запись в текстовый файл. Опять таки есть "НО", процедура записи 3,7 млн строк занимает чуть более 4 минут, а процедура сохранения Recordset.Save "C:\yourFile.xml", adPersistXML чуть больше 10 сек. Явное преимущество. Но ни как не удается сделать xml читабельным, перепробовал все параметры .save

Может кто знает как правильно RecordSet сохранять в XML?
 
Ответить
СообщениеУдалил все параметры из .GetString и дело пошло. В CSV сохраняет. НО большой массив данных, как раз на этапе .GetString зависает на очень продолжительное время (30+ минут).

Решил вопрос переводом RecordSet в array и от туда уже запись в текстовый файл. Опять таки есть "НО", процедура записи 3,7 млн строк занимает чуть более 4 минут, а процедура сохранения Recordset.Save "C:\yourFile.xml", adPersistXML чуть больше 10 сек. Явное преимущество. Но ни как не удается сделать xml читабельным, перепробовал все параметры .save

Может кто знает как правильно RecordSet сохранять в XML?

Автор - TD_MElec
Дата добавления - 21.03.2022 в 20:24
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Сохранение RecordSet в csv или xml (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!