Імпорт CSV та Excel у мобільні додатки: повна реалізація

Ручне введення прайсів і реєстрів у мобільному додатку забирає години та породжує помилки. Ми проєктуємо та впроваджуємо імпорт CSV та Excel в Android під ключ — від розбору файлу до зрозумілих звітів про завантаження. Це скорочує час на підготовку даних у рази та знімає навантаження з вашої команди.

Розробка та підтримка будь-яких видів мобільних додатків:

Інформаційні та розважальні мобільні програми
Новинки, ігри, довідники, онлайн-каталоги, погодні, фітнес та здоров'я, туристичні, освітні, соціальні мережі та месенджери, квіз, блоги та подкасти, форуми, агрегатори
Мобільні програми електронної комерції
Інтернет-магазини, B2B-додатки, маркетплейси, онлайн-обмінники, кешбек-сервіси, біржі, дропшиппінг-платформи, програми лояльності, доставка їжі та товарів, платіжні системи
Мобільні програми для управління бізнес-процесами
CRM-системи, ERP-системи, управління проектами, інструменти для команди продажів, облік фінансів, управління виробництвом, логістика та доставка, управління персоналом, системи моніторингу даних
Мобільні програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, платформи надання електронних послуг, платформи кешбеку, відеохостинги, тематичні портали, платформи онлайн-бронювання та запису, платформи онлайн-торгівлі

Це лише деякі з типів мобільних додатків, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Імпорт CSV та Excel у мобільні додатки: повна реалізація

Локальне зберігання данихСередній~2-3 дні
Часті запитання

Імпорт CSV в Android: де ламається завантаження даних

Імпорт CSV на Android ламається не на кнопці «Завантажити», а на даних.

Файл надходить із 1С, Google Sheets або вивантаження CRM — і в ньому майже завжди є розбіжності: роздільник ; замість ,, кодування Windows-1251 замість UTF-8, десяткова кома в числах, дати у форматі дд.мм.рррр поряд з ISO.

Наївний парсинг CSV за комою на таких файлах дає зсув колонок: один рядок із зайвою лапкою — і всі наступні поля з'їжджають у сусідні стовпці.

Окрема категорія збоїв — великі файли. Вивантаження на 50-100 тисяч рядків, прочитане повністю в пам'ять, валить застосунок на пристроях із 2-3 ГБ ОЗП: система вбиває процес раніше, ніж користувач бачить прогрес.

Обрив з'єднання на середині завантаження погіршує картину — повторний імпорт створює дублі, бо перша спроба частково записала дані.

Excel додає свої граблі: .xlsx — це ZIP-архів із XML усередині, і спроба відкрити його як текстовий CSV дає сміття замість таблиці. А формули, об'єднані комірки та кілька аркушів вимагають явного рішення — який аркуш читаємо і що робимо з обчислюваними значеннями.

Нарешті, помилки імпорту CSV майже ніколи не показуються користувачеві зрозуміло: «не вдалося завантажити файл» не говорить, у якому рядку бита лапка.

Без порядкового звіту з номером рядка та причиною відбракування людина править файл наосліп, а підтримка отримує тікети без діагностики.

Розбираємо, як кожен із цих збоїв закривається на рівні архітектури завантаження та парсингу.

Що дає керований імпорт даних у застосунку

Керований імпорт — це не «кнопка завантажити файл», а конвеєр: розбір структури, валідація рядків, звіт про помилки та транзакційний запис.

Коли він вибудуваний, швидкість імпорту даних перестає залежати від розміру файлу: потокова обробка тримає стабільний темп на десятках тисяч рядків, а прогрес видно користувачеві, а не завмирає на одному екрані.

Надійність завантаження дає передбачуваність: кожен рядок або проходить цілком, або відхиляється зі зрозумілою причиною — без частково записаних записів, які потім доводиться вичищати вручну.

Частка успішних імпортів зростає завдяки попередній перевірці формату, кодування та обов'язкових полів до запису в базу.

Зниження ручного вводу — прямий ефект від зіставлення колонок файлу з полями застосунку. Користувач один раз підтверджує відповідність, далі система запам'ятовує шаблон і застосовує його до наступних вивантажень. Це прибирає передруковування та пов'язані з ним одруки.

Звернення до підтримки падають, коли помилку пояснено на місці: замість «імпорт не вдався» користувач бачить номер рядка, проблемне поле та підказку.

Ми працюємо на Android та iOS з урахуванням обмежень кожної платформи — доступ до файлів, фонова обробка, поведінка при згортанні застосунку.

Що вимірюємо на виході

  • Час обробки файлу на еталонному наборі рядків — до і після оптимізації.
  • Частка імпортів, завершених без ручних правок.
  • Кількість звернень за темою завантаження даних за період.
  • Повнота звіту про помилки: скільки відхилених рядків отримали зрозумілу причину.

Ці метрики знімаємо на пілотному наборі даних замовника, а не на синтетиці — так видно реальний профіль файлів і вузькі місця.

Способи завантаження CSV та Excel: порівняння підходів

Вибір способу імпорту визначає, як застосунок поводитиметься на файлі в 200 тисяч рядків і на телефоні з вільними 300 МБ пам'яті.

Нижче — чотири робочі варіанти, між якими реально обирають під час проєктування: вони відрізняються джерелом даних, вимогами до пам'яті та стійкістю до обривів зв'язку.

Варіант Коли підходить Обмеження
Імпорт із файлу (локальний вибір) Разові завантаження, робота офлайн, дані надходять від користувача Потрібен доступ до сховища, на великих файлах потрібна потокова обробка
Завантаження з хмари Дані лежать у спільному сховищі, потрібна синхронізація між пристроями Залежить від мережі, потребує авторизації та обробки прострочених токенів
Потоковий імпорт Файли від десятків тисяч рядків, обмежена пам'ять Складніший у реалізації: читання порядково, без завантаження всього файлу в пам'ять
Фонова синхронізація Регулярний обмін, дані оновлюються без участі користувача Потрібні планувальник, повторні спроби та дозволи ОС на роботу у фоні

Що важливо при виборі

Потоковий імпорт читає файл порядково й пише в базу порціями — застосунок не тримає весь набір у пам'яті, тому файл на 200 тисяч рядків проходить без падінь. Локальний імпорт із файлу дає незалежність від мережі, але потребує коректної роботи з дозволами та зовнішнім сховищем.

Хмарне завантаження та фонова синхронізація розв'язують задачу регулярного обміну, але додають вимоги до мережі та авторизації. На практиці їх комбінують: потокове читання як основа, фонова синхронізація як надбудова для повторюваних сценаріїв.

Як ми вибудовуємо імпорт CSV в Android: етапи робіт

Імпорт CSV в Android майже ніколи не зводиться до «прочитати файл і розкласти за полями». Джерела надходять із 1С, вивантажень CRM, таблиць бухгалтерії — з різними розділювачами, кодуваннями, десятковими комами та «шапками» на третьому рядку.

Тому ми ведемо проєкт етапами: кожен наступний спирається на зафіксований результат попереднього, а не на здогадки про те, «як там у клієнта насправді».

Етапи впровадження імпорту

  1. Аудит даних. Збираємо реальні вивантаження за кілька періодів, а не один зразок. Фіксуємо розділювачі, кодування, формати дат і чисел, порожні рядки, дублі заголовків. На виході — перелік джерел та їхніх відмінностей.
  2. Схема мапінгу колонок. Зіставляємо поля файлу з полями застосунку: що обов'язкове, що опціональне, де потрібні перетворення. Правила мапінгу описуємо декларативно — нову колонку додаємо правкою конфігурації, а не перезбиранням логіки.
  3. Реалізація парсера та валідації. Потокове читання замість завантаження файлу цілком у пам'ять, перевірка типів і діапазонів на кожному рядку. Помилки збираються у звіт із номером рядка та причиною, а не валять імпорт цілком.
  4. Обробка конфліктів. Визначаємо поведінку при збігу ключів: оновити, пропустити, створити дубль. Це рішення фіксуємо до розробки — пізніше воно коштує найдорожче.
  5. Тестування імпорту на реальних файлах. Проганяємо вивантаження з усіх джерел, включно з «брудними»: биті кодування, зайві колонки, обрізані рядки. Звіряємо кількість і вміст записів до і після.
  6. Передача та документація. Віддаємо опис форматів, правил мапінгу та поведінки при помилках — щоб підтримку можна було вести без нас.

Порядок етапів невипадковий: аудит і мапінг знімають основну частину ризиків, а тестування на справжніх файлах ловить те, що не відтворюється на синтетиці. Опишіть ваші джерела — повернемося з оцінкою та планом робіт.

Артефакти та документація після впровадження імпорту

Після здачі проєкту у вас залишається не «чорна скринька», а комплект, за яким модуль імпорту можна розвивати, передавати іншій команді та підтримувати без нас. Усе, що ми проєктуємо під час робіт, фіксується в артефактах — від конфігурацій до інструкцій для ваших співробітників.

  • Модуль імпорту в кодовій базі — ізольований компонент із точками розширення: додавання нового формату або поля не потребує переписування логіки розбору.
  • Схеми мапінгу — опис відповідності колонок файлу та полів застосунку, включно з правилами приведення типів, значеннями за замовчуванням і обробкою необов'язкових стовпців.
  • Правила валідації — перелік перевірок на рівні рядка та файлу: обов'язкові поля, діапазони, дублікати, биті кодування. Із зазначенням, яка помилка блокує імпорт, а яка лише позначає запис.
  • Документація імпорту — як влаштований розбір, де зберігаються проміжні дані, як читати журнал помилок і за якими ознаками відрізняти збій формату від збою даних.
  • Інструкція користувача — покроковий сценарій для співробітника: який файл підготувати, які обмеження за обсягом і структурою, що робити при частково успішному імпорті.
  • Регламент оновлення — порядок дій при зміні структури файлу або полів застосунку: хто править схему мапінгу, як перевіряється сумісність зі старими вивантаженнями.
  • Набір тестових даних — еталонні файли з коректними та навмисно пошкодженими рядками, щоб регресія ловилася до виходу в прод.

Окремо передаємо журнал рішень: чому обрано таку стратегію розбору, які обмеження за розміром файлу і чому, де вузькі місця при зростанні обсягів. Це знімає головну проблему підтримки — коли через пів року ніхто не пам'ятає, чому правило валідації сформульовано саме так.

Комплект розрахований на те, що далі ви працюєте самостійно або з будь-якою іншою командою. Якщо знадобиться розширення — обговоримо задачу і повернемося з оцінкою та планом.

Кейс: прискорили імпорт прайс-листів у мобільному застосунку

Замовник — дистриб'ютор будівельних матеріалів — прийшов із класичним болем: менеджери вивантажували прайс із облікової системи в CSV на 40-60 тисяч рядків і завантажували його в мобільний застосунок прямо «в полі».

Імпорт ішов порядковим розбором на пристрої, без попередньої перевірки, і на середньому смартфоні займав 6-8 хвилин. Застосунок підвисав, частина сесій обривалася за таймаутом, а якщо у файлі траплялася зайва кома в назві товару, розбір мовчки ламався на середині.

Ми розібрали вузьке місце: клієнт парсив файл повністю в пам'ять і синхронно писав кожен рядок у локальну базу.

Переписали конвеєр — потоковий розбір CSV з пакетним записом транзакціями по 500 рядків, попередня валідація схеми й типів на перших рядках, а важкі файли йдуть на серверну обробку з поверненням готового набору.

Помилки тепер збираються у звіт за номерами рядків, і менеджер бачить, що саме не пройшло, замість порожнього екрана.

Метрики до і після

Показник До Після
Час імпорту прайсу на 50 тис. рядків 6-8 хвилин 20-40 секунд
Частка успішних імпортів з першого разу ~70% 98%
Звернення до підтримки щодо завантаження 30-40 на місяць поодинокі

Окремо закрили відкат: перед записом створюється знімок поточного каталогу, тому невдалий імпорт не залишає застосунок у напівзламаному стані — менеджер повертається до попередньої версії прайсу однією кнопкою.

Схожий конвеєр ми збирали для сервісу польових заявок на Android: там імпорт Excel-вивантажень скоротився з хвилин до секунд за того самого обсягу даних.

Чим відрізняється імпорт CSV від імпорту Excel на Android?

CSV — це плаский текстовий формат: рядки, розділені переведенням рядка, і колонки, розділені одним символом-роздільником (кома, крапка з комою, табуляція).

Жодної структури крім порядку колонок у ньому немає, тому парсинг на Android зводиться до коректного розбору роздільників, лапок і екранування: значення з комою всередині обов'язково має бути в лапках, інакше рядок «розвалиться» на зайві колонки.

Окремий головний біль — кодування: файли зі старих вивантажень приходять в однобайтових кодуваннях, і без явного визначення заголовок і кирилиця перетворюються на сміття. Ми визначаємо кодування за першими байтами і підстраховуємося ручним вибором, якщо автоматика не впевнена.

Excel — це вже не текст, а контейнер: книга, аркуші, типи комірок, формули, об'єднані комірки, стилі. Значення комірки може бути обчислюваним, і при читанні потрібно вирішити — брати збережений результат формули чи перераховувати.

Об'єднані комірки ламають табличну сітку: значення зберігається лише в лівій верхній комірці, а решта порожні, і при розборі це виглядає як пропуски даних. Парсер зобов'язаний «протягнути» значення на весь діапазон об'єднання, інакше рядки поїдуть. Плюс кілька аркушів і приховані рядки — потрібно заздалегідь домовитися, що саме вважається даними.

Практичний висновок: CSV дешевший і передбачуваніший у розборі, але бідний на структуру й типи — все приходить рядками, і приведення до чисел і дат лягає на застосунок. Excel багатший, але вимагає повноцінного читання книги та явних правил щодо формул, об'єднань і аркушів.

Надійне рішення — єдиний шар імпорту, який приводить обидва формати до однієї внутрішньої таблиці, а далі валідує рядки однаково. Так користувач може завантажити і csv, і excel, а логіка перевірки та помилок залишається спільною.

