Страницы: 1
RSS
Перенос данных в эксель
 
Добрый день. Подскажите пожалуйста как быть.
Я переношу данные из блокнота в эксель, использую разделитель / . Но данные не все попадают в нужные ячейки.
В скриншоте блокнота я отметил строки которые будут проблемными при переносе в эксель. То есть в экселе в столбце А должны быть числа десятизначные, а туда переносится помимо чисел ещё тексты и числа из других ячеек.
 
Код
let
    Источник = Table.FromColumns({Lines.FromBinary(File.Contents("C:\тут путь к файлу\test.txt"))}),
    #"Разделить столбец по разделителю" = Table.SplitColumn(Источник, "Column1", Splitter.SplitTextByEachDelimiter({"///"}, QuoteStyle.Csv, false), {"Column1.1", "Column1.2"}),
    #"Измененный тип1" = Table.TransformColumnTypes(#"Разделить столбец по разделителю",{{"Column1.1", Int64.Type}}),
    #"Удаленные столбцы" = Table.RemoveColumns(#"Измененный тип1",{"Column1.2"}),
    #"Удаленные ошибки" = Table.RemoveRowsWithErrors(#"Удаленные столбцы", {"Column1.1"}),
    #"Строки с примененным фильтром" = Table.SelectRows(#"Удаленные ошибки", each ([Column1.1] <> null))
in
    #"Строки с примененным фильтром"
в PQ
 
Здравствуйте EgorShilov мне кажется того кто придумал такой формат записи текстового файла, надо выдвинуть на лауреата Нобелевской премии. Минут 20 думал как его разбить нормально в эксель, но безуспешно. Недавно делал вытаскивание из текстового файла генома, там есть проблемы, но не такие как здесь. Поэтому, если у Vik_tor в PQ получилось то хорошо.

P.S. В принципе можно написать макрос, но точно не 10 минут.(А составителю этого формата текстового файла все равно медаль надо дать)
Изменено: Евгений Смирнов - 17.04.2024 20:16:29
 
Добрый вечер! Спасибо за ответы Vik_tor и Евгений Смирнов.
Я не знаю как и куда  применить формулу из ответа.
Я понял проблему. Почему он так криво вытаскивает в эксель. Если бы всё после десятизначного номера оставалось в одной строке то было бы всё норм. А так получается он делает два пробела и переносит на другую строку. я пробовал в нотепаде заменить пробелы, вводил \r\n. Ничего не помогло. Если нажать delete дважды то всё нормально переносится со второй строки. Но у меня сто тысяч так надо сделать. Результат мне нужен такой как на скриншоте. Там же в скриншоте я отметил , что получается если есть перенос строк. Все колонки после ОПИСАНИЕ не вставляются в эксель
 
EgorShilov Вообще в NotePad ++  можно исправить этот файл ручками, но если он большой сколько времени надо.
 
Ооооооочень много. А я к этому не готов. Вот и ищу варианты.
 
EgorShilov Наверно приблизительно так хотели. Это в принципе черновик. Ваш текстовый файл в кодировке UTF-8 макрос для файла в кодировке 1251 и там еще надо обрезку массива делать.
Код
Sub ParsingTXT()
Dim ArFil, ArIn, ArVih, Tp1, Txt$, ii&, j%, iV1&
Const Kon$ = "*##########", Sl3$ = "///", Raz2% = 20
ArIn = "Files TXT (*.txt),*.txt," & "All Files (*.*),*.*"
ArVih = "Выберите файл и нажмите открыть"
ArFil = Application.GetOpenFilename(ArIn, , ArVih, , False)
If VarType(ArFil) = vbBoolean Then Exit Sub
ArIn = Split(CreateObject("Scripting.FileSystemObject").OpenTextFile(ArFil, 1).ReadAll, vbCrLf)
ReDim ArVih(UBound(ArIn)): For ii = 0 To UBound(ArIn)
If ArIn(ii) Like Kon Then ArVih(iV1) = Txt & ArIn(ii): iV1 = iV1 + 1: Txt = vbNullString Else Txt = Txt & ArIn(ii)
Next
ReDim ArIn(UBound(ArVih), Raz2): For ii = 0 To UBound(ArVih)
Tp1 = VBA.Split(ArVih(ii), Sl3)
For j = 0 To UBound(Tp1): ArIn(ii, j) = Tp1(j): Next j, ii
Range("A2").Resize(UBound(ArIn) + 1, UBound(ArIn, 2) + 1) = ArIn
End Sub
 
не получилось.  
 
EgorShilov Я ведь написал, что макрос для файла в кодировке 1251. Возьмете файл с моего сообщения раз не умеете перекодировать.

Р.S. Или вы попробовали с другими файлами не их вашего сообщения. Может размерности не хватило. Найдите в коде Raz2 = 20 и поставьте цифру больше 50 или 100. Не сделал я в коде подсчет 2 размерности
Изменено: Евгений Смирнов - 17.04.2024 22:49:36
 
Крутотень! Я и не обратил внимание на то, что вы прикрепили файлы. Сейчас посмотрел. крутяк на этом файле работает. Я выполнил макрос с другим файлом побольше он показывает бяку. Файл я в нотепаде сохранил как и с кодировкой 1251
 
Я чего-то не понимаю. Поменял 20 на 2000 и всё равно ошибка. Что я делаю не так? подскажите пожалуйста. Прикрепить файл который не могу одолеть не могу он весит 30 мб
 

EgorShilov В вашем последнем сообщении ошибка недостаточно памяти. 2000 это вы много поставили, памяти будет много занимать. Если файл 30мб довольно большой, но в принципе должно обработать, но при написании кода надо все хорошо продумать, и 2 размерность массива обязательно контролировать. Я ведь просто на скорую руку написал код. И еще возможно, что в файле другое расположение данных. Поэтому для того, чтобы хорошо написать надо ваш файл целиком, а так ничего не получится.

 
EgorShilov, добрый день.
Прилагаю свой вариант (начало макроса с выбором файла честно стянул у ув. Евгений Смирнов).
Из выбранного файла (test.txt) в кодировке UTF-8 с разбитыми на 2-3-4 части строками получает файл test.txt.new в кодировке Win-1251, с собранными строками (по принципу: строка начинается с любой цифры) .
30 Мб файл обработал за ~1 минуту.
Изменено: andypetr - 18.04.2024 12:17:06 (Изменил файл.)
 
andypetr
Цитата
начало макроса с выбором файла честно стянул у ув.Евгений Смирнов).
Нехорошо воровать :D  Шутка. Ну вообще то никуда не годится по времени 20 минут это очень много . Теперь у меня тоже есть файл  30Мб. Пока 30 сек , но думаю надо довести  до 10-15 сек на такой файл. Учитывая,что моему компу лет 20 процессор первые из двухядерных и оперативки 1Гб.
 
Добрый день! я, можно сказать, новичок. пользуюсь таблицами, созданными другими. а хочется научиться самой делать. зачастую так бывает, что работодателю необходимо несколько справок (таблиц), которые по сути содержат одну и ту же информацию, но выглядят по-разному. можно ли "сталкивать" такие таблицы ? чтоб,создав одну, данные переходили в другую? ну и дайте совет- на какой курс лучше записаться? всем спасибо!
 
Евгений Смирнов, думаю минута уже нормальная скорость.
У меня зато с UTF-8 работает и не нужно магическую константу "20" в коде подкручивать!  ;)  
 
Большое спасибо, Евгению Смирнову! Всё работает. Я доволен.
Страницы: 1
Наверх