Есть форматированный текстовый файл @b*.162 (каждый день новый, но с данной маской, примерно 1000 строк в день) и две постоянные книги: rahunki_po_pdfo.xls (там несколько столбцов, использоваться будет только первый: nls; изменяться кол-во строк будет раз в году, количество строк - 100) и details_of_payment (один столбец без названия; кол-во строк 0-20 будет меняться по мере необходимости)
Нужно импортировать текстовый файл в "Лист1", предварительно очистив его, обязательно изменить кодировку на 866: Кириллица (DOS) и желательно изменить шрифт на Courier New и обработать все строки, начиная с третьей. Сначала части строки присваиваем переменным: p3= подстроке, начиная с 1 символа длиной 6 символов (дальше буду записывать так: p3=substr(str,1,6)) p4=substr(str,7,14) p5=substr(str,24,6) p6=substr(str,30,14) p7=substr(str,44,1) p8=substr(str,48,13), преобразовать в число и разделить на 100 p9=substr(str,62,1) p10=substr(str,63,10) p11=substr(str,73,3) p12=substr(str,80,2)+"."+substr(str,78,2)+".20"+substr(str,76,2) и преобразовать в дату p13=substr(str,86,2)+"."+substr(str,84,2)+".20"+substr(str,82,2) и преобразовать в дату p14=substr(str,88,38) p15=substr(str,126,38) p16=substr(str,164,229) Значение переменных p1 и p2 для всего файла будут постоянными и их нужно считать со 2 строки этого же файла; p1=substr(str,17,2)+"."+substr(str,15,2)+".20"+substr(str,13,2) и преобразовать в дату p2=substr(str2,1,12) Количество строк, которые необходимо обработать, можно считать со 2 строки: cntrows=substr(str2,23) - c 23 позиции и до конца строки Потом если значение p6 есть в первом столбце в rahunki_po_pdfo.xls и ни одно значение в первом столбце в details_of_payment не есть подстрокой строки p16, то значения переменных p1...p16 добавляем на лист2 и строку на 1 листе выделяем зеленым цветом. Если р6 не найдено, выделяем строку красным цветом, если же по р6 проверка успешная, а по р16 не прошло, выделяем желтым цветом. Уточнение: лист2 чистить не нужно, данные будут накопляться на протяжении года. Если открытие файла по маске @b*.162 затруднительно, переименуйте его в @b.162 Хотелось бы еще чтобы на 2 листе первая строка за день была выделена например светло-серым фоном, чтобы было легко визуально определять первую строку нового рабочего дня.
Есть форматированный текстовый файл @b*.162 (каждый день новый, но с данной маской, примерно 1000 строк в день) и две постоянные книги: rahunki_po_pdfo.xls (там несколько столбцов, использоваться будет только первый: nls; изменяться кол-во строк будет раз в году, количество строк - 100) и details_of_payment (один столбец без названия; кол-во строк 0-20 будет меняться по мере необходимости)
Нужно импортировать текстовый файл в "Лист1", предварительно очистив его, обязательно изменить кодировку на 866: Кириллица (DOS) и желательно изменить шрифт на Courier New и обработать все строки, начиная с третьей. Сначала части строки присваиваем переменным: p3= подстроке, начиная с 1 символа длиной 6 символов (дальше буду записывать так: p3=substr(str,1,6)) p4=substr(str,7,14) p5=substr(str,24,6) p6=substr(str,30,14) p7=substr(str,44,1) p8=substr(str,48,13), преобразовать в число и разделить на 100 p9=substr(str,62,1) p10=substr(str,63,10) p11=substr(str,73,3) p12=substr(str,80,2)+"."+substr(str,78,2)+".20"+substr(str,76,2) и преобразовать в дату p13=substr(str,86,2)+"."+substr(str,84,2)+".20"+substr(str,82,2) и преобразовать в дату p14=substr(str,88,38) p15=substr(str,126,38) p16=substr(str,164,229) Значение переменных p1 и p2 для всего файла будут постоянными и их нужно считать со 2 строки этого же файла; p1=substr(str,17,2)+"."+substr(str,15,2)+".20"+substr(str,13,2) и преобразовать в дату p2=substr(str2,1,12) Количество строк, которые необходимо обработать, можно считать со 2 строки: cntrows=substr(str2,23) - c 23 позиции и до конца строки Потом если значение p6 есть в первом столбце в rahunki_po_pdfo.xls и ни одно значение в первом столбце в details_of_payment не есть подстрокой строки p16, то значения переменных p1...p16 добавляем на лист2 и строку на 1 листе выделяем зеленым цветом. Если р6 не найдено, выделяем строку красным цветом, если же по р6 проверка успешная, а по р16 не прошло, выделяем желтым цветом. Уточнение: лист2 чистить не нужно, данные будут накопляться на протяжении года. Если открытие файла по маске @b*.162 затруднительно, переименуйте его в @b.162 Хотелось бы еще чтобы на 2 листе первая строка за день была выделена например светло-серым фоном, чтобы было легко визуально определять первую строку нового рабочего дня.SergeyKorotun
с миру по нитке Там только написано много, а реализация не сложная. Выделение строк цветом желательное условие, но необязательное. Для упрощения можно обработать только р1, р6, р8, р12, р14, р16
с миру по нитке Там только написано много, а реализация не сложная. Выделение строк цветом желательное условие, но необязательное. Для упрощения можно обработать только р1, р6, р8, р12, р14, р16SergeyKorotun
Сообщение отредактировал SergeyKorotun - Суббота, 03.08.2013, 03:22
Так вы уже задачу решили? Поделитесь, может кому пригодится.
Последние 13 лет не занимался программированием. В последнее время начал оракл изучать, но недавно базы забрали в центр и доступа к ним нет. Есть только возможность сделать некоторые стандартные выборки из программы и сохранить в ексель. Начинаю изучать ВБА. На клиппере могу написать, но там ограничение на размер файла есть да и с кодировками могут быть проблемы. Вот если бы я кратко задачу описал: "перенести сроки из листа 1 в лист 2, если счет есть в книге А и назначение платежа не содержит подстроки с книги Б" вы бы считали бы это задание сложным? Ну а потом позже бы еще попросил разделить строку на подстроки. Помогите хотя бы открыть файл @B.162, изменив кодировку на 866: Кириллица (DOS) и изменить шрифт на Courier New
Так вы уже задачу решили? Поделитесь, может кому пригодится.
Последние 13 лет не занимался программированием. В последнее время начал оракл изучать, но недавно базы забрали в центр и доступа к ним нет. Есть только возможность сделать некоторые стандартные выборки из программы и сохранить в ексель. Начинаю изучать ВБА. На клиппере могу написать, но там ограничение на размер файла есть да и с кодировками могут быть проблемы. Вот если бы я кратко задачу описал: "перенести сроки из листа 1 в лист 2, если счет есть в книге А и назначение платежа не содержит подстроки с книги Б" вы бы считали бы это задание сложным? Ну а потом позже бы еще попросил разделить строку на подстроки. Помогите хотя бы открыть файл @B.162, изменив кодировку на 866: Кириллица (DOS) и изменить шрифт на Courier NewSergeyKorotun
" и преобразовать в дату " тоже можно сделать в запросе. Процесс создания запроса пишем в макрос. Ну а разделить на 100, выкинуть лишние строки - это потом добавляете в макрос. В общем кажется всё по импорту - далее обработка. Которая такая запутанная с виду, что вникать неохота. P.S. Если здесь не получите "работу под ключ" - то советую открыть тему в http://www.excelworld.ru/forum/6 Или скажите - перенесём.
" и преобразовать в дату " тоже можно сделать в запросе. Процесс создания запроса пишем в макрос. Ну а разделить на 100, выкинуть лишние строки - это потом добавляете в макрос. В общем кажется всё по импорту - далее обработка. Которая такая запутанная с виду, что вникать неохота. P.S. Если здесь не получите "работу под ключ" - то советую открыть тему в http://www.excelworld.ru/forum/6 Или скажите - перенесём.Hugo
Цитата (SergeyKorotun, 03.08.2013 в 02:30, в сообщении №3 писал(а)): реализация не сложная Так вы уже задачу решили? Поделитесь, может кому пригодится.
Цитата (SergeyKorotun, 03.08.2013 в 02:30, в сообщении №3 писал(а)): реализация не сложная Так вы уже задачу решили? Поделитесь, может кому пригодится.
Делюсь. Открыть pdfo.xls и запустить макросSergeyKorotun