Часті технічні сумніви щодо імпорту даних

Імпорт CSV та Excel у мобільному застосунку майже ніколи не зводиться до «прочитати файл і записати рядки». Основні складнощі починаються на обсязі: файл на десятки тисяч рядків не можна тримати повністю в пам'яті — на слабкому пристрої процес вивантажується системою.

Тому потік читається порядково, буферизується й записується батчами в локальну базу в транзакції, а прогрес показується користувачеві. Так імпорт переживає і згортання застосунку, і нестачу пам'яті.

Окрема тема — нестабільна мережа та дублікати. Синхронізація йде ідемпотентними пакетами з ключем запису: повторне надсилання після обриву не створює копій, а конфлікти вирішуються за правилом «остання зміна перемагає» або за пріоритетом джерела.

Безпека закривається на рівні доступу до файлу, шифрування локального сховища та валідації кожного рядка до запису — биті та чужі дані відсікаються на вході, а не після.

Що буде, якщо користувач закриє застосунок під час імпорту?

Імпорт розбитий на короткі транзакції зі збереженням позиції. При повторному запуску процес продовжується з останнього успішно записаного рядка, а не починається заново — уже завантажені дані не дублюються.

Як застосунок відрізнить дублікат від нового запису?

За складеним ключем: наприклад, зовнішній ідентифікатор плюс джерело. Якщо запис із таким ключем уже є, він оновлюється, а не додається вдруге. Це робить повторний імпорт того самого файлу безпечним.

Файл надходить у неправильному кодуванні або з іншим роздільником — імпорт впаде?

Ні. Кодування та роздільник визначаються автоматично, а рядки з невідповідною кількістю колонок потрапляють у звіт про помилки з номером рядка, не перериваючи завантаження решти.

Чи можна обмежити, які дані користувач взагалі може імпортувати?

Так. Права перевіряються до читання файлу, а схема колонок валідується за шаблоном — зайві поля ігноруються, обов'язкові перевіряються на заповненість. Так чужий або пошкоджений файл не потрапить у базу.

Обговоримо ваше завдання щодо імпорту CSV в Android

Імпорт CSV в Android майже ніколи не зводиться до «прочитати файл і розкласти по колонках». Питання починаються з джерела даних: файл надходить з вивантаження 1С, Google Sheets, старої бази або його готує оператор вручну.

Від цього залежить кодування, розділювач, формат дат і те, наскільки брудні дані доведеться чистити на вході.

Щоб повернутися з оцінкою імпорту та планом робіт, а не із загальними словами, нам потрібно зрозуміти устрій вашого сценарію. Опишіть завдання — і ми розберемо його предметно.

Що варто уточнити на старті:

  • Звідки береться файл: ручне завантаження користувачем, скачування за посиланням або синхронізація із зовнішньою системою.
  • Обсяг і періодичність: разовий імпорт на кілька тисяч рядків або регулярне підкачування великих вивантажень.
  • Структура даних: скільки колонок, чи є вкладені довідники, обов'язкові поля, зв'язки між таблицями.
  • Що робити з помилковими рядками: відхиляти весь файл, пропускати биті записи або показувати звіт з номерами рядків.
  • Куди потрапляють дані: локальна база на пристрої, сервер або хмарне сховище, і чи потрібне зворотне вивантаження.
  • Вимоги до доступів: хто з користувачів має право завантажувати та змінювати дані.

Корисно заздалегідь підготувати зразок реального файлу — з тими самими колонками, кодуванням і «брудними» рядками, що й у роботі.

Один такий приклад знімає половину питань і робить оцінку точною: ми бачимо розділювачі, формати дат, дублікати й вирішуємо, де потрібна валідація, а де — нормалізація.

Далі ми повернемося з оцінкою та планом робіт: етапи, терміни, що робимо на стороні застосунку, а що на стороні сервера, і як перевіримо імпорт на ваших даних до релізу. Опишіть завдання у зручному форматі — листування, дзвінок або короткий опис із прикладом файлу.

Наші компетенції:

Останні роботи

  • Розробка мобільного додатка для компанії FEEDME
    Розробка мобільного додатка для компанії FEEDME
    1015
  • Розробка мобільного додатку для компанії XOOMER
    Розробка мобільного додатку для компанії XOOMER
    907
  • Розробка мобільного додатку для компанії RHL
    Розробка мобільного додатку для компанії RHL
    1338
  • Розробка мобільного додатку для компанії ZIPPY
    Розробка мобільного додатку для компанії ZIPPY
    1183
  • Розробка мобільного додатку для компанії Affhome
    Розробка мобільного додатку для компанії Affhome
    1113
  • Розробка мобільного додатку для компанії FLAVORS
    Розробка мобільного додатку для компанії FLAVORS
    720