gifts2017

Сервис для преобразования файла Тинькофф, или моя любовь к phpExcel

Опубликовал Иван Титов (Ibrogim) в раздел Обмен - Загрузка и выгрузка в Excel

Статья для тех, кому интересно кроссплатформенное чтение и запись Exсel файлов, а также для тех, кто пользуется табличкой Тинькова, чтобы следить за своим ежедневным бюджетом.

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

Однако расходы заносить вручную неудобно. Из интернет банка можно  расходы выгрузить в excel однако они сгруппированы не так как нужно для таблицы расходов. (Пример файла)

table1

 Нужно сгруппировать эту таблицу по датам, просуммировать по отрицательным значениям расходов, отсортировать в обратном порядке по датам и сконструировать общее описание для каждого дня (при этом некоторые расходы, такие как "снятие наличных" нужно пропустить).

Конечно, это можно сделать на vba в самом экселе за 10 минут (или сводными таблицами), но меня интересовала возможность php в данном вопросе, и я решил потратить денёк на изучение нового (для меня)

И вот что получилось:

Данный сервис помогает преобразовать в нужный вид расходы, вам останется только вставить данные в нужные колонки.

p.s. в файле никаких секретных данных не содержится, можете сами в этом убедиться, открыв его.

1. Выгружаем файл из интернет банка

2. Перетаскиваем файл на надпись "брось сюда файл" (или нажимаем кнопку "или выбери" и выбираем файл на диске)

3.Если всё получилось, то появится гиперссылка "обработанный файл", нажимаем.  (если ничего не получилось, то пишите на  info@gran-it.net с темой tcstransform)

В обработанном файле ячейки будут сгруппированы примерно так

table2

4. Вставляем нужные ячейки в ваш файл расходов.

Теперь немного о реализации

Для  обработки (чтения и записи) файлов excel я использовал замечательную библиотеку phpExcel

Вот немножго моего хард кода для чтения и записи:
function readExelFile($filepath){
require_once 'Classes/PHPExcel.php'; //подключаем наш фреймворк
date_default_timezone_set('UTC');
$ar=array(); // инициализируем массив
$inputFileType = PHPExcel_IOFactory::identify($filepath);  // узнаем тип файла, excel может хранить файлы в разных форматах, xls, xlsx и другие
$objReader = PHPExcel_IOFactory::createReader($inputFileType); // создаем объект для чтения файла
$objPHPExcel = $objReader->load($filepath); // загружаем данные файла в объект
$ar = $objPHPExcel->getActiveSheet()->toArray(); // выгружаем данные из объекта в массив
return $ar; //возвращаем массив
} 
 
function writeExelFile($filename,$ar){
require_once 'Classes/PHPExcel.php';
date_default_timezone_set('UTC');
$objPHPExcel = new PHPExcel();
$objPHPExcel->setActiveSheetIndex(0);
$active_sheet = $objPHPExcel->getActiveSheet();
$timestart=0;
$strk=2;
$strToline="";
$sumToline="=";
$active_sheet->getColumnDimension('H')->setWidth(80);
$active_sheet->setCellValue('G1','Дата');
$active_sheet->setCellValue('H1','Описание');
$active_sheet->setCellValue('I1','Траты');
foreach($ar as $ar_colls){
if ((!($ar_colls[8]=='Переводы/иб'))&&(!($ar_colls[2]=='FAILED'))&&(!($ar_colls[8]=='Наличные'))&&(!($ar_colls[4]>0))){
$str = $ar_colls[0];
if ($timestart==0){
$timestart=strtotime($str);
$dstart=date('d.m.Y',$timestart);
                  }
$curdata=strtotime($str);
$curd=date('d.m.Y',$curdata);
$sum=-1*$ar_colls[4];
if ($curd==$dstart){
if($strToline==''){$strToline=$ar_colls[8];} else{
$strToline=$strToline.'+'.$ar_colls[8];
}
$sumToline=$sumToline.'+'.$sum;
}  else {
	$active_sheet->setCellValue('G'.$strk,$dstart);
	$active_sheet->setCellValue('H'.$strk,$strToline);
	$active_sheet->setCellValue('I'.$strk,$sumToline);
	$sumToline="=".$sum;
	$strToline=$ar_colls[8];
	$strk++;
        }	
$dstart=$curd;                                                                                                                         }
	                }	
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
$objWriter->save('convert/'.$filename);
exit();
} 

Загрузка файла на сервер и Drag&Drop реализованы через плагин jQuery File Upload, индикация загрузки через jQuery Knob

Вывод: С помощью phpExcel и минимальных знаний php, можно организовать любую обработку файлов excel причём даже еслу у вас нет ни Excel ни Винды.

Ещё раз, ссылка на сервис

Приветствуются комментарии.

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Иван Титов (Ibrogim) 19.08.16 11:47
2. Ivan Khorkov (vano-ekt) 19.08.16 12:19
Опалихинская ... с Заречного значит ... :-D
3. Ivan Khorkov (vano-ekt) 19.08.16 12:25
зы, а заправляемся в Башнефти на Бебеля...
"Деанонимизация программиста возможна не только через исходный код, но и через скомпилированный бинарный файл" (с) Хабр
4. Иван Титов (Ibrogim) 19.08.16 12:44
(3) vano-ekt,
а заправляемся в Башнефти на Бебеля
Где же ещё, тамже рубль с литра скидка
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа