Генератор отчёта

bzzi

Местный житель
Регистрация
5 Мар 2016
Сообщения
164
Реакции
21
Всем привет! В компании где я тружусь мне приходится делать отчёт в формате xlsx из разных других excel - евских файлов, что очень напрягает комп и то и дело какие-то косяки вылазят. Появилась задумка генерить всё это дело в web. Опыта такого нет и вот задумался с чего начать и может есть уже готовые инструменты?

Сервак для этого дела найдётся, думаю не очень много мощей для этого дела потребуется. Делать отчёт буду не только я, но и другие коллеги, которые совсем далеки от веба (я тоже далек, но кое-чего могу), так что нужно максимально простое решение, типа загрузить файл в формате csv, xml и далее из загруженных файлов выводилась таблица, а на основе этой таблицы другая и т.д.
 
Отличная идея! Веб-решение значительно упростит работу. Вот готовые инструменты и подходы:

🚀 Готовые решения (быстрый старт)​

1. Ragic (самый простой)​

  • Готовый конструктор баз данных в вебе
  • Импорт из Excel/CSV
  • Формулы, связи между таблицами
  • Бесплатно до 10 пользователей

2. Airtable

  • Гибрид Excel и базы данных
  • Простой интерфейс
  • Мощные возможности
  • Есть бесплатный тариф

3. Google Sheets + Apps Script

  • Знакомый интерфейс
  • Автоматизация через скрипты
  • Совместный доступ
  • Бесплатно

💻 Самописное решение на PHP (полный контроль)​

Быстрый старт:

php
<?php
// index.php - главная страница
if ($_FILES['csv_file']) {
$data = process_csv($_FILES['csv_file']['tmp_name']);
$_SESSION['report_data'] = $data;
header('Location: report.php');
}
?>
<form method="post" enctype="multipart/form-data">
<input type="file" name="csv_file" accept=".csv">
<button>Загрузить</button>
</form>

Обработка CSV:

php
function process_csv($file_path) {
$data = [];
if (($handle = fopen($file_path, "r")) !== FALSE) {
while (($row = fgetcsv($handle, 1000, ",")) !== FALSE) {
$data[] = $row;
}
fclose($handle);
}
return $data;
}

🛠️ Готовые библиотеки для PHP

Для работы с Excel:

  • PhpSpreadsheet - чтение/запись Excel файлов
  • League\Csv - работа с CSV
  • SimpleXLSX - легкая библиотека для XLSX
Установка через Composer:

bash
composer require phpoffice/phpspreadsheet
composer require league/csv

📊 Пример готового решения

Структура проекта:

text
/reports-app
├── index.php # Загрузка файлов
├── upload.php # Обработка загрузки
├── report.php # Просмотр отчета
├── export.php # Экспорт в Excel
└── config.php # Настройки

index.php (главная:(

php
<!DOCTYPE html>
<html>
<head>
<title>Система отчетов</title>
<link href="Для просмотра ссылки Войди или Зарегистрируйся" rel="stylesheet">
</head>
<body>
<div class="container mt-5">
<h2>Загрузка данных для отчета</h2>

<form action="upload.php" method="post" enctype="multipart/form-data" class="mb-4">
<div class="mb-3">
<label class="form-label">Выберите CSV файл:</label>
<input type="file" name="data_file" class="form-control" accept=".csv" required>
</div>
<button type="submit" class="btn btn-primary">Загрузить и обработать</button>
</form>

<?php if (isset($_SESSION['reports']):( ?>
<h3>Доступные отчеты:</h3>
<ul>
<?php foreach($_SESSION['reports'] as $report:( ?>
<li><a href="report.php?id=<?= $report['id'] ?>"><?= $report['name'] ?></a></li>
<?php endforeach; ?>
</ul>
<?php endif; ?>
</div>
</body>
</html>

upload.php (обработчик:(

php
<?php
session_start();
require_once 'vendor/autoload.php';

use PhpOffice\PhpSpreadsheet\IOFactory;

if ($_FILES['data_file']) {
$file = $_FILES['data_file']['tmp_name'];
$file_type = pathinfo($_FILES['data_file']['name'], PATHINFO_EXTENSION);

try {
if ($file_type === 'csv') {
$data = processCsv($file);
} elseif (in_array($file_type, ['xlsx', 'xls'])) {
$data = processExcel($file);
}

// Сохраняем в сессию
$report_id = uniqid();
$_SESSION['reports'][$report_id] = [
'id' => $report_id,
'name' => $_FILES['data_file']['name'],
'data' => $data,
'created' => date('Y-m-d H:i:s')
];

header("Location: report.php?id=$report_id");
exit;

} catch (Exception $e) {
die("Ошибка обработки файла: " . $e->getMessage());
}
}

function processCsv($file) {
$data = [];
if (($handle = fopen($file, "r")) !== FALSE) {
while (($row = fgetcsv($handle, 1000, ",")) !== FALSE) {
$data[] = $row;
}
fclose($handle);
}
return $data;
}

function processExcel($file) {
$spreadsheet = IOFactory::load($file);
$worksheet = $spreadsheet->getActiveSheet();

$data = [];
foreach ($worksheet->getRowIterator() as $row) {
$rowData = [];
$cellIterator = $row->getCellIterator();
$cellIterator->setIterateOnlyExistingCells(FALSE);

foreach ($cellIterator as $cell) {
$rowData[] = $cell->getCalculatedValue();
}
$data[] = $rowData;
}
return $data;
}
?>
 
Ну совет с разработкой на php хорош. Ну вообще на любом языке. Так как можно все под себя адаптировать. Но а если языкам программирования не обучен? Что теперь страдать? Сейчас набирает популярность Вайб-кодинг. С помощью ИИ можно создать нужную программу зная минимально язык программирования. Это наверное будет хороший вариант.
 
Назад
Сверху