Текстовые файлы
Надстройка предназначена для облегчения импорта данных в Excel из текстовых файлов с разделителями (например, из CSV)Пока во вложении - обычный файл Excel с нужными макросами, надстройку выложу позже В надстройке применена функция получения ссылки на заданную пользователем ячейку. Основой для надстройки послужила функция загрузки CSV файла в двумерный массив
|
|||
Функция TextFile2Array предназначена для преобразования файла CSV в двумерный массивОчень часто при работе с текстовыми файлами (и, в частности, с файлами CSV) приходится их загружать на лист Excel, предварительно производя фильтрацию данных в этом файле. Чтобы упростить весь процесс - от выбора файла CSV в диалоговом окне, до разбиения загруженного из файла текста в двумерный массив, и была написана эта функция. В качестве параметров функции можно задать разделители строк и столбцов текстового файла, так что при помощи этой функции можно загружать данные не только из файлов CSV, но и из любых других текстовых файлов, имеющих аналогичную структуру. Пример использования функции для загрузки данных из файла CSV: Sub ЗагрузкаДанныхИзCSV() ' выбор файла по умолчанию предлагается в той же папке, ' где расположен текущий файл Excel CSVarr = TextFile2Array(, ThisWorkbook.Path, , "*.csv") ' проверка результата загрузки данных (выход из макроса, если данные не загружены) If Not IsArray(CSVarr) Then MsgBox "Файл CSV не обработан", vbCritical, "Ошибка": Exit Sub ' ваш код обработки двумерного массива Debug.Print "Загружен двумерный массив размерами " & _ UBound(CSVarr, 1) & " строк на " & UBound(CSVarr, 2) & " столбцов" End Sub
|
|||
Данный макрос предназначен для облегчения анализа длинных текстовых строк.К примеру, в вашем макросе формируется длинная текстовая строка (вы сцепили значения диапазона ячеек, или загрузили текст веб-страницы в текстовую переменную) Чтобы проанализировать текст на этапе отладки программы, вам необходимо изучить структуру этого текста, - а это удобнее делать в текстовом редакторе В этом вам поможет макрос ShowText: Sub ПримерИспользования_ShowText() ' исходный текст любой длины в переменной txt txt = "Некая текстовая строка, которую нам надо сохранить в файл" & vbNewLine & _ "Поскольку текстовая строка весьма длинная, просматривать её в MSGBOX не удобно" & vbNewLine & _ "Потому мы её просмотрим в Блокноте, предварительно создав временный текстовый файл" ' сохраняем строку в файл, и открываем файл в Блокноте ShowText txt End Sub
|
|||
Функции WIF и RIF являются обёртками для WinAPI функций WritePrivateProfileString и GetPrivateProfileString, и предназначены для записи и чтения параметров из файлов конфигурации INI. INI-файлы - это обычные текстовые файлы, предназначенные для хранения настроек программ. Примерный вид структуры INI -файла:
|
|||
Функции ChangeFileCharset и ChangeTextCharset предназначены для изменения кодировки символов в текстовых файлах и строках. Исходную и конечную (желаемую) кодировку можно задать в параметрах вызова функций. Список доступных на вашем компьютере кодировок можно найти в реестре Windows в ветке Среди доступных кодировок есть koi8-r, ascii, utf-7, utf-8, Windows-1250, Windows-1251, Windows-1252, и т.д. и т.п. Определить исходную и конечную кодировку можно, воспользовавшись онлайн-декодером: Sub ПримерИспользования_ChangeTextCharset() ИсходнаяСтрока = "бНОПНЯ" ' вызываем функцию ChangeTextCharset с указанием кодировок ' (меняем кодировку с KOI8-R на Windows-1251) ПерекодированнаяСтрока = ChangeTextCharset(ИсходнаяСтрока, "Windows-1251", "KOI8-R") MsgBox "Результат перекодировки: """ & ПерекодированнаяСтрока & """", _ vbInformation, "Исходная строка: """ & ИсходнаяСтрока & """" End Sub
|
|||
Функция Array2XML формирует из исходной таблицы объект типа DOMDocument, который можно выгрузить в XML-файл одной строкой кода (метод Save) Sub XMLExport() Dim Заголовок As Range, Данные As Range Set Заголовок = Range("a1:f1") Set Данные = Range([A2], Range("A" & Rows.Count).End(xlUp)).Resize(, Заголовок.Columns.Count) arrHeaders = Application.Transpose(Application.Transpose(Заголовок.Value)) ПутьКФайлуXML = ThisWorkbook.Path & "\result.xml" ' формируем DOMDocument, и сохраняем XML в файл result.xml Array2XML(Данные.Value, arrHeaders, "Root").Save ПутьКФайлуXML If Err = 0 Then MsgBox "Создан XML файл" & vbNewLine & ПутьКФайлуXML, vbInformation, "Готово" End Sub
|
|||
Функция предназначена для разбивки текстового файла на несколько файлов меньшего размера - в каждом из которых будет не более заданнного количества строкРазделитель строк (обычно это перевод строки - константа vbNewLine) задаётся в качестве параметра функции Delimiter$ Создаваемые файлы получают имена вида filename(1).txt, filename(2).txt и т.д. Если задан параметр функции DeleteSourceFile равным TRUE, - то исходный файл удаляется после разделения Функция возвращает коллекцию, содержащую пути к сформированным файлам В начало каждого создаваемого файла дописывается строка заголовка - первая строка из исходного файла
Пример использования функции SplitTextFile:Sub ПримерИспользованияФункции_SplitTextFile() ИмяРазбиваемогоФайла$ = "C:\test\2011 04 17 12-32-30.csv" МаксимальноеКоличествоСтрокВфайле& = 3 Dim СписокИмёнФайлов As Collection Set СписокИмёнФайлов = SplitTextFile(ИмяРазбиваемогоФайла$, МаксимальноеКоличествоСтрокВфайле&, vbNewLine, False) For Each Файл In СписокИмёнФайлов Debug.Print "Создан файл: " & Файл Next End Sub
|
|||
Данная функция возвращает исходный текст web-страницы: Function GetHTTPResponse(ByVal sURL As String) As String On Error Resume Next Set oXMLHTTP = CreateObject("MSXML2.XMLHTTP") With oXMLHTTP .Open "GET", sURL, False ' раскомментируйте следующие строки и подставьте верные IP, логин и пароль ' если вы сидите за proxy ' .setProxy 2, "192.168.100.1:3128" ' .setProxyCredentials "user", "password" .send sHTMLBody = .responseBody End With For i = 0 To UBound(sHTMLBody) GetHTTPResponse = GetHTTPResponse & ChrW(AscW(Chr(AscB(MidB(sHTMLBody, i + 1, 1))))) Next Pi.Hide Set oXMLHTTP = Nothing End Function
|
|||
Sub print_all_sub_and_function_names_of_current_project() ' пишет названия функций программы в файл c:\output.txt Sub print_all_code_of_current_project() ' пишет весь код данной программы в файл c:\code.vb
|
|||
Чтение текстового файла в переменную: Function ReadTXTfile(ByVal filename As String) As String Set fso = CreateObject("scripting.filesystemobject") Set ts = fso.OpenTextFile(filename, 1, True): ReadTXTfile = ts.ReadAll: ts.Close Set ts = Nothing: Set fso = Nothing End Function Запись в текстовый файл из переменной: Function SaveTXTfile(ByVal filename As String, ByVal txt As String) As Boolean On Error Resume Next: Err.Clear Set fso = CreateObject("scripting.filesystemobject") Set ts = fso.CreateTextFile(filename, True) ts.Write txt: ts.Close SaveTXTfile = Err = 0 Set ts = Nothing: Set fso = Nothing End Function Добавление в текстовый файл из переменной: Function AddIntoTXTfile(ByVal filename As String, ByVal txt As String) As Boolean On Error Resume Next: Err.Clear Set fso = CreateObject("scripting.filesystemobject") Set ts = fso.OpenTextFile(filename, 8, True): ts.Write txt: ts.Close Set ts = Nothing: Set fso = Nothing AddIntoTXTfile = Err = 0 End Function
|
|||
