Прочитав статью У вас меньше денег, чем вы думаете стал пользоваться их замечательной табличкой.
Однако расходы заносить вручную неудобно. Из интернет банка можно расходы выгрузить в excel однако они сгруппированы не так как нужно для таблицы расходов. (Пример файла)
Нужно сгруппировать эту таблицу по датам, просуммировать по отрицательным значениям расходов, отсортировать в обратном порядке по датам и сконструировать общее описание для каждого дня (при этом некоторые расходы, такие как «снятие наличных» нужно пропустить).
Конечно, это можно сделать на vba в самом экселе за 10 минут (или сводными таблицами), но меня интересовала возможность php в данном вопросе, и я решил потратить денёк на изучение нового (для меня)
И вот что получилось:
Данный сервис помогает преобразовать в нужный вид расходы, вам останется только вставить данные в нужные колонки.
p.s. в файле никаких секретных данных не содержится, можете сами в этом убедиться, открыв его.
1. Выгружаем файл из интернет банка
2. Перетаскиваем файл на надпись «брось сюда файл» (или нажимаем кнопку «или выбери» и выбираем файл на диске)
3.Если всё получилось, то появится гиперссылка «обработанный файл», нажимаем. (если ничего не получилось, то пишите на info@gran-it.net с темой tcstransform)
В обработанном файле ячейки будут сгруппированы примерно так
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 ни Винды.
Приветствуются комментарии.
Велком
Опалихинская … с Заречного значит … 😀
зы, а заправляемся в Башнефти на Бебеля…
«Деанонимизация программиста возможна не только через исходный код, но и через скомпилированный бинарный файл» (с) Хабр
(3) vano-ekt,
Где же ещё, тамже рубль с литра скидка