Нужно импортировать информацию в базу данных CRM-системы. Данные (в моем случае) экспортируются c CD "Большая телефонная книга" в текстовом формате. Для импорта их необходимо представить в виде таблицы в csv-файле. Собственно, вопрос, как их в эту таблицу разместить, учитывая, что часть данных из текста не нужна.
Название и адрес, я надеюсь, смогу и самостоятельно выделить из столбца NAME результата, а вот отсортировать ненужное и распределить необходимое, боюсь, мне пока не по уровню знаний.
Если есть способы решить эту задачу проще, без использования Excel, также буду признателен за подсказку.
Доброго дня всем!
Нужно импортировать информацию в базу данных CRM-системы. Данные (в моем случае) экспортируются c CD "Большая телефонная книга" в текстовом формате. Для импорта их необходимо представить в виде таблицы в csv-файле. Собственно, вопрос, как их в эту таблицу разместить, учитывая, что часть данных из текста не нужна.
Название и адрес, я надеюсь, смогу и самостоятельно выделить из столбца NAME результата, а вот отсортировать ненужное и распределить необходимое, боюсь, мне пока не по уровню знаний.
Если есть способы решить эту задачу проще, без использования Excel, также буду признателен за подсказку.starflight
Буквально вчера была тема. Посмотрите - просто нужно заменить на свой диапазон данных
Посмотрел. На данном этапе мне кажется, что пример достаточно далек от того, что мне нужно. Он выводит данные из excel в текстовый файл, а мне нужно из текстового файла информацию отфильтровать и по столбцам распределить. Может, его и достаточно просто "перевернуть" в обратную сторону, но не для моей квалификации.
[vba]
Код
Sub example_02() Dim x, y(), i&, j&, s$ x = ActiveSheet.UsedRange.Value If IsArray(x) Then ReDim y(1 To UBound(x)) For i = 1 To UBound(x) For j = 1 To UBound(x, 2) y(i) = y(i) & vbTab & x(i, j) Next j Next i: s = Join(y, vbCrLf) Else s = x End If With CreateObject("scripting.filesystemobject") With .CreateTextFile(ThisWorkbook.Path & "\sheet44.txt", True) .Write s: .Close End With End With MsgBox "Ok", 64 End Sub
[/vba]
UBound(x), как я понимаю, задает максимальное количество строк в документе (на листе). UBound(x, 2) - максимальное количество символов в строке?
i пробегает все строки, а j - всю информацию на строке, независимо от деления на колонки?
Буквально вчера была тема. Посмотрите - просто нужно заменить на свой диапазон данных
Посмотрел. На данном этапе мне кажется, что пример достаточно далек от того, что мне нужно. Он выводит данные из excel в текстовый файл, а мне нужно из текстового файла информацию отфильтровать и по столбцам распределить. Может, его и достаточно просто "перевернуть" в обратную сторону, но не для моей квалификации.
[vba]
Код
Sub example_02() Dim x, y(), i&, j&, s$ x = ActiveSheet.UsedRange.Value If IsArray(x) Then ReDim y(1 To UBound(x)) For i = 1 To UBound(x) For j = 1 To UBound(x, 2) y(i) = y(i) & vbTab & x(i, j) Next j Next i: s = Join(y, vbCrLf) Else s = x End If With CreateObject("scripting.filesystemobject") With .CreateTextFile(ThisWorkbook.Path & "\sheet44.txt", True) .Write s: .Close End With End With MsgBox "Ok", 64 End Sub
[/vba]
UBound(x), как я понимаю, задает максимальное количество строк в документе (на листе). UBound(x, 2) - максимальное количество символов в строке?
i пробегает все строки, а j - всю информацию на строке, независимо от деления на колонки?starflight
Сообщение отредактировал starflight - Пятница, 30.10.2015, 13:36
Для импорта их необходимо представить в виде таблицы в csv-файле. Собственно, вопрос, как их в эту таблицу разместить, учитывая, что часть данных из текста не нужна.
csv - это текстовый файл, а не таблица. Если нужно считать данные из текстового файла- то почему Вы не вложили пример этого файла? По считыванию данных из текста почитайте здесь и здесь
Для импорта их необходимо представить в виде таблицы в csv-файле. Собственно, вопрос, как их в эту таблицу разместить, учитывая, что часть данных из текста не нужна.
csv - это текстовый файл, а не таблица. Если нужно считать данные из текстового файла- то почему Вы не вложили пример этого файла? По считыванию данных из текста почитайте здесь и здесьSLAVICK
Иногда все проще чем кажется с первого взгляда.
Сообщение отредактировал SLAVICK - Пятница, 30.10.2015, 13:53
Sub t() Dim fn$, i&, ii&, n&, s$, m fn = "c:\Users\Ярослав\Downloads\4446415.txt" s = TXT_Читать(fn) m = Split(s, vbLf) n = 1: ii = 1 With Sheets("текст") .Cells.ClearContents For i = 0 To UBound(m) If Len(m(i)) < 3 Then n = n + 1: ii = 1 Else .Cells(n, ii) = m(i): ii = ii + 1 End If Next End With End Sub
Function TXT_Читать(Файл$) Dim oFSO Dim oFile Set oFSO = CreateObject("Scripting.FileSystemObject") Set oFile = oFSO.GetFile(Файл) If oFile.Size > 0 Then TXT_Читать = oFile.OpenasTextStream(1).ReadAll End Function
Мне кажется, из него проще информацию рассортировывать. Но тут я могу и ошибаться. )
Можете Поменял структуру листа Текст - так, чтобы вся информация по организации была в одной строке - тогда легче получить нужные данные. Несколько столбцов заполнил формулами - по остальным - напишите примеры либо критерии.
Вот макрос для сбора:
[vba]
Код
Sub t() Dim fn$, i&, ii&, n&, s$, m fn = "c:\Users\Ярослав\Downloads\4446415.txt" s = TXT_Читать(fn) m = Split(s, vbLf) n = 1: ii = 1 With Sheets("текст") .Cells.ClearContents For i = 0 To UBound(m) If Len(m(i)) < 3 Then n = n + 1: ii = 1 Else .Cells(n, ii) = m(i): ii = ii + 1 End If Next End With End Sub
Function TXT_Читать(Файл$) Dim oFSO Dim oFile Set oFSO = CreateObject("Scripting.FileSystemObject") Set oFile = oFSO.GetFile(Файл) If oFile.Size > 0 Then TXT_Читать = oFile.OpenasTextStream(1).ReadAll End Function
Мне кажется, из него проще информацию рассортировывать. Но тут я могу и ошибаться. )
Можете Поменял структуру листа Текст - так, чтобы вся информация по организации была в одной строке - тогда легче получить нужные данные. Несколько столбцов заполнил формулами - по остальным - напишите примеры либо критерии.SLAVICK
Поменял структуру листа Текст - так, чтобы вся информация по организации была в одной строке - тогда легче получить нужные данные. Несколько столбцов заполнил формулами - по остальным - напишите примеры либо критерии.
Спасибо за помощь!!! Попробовал с другим текстовым файлом, всё работает.
Теперь, правда, еще день потребуется,чтобы разобраться, КАК оно работает. )))
Вроде, больше пока ничего не надо, из того, что сам не сделаю. Понадобится - обязательно о Вас вспомню!!! )))
Поменял структуру листа Текст - так, чтобы вся информация по организации была в одной строке - тогда легче получить нужные данные. Несколько столбцов заполнил формулами - по остальным - напишите примеры либо критерии.
Спасибо за помощь!!! Попробовал с другим текстовым файлом, всё работает.
Теперь, правда, еще день потребуется,чтобы разобраться, КАК оно работает. )))
Вроде, больше пока ничего не надо, из того, что сам не сделаю. Понадобится - обязательно о Вас вспомню!!! )))starflight
Сообщение отредактировал starflight - Четверг, 05.11.2015, 12:18
Строку я заменил (файл 1). Перенос строк остался на месте. Более того, каждая строка адреса стала дублироваться и появилась куча лишних точек с запятой, включая даже начало первой строки. (файл 2).
Строку я заменил (файл 1). Перенос строк остался на месте. Более того, каждая строка адреса стала дублироваться и появилась куча лишних точек с запятой, включая даже начало первой строки. (файл 2).
Хм - у меня по Вашему примеру все четко отработало - 4е строки - как положено :D Вы точно тот файл смотрите? :o Тот скрин, что Вы приложили - был раньше :yes: Вот полный код:
[vba]
Код
Sub example() Dim x, y(), i&, j&, s$ x = ActiveSheet.UsedRange.Value If IsArray(x) Then ReDim y(1 To UBound(x)) For i = 1 To UBound(x) For j = 1 To UBound(x, 2) y(i) = y(i) & ";" & Replace(x(i, j), vbCr, " ", , , vbTextCompare) Next j y(i) = Right(y(i), Len(y(i)) - 1) Next i s = Join(y, vbCrLf) Else s = x End If With CreateObject("scripting.filesystemobject") With .CreateTextFile(ThisWorkbook.Path & "\sheet44.txt", True) .Write s: .Close End With End With MsgBox "Ok", 64 End Sub
[/vba]
Добавил строку удаления 1-го знака ";" вначале строки.
Хм - у меня по Вашему примеру все четко отработало - 4е строки - как положено :D Вы точно тот файл смотрите? :o Тот скрин, что Вы приложили - был раньше :yes: Вот полный код:
[vba]
Код
Sub example() Dim x, y(), i&, j&, s$ x = ActiveSheet.UsedRange.Value If IsArray(x) Then ReDim y(1 To UBound(x)) For i = 1 To UBound(x) For j = 1 To UBound(x, 2) y(i) = y(i) & ";" & Replace(x(i, j), vbCr, " ", , , vbTextCompare) Next j y(i) = Right(y(i), Len(y(i)) - 1) Next i s = Join(y, vbCrLf) Else s = x End If With CreateObject("scripting.filesystemobject") With .CreateTextFile(ThisWorkbook.Path & "\sheet44.txt", True) .Write s: .Close End With End With MsgBox "Ok", 64 End Sub
[/vba]
Добавил строку удаления 1-го знака ";" вначале строки.SLAVICK
Нет, скрин, конечно, другой - с лишними строками удвоенных адресов и множеством лишних ;;;;;;;;;;; )
А вот что в Вашем коде делает файл sheet44.txt, я вообще не понимаю. Я на него и внимания не обращал особенного. Адрес файла для взятия информации я прописывал в другую часть кода, Sub t(), где у Вас адрес 4446415.txt стоял.
[vba]
Код
Sub t() Dim fn$, i&, ii&, n&, s$, m fn = "C:\Users\Andy\Desktop\Address-book.txt" s = TXT_Читать(fn) m = Split(s, vbLf) n = 1: ii = 1 With Sheets("текст") .Cells.ClearContents For i = 0 To UBound(m) If Len(m(i)) < 3 Then n = n + 1: ii = 1 Else .Cells(n, ii) = m(i): ii = ii + 1 End If Next End With End Sub
Function TXT_Читать(Файл$) Dim oFSO Dim oFile Set oFSO = CreateObject("Scripting.FileSystemObject") Set oFile = oFSO.GetFile(Файл) If oFile.Size > 0 Then TXT_Читать = oFile.OpenasTextStream(1).ReadAll End Function
[/vba]
Очищал лист "текст". Жал на кнопку. Потом на листе "результат" удалял содержание всех срок, кроме трех верхних и копировал содержимое 3-й сроки вниз через правый нижний угол. На выходе брал содержимое листа "результат" и сохранял в csv-файл (разделители - запятые).
Результат прилагаю.
Что не так делал?
[p.s.]И почему у Вас спойлер в рамочке, а у меня нет? )[/p.s.] [moder]Потому что код нужно кнопкой # обтягивать. А под спойлер прячут, если код много места занимает[/moder]
Нет, скрин, конечно, другой - с лишними строками удвоенных адресов и множеством лишних ;;;;;;;;;;; )
А вот что в Вашем коде делает файл sheet44.txt, я вообще не понимаю. Я на него и внимания не обращал особенного. Адрес файла для взятия информации я прописывал в другую часть кода, Sub t(), где у Вас адрес 4446415.txt стоял.
[vba]
Код
Sub t() Dim fn$, i&, ii&, n&, s$, m fn = "C:\Users\Andy\Desktop\Address-book.txt" s = TXT_Читать(fn) m = Split(s, vbLf) n = 1: ii = 1 With Sheets("текст") .Cells.ClearContents For i = 0 To UBound(m) If Len(m(i)) < 3 Then n = n + 1: ii = 1 Else .Cells(n, ii) = m(i): ii = ii + 1 End If Next End With End Sub
Function TXT_Читать(Файл$) Dim oFSO Dim oFile Set oFSO = CreateObject("Scripting.FileSystemObject") Set oFile = oFSO.GetFile(Файл) If oFile.Size > 0 Then TXT_Читать = oFile.OpenasTextStream(1).ReadAll End Function
[/vba]
Очищал лист "текст". Жал на кнопку. Потом на листе "результат" удалял содержание всех срок, кроме трех верхних и копировал содержимое 3-й сроки вниз через правый нижний угол. На выходе брал содержимое листа "результат" и сохранял в csv-файл (разделители - запятые).
Результат прилагаю.
Что не так делал?
[p.s.]И почему у Вас спойлер в рамочке, а у меня нет? )[/p.s.] [moder]Потому что код нужно кнопкой # обтягивать. А под спойлер прячут, если код много места занимает[/moder]starflight
Вы меня запутали или сами запутались. Макрос Sub t() - для считывания информации из текстового файла, который Вы прикладывали в 7-м посте. с созданием файла - он не имеет ничего общего. Макрос Sub example() - для создания текстового файла из данных листа. именно этот макрос создает файл sheet44.txt в той же папке откуда был открыт файл Excel. И именно после выполнения этого макроса - создается файл, который я прикладывал в 13-м посте. Чтобы не было недоразумений - см. файл - оставил в нем только один лист и один макрос - для создания файла из рабочего диапазона этого листа.
Вы меня запутали или сами запутались. Макрос Sub t() - для считывания информации из текстового файла, который Вы прикладывали в 7-м посте. с созданием файла - он не имеет ничего общего. Макрос Sub example() - для создания текстового файла из данных листа. именно этот макрос создает файл sheet44.txt в той же папке откуда был открыт файл Excel. И именно после выполнения этого макроса - создается файл, который я прикладывал в 13-м посте. Чтобы не было недоразумений - см. файл - оставил в нем только один лист и один макрос - для создания файла из рабочего диапазона этого листа.SLAVICK
Как я понимаю алгоритм действий. пункт первый) Открывается файл и кнопкой запускается макрос t, читающий информацию из текстового файла в лист "текст". . . . пункт последний) запуском макроса example информация с листа "шаблон для расширенного импорта" записывается в файл sheet44.txt
Так - не так?
P.S. Вот сейчас я информацию из листа "результат" перенес на страницу "шаблон...", запустил example, переименовал sheet44.txt в sheet44.csv и импорт в CRM прошел успешно!!! Ура, товарищи!!! )))
Спасибо, SLAVICK!
C прошедшим днем рождения! Здоровья и всех прочих благ!
Как я понимаю алгоритм действий. пункт первый) Открывается файл и кнопкой запускается макрос t, читающий информацию из текстового файла в лист "текст". . . . пункт последний) запуском макроса example информация с листа "шаблон для расширенного импорта" записывается в файл sheet44.txt
Так - не так?
P.S. Вот сейчас я информацию из листа "результат" перенес на страницу "шаблон...", запустил example, переименовал sheet44.txt в sheet44.csv и импорт в CRM прошел успешно!!! Ура, товарищи!!! )))
Спасибо, SLAVICK!
C прошедшим днем рождения! Здоровья и всех прочих благ!starflight
Сообщение отредактировал starflight - Пятница, 13.11.2015, 16:14