invoice.func.php 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. <?php
  2. function formatExcelToArrayBank($file_url = ""){
  3. if (! file_exists ( $file_url )) {
  4. return array ();
  5. }
  6. Doo::loadClass ( 'PHPExcel1.7.9/PHPExcel' );
  7. $PHPExcel = new PHPExcel ();
  8. $PHPReader = new PHPExcel_Reader_Excel2007 ();
  9. if (! $PHPReader->canRead ( $file_url )) {
  10. $PHPReader = new PHPExcel_Reader_Excel5 ();
  11. if (! $PHPReader->canRead ( $file_url )) {
  12. echo 'no Excel';
  13. return;
  14. }
  15. }
  16. $PHPExcel = $PHPReader->load ( $file_url );
  17. /* * 读取excel文件中的第一个工作表 */
  18. $currentSheet = $PHPExcel->getSheet ( 0 );
  19. /* * 取得最大的列号 */
  20. $allColumn = $currentSheet->getHighestColumn ();
  21. /* * 取得一共有多少行 */
  22. $allRow = $currentSheet->getHighestRow ();
  23. $excel_array = array ();
  24. for($currentRow = 2; $currentRow <= $allRow; $currentRow ++) {
  25. $excel_column = array ();
  26. // 后期改进
  27. if ($allColumn == 'AM')
  28. $allColumn = 'Z';
  29. /* * 从第A列开始输出 */
  30. for($currentColumn = 'A'; $currentColumn <= $allColumn; $currentColumn ++) {
  31. $val = $currentSheet->getCellByColumnAndRow ( ord ( $currentColumn ) - 65, $currentRow )->getValue ();
  32. if ($val instanceof PHPExcel_RichText)
  33. $val = $val->__toString ();
  34. if ($currentColumn == 'A') {
  35. $excel_column ['receivablesPrice'] = $val;
  36. } elseif ($currentColumn == 'B')
  37. $excel_column ['receivablesMessage'] = $val;
  38. elseif ($currentColumn == 'C') {
  39. $excel_column ['receivablesBank'] = $val;
  40. } elseif ($currentColumn == 'D') {
  41. $excel_column ['receivablesDate'] = excelTime ( $val );
  42. }
  43. }
  44. if (! empty ( $excel_column ['receivablesPrice'] ) && ! empty ( $excel_column ['receivablesMessage'] ) && ! empty ( $excel_column ['receivablesBank'] )&& ! empty ( $excel_column ['receivablesDate'] ))
  45. array_push ( $excel_array, $excel_column );
  46. }
  47. return $excel_array;
  48. }
  49. function excelTime($date, $time = false) {
  50. if (function_exists ( 'GregorianToJD' )) {
  51. if (is_numeric ( $date )) {
  52. $jd = GregorianToJD ( 1, 1, 1970 );
  53. $gregorian = JDToGregorian ( $jd + intval ( $date ) - 25569 );
  54. $date = explode ( '/', $gregorian );
  55. $date_str = str_pad ( $date [2], 4, '0', STR_PAD_LEFT ) . "-" . str_pad ( $date [0], 2, '0', STR_PAD_LEFT ) . "-" . str_pad ( $date [1], 2, '0', STR_PAD_LEFT ) . ($time ? " 00:00:00" : '');
  56. return $date_str;
  57. }
  58. } else {
  59. $date = $date > 25568 ? $date + 1 : 25569;
  60. /* There was a bug if Converting date before 1-1-1970 (tstamp 0) */
  61. $ofs = (70 * 365 + 17 + 2) * 86400;
  62. $date = date ( "Y-m-d", ($date * 86400) - $ofs ) . ($time ? " 00:00:00" : '');
  63. }
  64. return $date;
  65. }
  66. ?>