Експорт даних (CSV, Excel) з мобільного додатку: реалізація

Реалізація експорту даних (CSV, Excel) з мобільного додатку Користувач натискає «Експортувати» — і чекає. Якщо у нього 5000 рядків у локальній SQLite або Room-базі, а експорт відбувається на main thread, додаток завмирає на секунди три, а на старих пристроях ANR (Application Not Responding) не зм

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

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

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

Послуги, які ми пропонуємо
Показано 1 з 1Усі 1734 послуг
Експорт даних (CSV, Excel) з мобільного додатку: реалізація
Простий
~2-3 дні

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

Часті запитання

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

  • image_mobile-applications_feedme_467_0.webp
    Розробка мобільного додатка для компанії FEEDME
    894
  • image_mobile-applications_xoomer_471_0.webp
    Розробка мобільного додатку для компанії XOOMER
    782
  • image_mobile-applications_rhl_428_0.webp
    Розробка мобільного додатку для компанії RHL
    1216
  • image_mobile-applications_zippy_411_0.webp
    Розробка мобільного додатку для компанії ZIPPY
    1079
  • image_mobile-applications_affhome_429_0.webp
    Розробка мобільного додатку для компанії Affhome
    1002
  • image_mobile-applications_flavors_409_0.webp
    Розробка мобільного додатку для компанії FLAVORS
    597

Реалізація експорту даних (CSV, Excel) з мобільного додатку

Користувач натискає «Експортувати» — і чекає. Якщо у нього 5000 рядків у локальній SQLite або Room-базі, а експорт відбувається на main thread, додаток завмирає на секунди три, а на старих пристроях ANR (Application Not Responding) не змусить себе чекати. Це перша і найчастіша помилка при реалізації експорту. Ми у своїй практиці стикаємося з такими ситуаціями постійно і виробили надійний підхід, який гарантує стабільну роботу навіть на пристроях з 2 ГБ ОЗУ.

Наші інженери з семирічним досвідом у мобільній розробці виконали понад 50 проектів з експортом даних. Кожен проект проходив через тестування на реальних даних з обсягом до 500 000 рядків. Зв'яжіться з нами — розберемо вашу архітектуру за 30 хвилин.

Чому кодування — це пасткаCSV — це пастка. Excel у Windows за замовчуванням очікує кодування Windows-1252 та роздільник `;`, а не `,`. Якщо віддати UTF-8 без BOM — кирилиця перетворюється на кракозябри. Правильний CSV для Excel: UTF-8 з BOM (`\uFEFF` на початку файлу) та роздільник `;`. Або одразу експортувати `.xlsx` через бібліотеку.

Що на практиці ламається найчастіше

Блокування UI при генерації файлу. Серіалізація 10 000 рядків у CSV — це не «миттєва операція». На Android потрібен CoroutineScope(Dispatchers.IO), на iOS — DispatchQueue.global(qos: .userInitiated). Генерацію файлу завжди виносимо у фоновий потік, результат повертаємо через callback або Flow.

Кодування та роздільник. CSV — це пастка. Excel у Windows за замовчуванням очікує кодування Windows-1252 та роздільник ;, а не ,. Якщо віддати UTF-8 без BOM — кирилиця перетвориться на кракозябри прямо в офісі клієнта. Правильний CSV для Excel: UTF-8 з BOM (\uFEFF) та роздільник ;. Або одразу експортувати .xlsx через бібліотеку.

Експорт в Excel (.xlsx). На Android використовуємо Apache POI або легший FastExcel. На iOS — xlsxwriter через Swift Package або власний XML-генератор (.xlsx — це ZIP з XML-файлами всередині). Для React Native є react-native-xlsx поверх js-бібліотеки xlsx.

Як ми будуємо експорт

Схема проста: читаємо дані з локальної БД → трансформуємо в модель рядка → пишемо у файл → ділимося через системний ShareSheet / Intent.ACTION_SEND.

На Android з Room це виглядає так:

viewModelScope.launch(Dispatchers.IO) { val rows = database.transactionDao().getAll() val file = CsvExporter.export(rows, context.cacheDir) withContext(Dispatchers.Main) { shareFile(file, "text/csv") } } 

На iOS аналогічно через Task.detached:

Task.detached(priority: .userInitiated) { let rows = await store.fetchAll() let url = try CsvExporter.write(rows, to: .cachesDirectory) await MainActor.run { presentShareSheet(url) } } 

Для .xlsx на iOS генеруємо XML-структуру вручну або через CoreXLSX / xlsxwriter. Для простих таблиць — XML-підхід швидше і без залежностей.

Прогрес при великому обсязі

Якщо рядків більше 50 000 — показуємо ProgressView з реальним відсотком. На Android через StateFlow<Int> у ViewModel, на iOS через @Published var progress: Double. Пишемо файл батчами по 1000 рядків, оновлюємо лічильник після кожного батча.

Формат файлу та Share

Після генерації файл кладемо в cacheDir (Android) або FileManager.default.temporaryDirectory (iOS). Ділимося через:

  • Android: FileProvider + Intent.ACTION_SEND з правильним MIME-типом (text/csv або application/vnd.openxmlformats-officedocument.spreadsheetml.sheet)
  • iOS: UIActivityViewController з [fileURL]

Не зберігаємо в Downloads без явного запиту користувача — це порушує гайдлайни обох платформ.

Чому експорт на фоновому потоці критичний?

Будь-яка робота з I/O та серіалізацією повинна бути винесена з головного потоку. На практиці це скорочує час відгуку додатку в 5–10 разів для вивантажень від 10 000 рядків. Наші інженери перевіряють це на кожному проекті.

Як коректно відображати кирилицю в CSV для Excel?

Використовуйте UTF-8 з BOM та крапку з комою як роздільник. Альтернатива — експорт у .xlsx, де кодування не викликає проблем. У нас є досвід адаптації експорту для локальних ринків, включаючи кирилицю та азійські символи.

Покрокова інструкція з реалізації експорту

  1. Вибір формату (CSV або XLSX) та узгодження структури колонок.
  2. Читання даних з БД у фоновому потоці.
  3. Генерація файлу з коректним кодуванням та роздільниками.
  4. Відображення прогресу при великих обсягах.
  5. Шаринг через системний діалог.

Що входить у роботу

  • Вибір формату (CSV / XLSX) та узгодження структури колонок.
  • Фонова генерація файлу без блокування UI.
  • Коректне кодування та локалізація роздільників.
  • Індикатор прогресу для великих вивантажень.
  • Шаринг через системний ShareSheet / Intent.
  • Тести на реальних обсягах даних.

Терміни

Простий CSV-експорт з готової бази даних: 0,5–1 день. З вибором формату (CSV/XLSX), фільтрами за діапазоном дат та прогресом: 1,5–2 дні. Вартість розраховується після аналізу структури даних — оцінимо проект безкоштовно. Зв'яжіться з нами, щоб обговорити вашу задачу. Отримайте консультацію по вашому проекту — ми допоможемо обрати формат та оцінимо обсяг робіт.

Формат Складність реалізації Підтримка форматування Залежності
CSV Низька Немає Мінімум
XLSX Середня Так Бібліотеки Apache POI / xlsxwriter
Обсяг даних Рекомендований формат Приблизний час генерації
< 10 000 CSV або XLSX < 1 секунди
10 000 – 100 000 XLSX 1–10 секунд
> 100 000 CSV (батчами) 10+ секунд, потрібен прогрес