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

Статья для тех, кому интересно кроссплатформенное чтение и запись 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 ни Винды.

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

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

4 Comments

  1. Ibrogim

    Велком

    Reply
  2. vano-ekt

    Опалихинская … с Заречного значит … 😀

    Reply
  3. vano-ekt

    зы, а заправляемся в Башнефти на Бебеля…

    «Деанонимизация программиста возможна не только через исходный код, но и через скомпилированный бинарный файл» (с) Хабр

    Reply
  4. Ibrogim

    (3) vano-ekt,

    а заправляемся в Башнефти на Бебеля

    Где же ещё, тамже рубль с литра скидка

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *