Страницы: 1 2 3 След.
RSS
-= Открытие с помощью VBA файла .csv =-
 
Всем привет.  
Подскажите, пожалуйста, как корректно с разделителями открыть с помощью VBA текстовый файл формата .csv?  
Если открывать (двойным щелчком по файлу) Экселем - открывается нормально, с нужными разделителями, а если открывать нижеуказанным макросом - открывается криво, всё "на кучу".  
Архив прилагаю. Заранее спасибо.  
 
Макрос для открытия:  
 
Sub test()  
   Sheets(1).Cells.ClearContents  
     
   Application.ScreenUpdating = False  
   Dim wbCsv As String: wbCsv = ThisWorkbook.Path & "\original bd.csv"  
   Workbooks.OpenText Filename:=wbCsv, otherchar:=";"  
   With ActiveWorkbook  
       .ActiveSheet.UsedRange.Copy ThisWorkbook.Sheets(1).[a1].Cells
       .Close (True)  
   End With  
   Application.ScreenUpdating = True  
End Sub
Киса, я хочу Вас спросить, как художник — художника: Вы рисовать умеете?
 
Спасибо!
Киса, я хочу Вас спросить, как художник — художника: Вы рисовать умеете?
 
К сожалению, не совсем так работает как хотелось бы.  
1. Был файл csv с разделителем ";", а после выполнение макроса уменьшился размер (в два раза) и разделитель стал ",".  
2. Первые строки вставил на лист корректно, остальные скопировались с ненужными символами (<h2>,<p> и т.д.)  
 
Можно как-то решить?
Киса, я хочу Вас спросить, как художник — художника: Вы рисовать умеете?
 
По первому пункту разобрался: оставил только часть кода, т.е. к своему добавил True    
Workbooks.Open wbCsv, True  
 
А вот с этими символами  (<h2>,<p> и т.д.) - проблема.
Киса, я хочу Вас спросить, как художник — художника: Вы рисовать умеете?
 
Сорри, ошибся, по первому пункту проблема актуальна.  
 
Ps. Ув. Модераторы, удалите, пожалуйста, мои лишние сообщения.  
Спасибо.
Киса, я хочу Вас спросить, как художник — художника: Вы рисовать умеете?
 
Я не знаю какие лишние. Время подскажите.
 
для csv надо сделать запись макроса, импортировать из текста.  
Для вашего файла  
Sub scv2()  
   Range("A1").Select  
   s = ThisWorkbook.Path & "\original bd.csv"  
   With ActiveSheet.QueryTables.Add(Connection:= _  
       "TEXT;" + s + "", _  
       Destination:=Range("$A$1"))  
       .Name = "original bd"  
       .FieldNames = True  
       .RowNumbers = False  
       .FillAdjacentFormulas = False  
       .PreserveFormatting = True  
       .RefreshOnFileOpen = False  
       .RefreshStyle = xlInsertDeleteCells  
       .SavePassword = False  
       .SaveData = True  
       .AdjustColumnWidth = True  
       .RefreshPeriod = 0  
       .TextFilePromptOnRefresh = False  
       .TextFilePlatform = 1251  
       .TextFileStartRow = 1  
       .TextFileParseType = xlDelimited  
       .TextFileTextQualifier = xlTextQualifierDoubleQuote  
       .TextFileConsecutiveDelimiter = False  
       .TextFileTabDelimiter = False  
       .TextFileSemicolonDelimiter = True  
       .TextFileCommaDelimiter = False  
       .TextFileSpaceDelimiter = False  
       .TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)  
       .TextFileTrailingMinusNumbers = True  
       .Refresh BackgroundQuery:=False  
   End With  
 
End Sub
 
Спасибо, но импорт я уже пробовал, так же появляются ненужные знаки.  
Может кто-то подскажет как от них избавится?
Киса, я хочу Вас спросить, как художник — художника: Вы рисовать умеете?
 
Что за знаки?  
Где появляются?
 
Мне сегодня был знак.
 
Если открыть файл original bd.csv Экселем - данные выстраиваются по столбцам (к примеру столбец K "описание"), а если сделать текстовый импорт или скопировать - столбец K съезжает в столбец A.
Киса, я хочу Вас спросить, как художник — художника: Вы рисовать умеете?
 
Это происходит из-за того, что в ячейках столбца K находится текст с символами альт+энтер  
Кто знает как обойти?
Киса, я хочу Вас спросить, как художник — художника: Вы рисовать умеете?
 
VBA воспринимает альт+энтер как разделитель и перекидывает текст в столбец А.  
Можно это прописать в коде?
Киса, я хочу Вас спросить, как художник — художника: Вы рисовать умеете?
 
Можно так пойти:  
 
 
Sub tt()  
Set objFSO = CreateObject("Scripting.FileSystemObject")  
Set objFile = objFSO.OpenTextFile("c:\Temp\Light\original bd.csv", 1)  
strText = objFile.ReadAll  
a = Split(strText, vbCr)  
End Sub  
 
Далее перебираем массив a и бьём по ";", раскладываем по ячейкам.
 
\ну-ну )   
http://narod.ru/disk/47511050001.8264595d6e3cc80280c25d270bddd4ef/screenshot.JPG.html
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


https://github.com/nervgh
 
Sub tt()  
   Dim objFSO As Object, objFile As Object, a, i&  
   Set objFSO = CreateObject("Scripting.FileSystemObject")  
   Set objFile = objFSO.OpenTextFile(ThisWorkbook.Path & "\original bd.csv", 1)  
   strText = objFile.ReadAll  
   a = Split(strText, vbCr)  
   For i = 0 To UBound(a) - 1  
       Cells(i + 1, 1).Resize(1, 50) = Split(a(i), ";")  
   Next  
End Sub  
 
Там в    
"  
TOY9874"  
ещё есть перевод строки - может нужно ещё подшаманить...
 
nerv, спасибо :)  
 
a = Split(strText, vbCrLf)
 
Всем привет!  
Попробуем?
 
в 2010 не прокатило... сейчас попробую переделать  
хорошая конечно идея с помощью СендКейс, но как мне кажется - что через жо..
Киса, я хочу Вас спросить, как художник — художника: Вы рисовать умеете?
 
в варианте Hugo съехал текст столбцов влево
Киса, я хочу Вас спросить, как художник — художника: Вы рисовать умеете?
 
То может я не так задачу понимаю, но у меня вот так получилось. Запускать load_d
 
Спасибо, вроде бы всё супер.
Киса, я хочу Вас спросить, как художник — художника: Вы рисовать умеете?
 
А нет... рано написал.  
Почему-то разделилось название столбца С и пошел сдвиг вправо
Киса, я хочу Вас спросить, как художник — художника: Вы рисовать умеете?
 
ну это, наверное от того, что точка с запятой разделитель...  
Артикул;Наименование;"ID страницы (часть URL; используется в ссылках на эту страницу)";CommerceML-идентификатор;
 
Богдан, какой ты привередливый : )
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


https://github.com/nervgh
 
На работе у меня XL2002  
Пришёл домой и загрустил: горячие клавиши, действительно, не срабатывают в XL2007 на открытие файла  
Жаль. Чёртик внутри, который подбрасывает чертовски простые решения - в этот раз твоя взяла
 
'В проекте должна быть ссылка на библиотеку Microsoft Forms 2.0  
Sub ОткрытьCSV_()  
   Dim Dr As Integer, S As String, DO_ As DataObject  
     
   'Чтение файла в строку S  
   Dr = FreeFile 'свободный дескриптор файла  
   Open ThisWorkbook.Path & "\" & "original bd.csv" For Binary As Dr  
   S = VBA.Space(LOF(Dr))  
   Get Dr, , S  
   Close Dr  
     
   'Теперь возможны любые варианты переноса строки на лист _  
   Самый очевидный - через массив  
     
     
   '******* от Шапокляка  
     
   'Строка >> текстовый буфер  
   Set DO_ = New DataObject  
   DO_.Clear  
   DO_.SetText Replace(S, ";", vbTab) 'возможность разнесения по столбцам  
   DO_.PutInClipboard  
 
   'Перенос на лист новой книги  
   Workbooks.Add  
   ActiveSheet.Paste  
   Cells(1).Select  
     
   'Очистка буфера  
   DO_.Clear  
End Sub
 
Вопросик:  
Set DO_ = New DataObject  
DO_.Clear  
Новый объект не пустой?
 
Точно!  
Cтроку "...Clear" удалить нельзя оставить
 
Тогда можно немножко упростить  
 
'В проекте должна быть ссылка на библиотеку Microsoft Forms 2.0  
Sub ОткрытьCSV1()  
   Dim Dr As Integer, S As String  
 
   'Чтение файла в строку S  
   Dr = FreeFile    'свободный дескриптор файла  
   Open ThisWorkbook.Path & "\" & "original bd.csv" For Binary As Dr  
   S = VBA.Space(LOF(Dr))  
   Get Dr, , S  
   Close Dr  
 
   'Теперь возможны любые варианты переноса строки на лист _  
    Самый очевидный - через массив (S >> Split >> v() >> Range())  
 
 
   '******* от Шапокляка  
 
   'Строка >> буфер  
   With New DataObject  
       .SetText Replace(S, ";", vbTab)    'возможность разнесения по столбцам  
       .PutInClipboard  
   End With  
   'Перенос на лист новой книги  
   Workbooks.Add  
   ActiveSheet.Paste  
   Cells(1).Select  
End Sub
Страницы: 1 2 3 След.
Наверх