loadXLS.php 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203
  1. <?php
  2. include 'phpexcel/PHPExcel.php';
  3. include 'db.inc.php';
  4. ini_set('memory_limit', '256M');
  5. //for reference!
  6. $columns_to_fields = array(
  7. 'Division' => 'division',
  8. 'Consignee' => 'consignee',
  9. 'Called In' => 'date_called_in',
  10. 'Dispatch #' => 'dispatch_number',
  11. 'Shipper' => 'shipper',
  12. 'Ready' => 'date_ready',
  13. 'Address 1' => 'address_1',
  14. 'Address 2' => 'address_2',
  15. 'City' => 'city',
  16. 'ST' => 'state',
  17. 'Zip' => 'zip',
  18. 'Phone' => 'phone',
  19. 'Ready Time' => 'time_ready',
  20. 'Close Time' => 'time_close',
  21. 'Pickup Time' => 'time_pickup',
  22. 'Depart Time' => 'time_depart',
  23. 'BOL Delivered' => 'bol_delivered',
  24. 'Dispatch Refere' => 'dispatch_reference',
  25. 'Ctns' => 'ctns',
  26. 'Weight' => 'weight',
  27. 'Cube' => 'cube'
  28. );
  29. $fields_by_col = array();
  30. $id_company = 1;
  31. processFile('../test.xls', $id_company);
  32. function processFile($filename_report, $id_company)
  33. {
  34. global $dbh;
  35. //TODO: check if we already processed this file
  36. $stmt = $dbh->prepare("INSERT INTO records (
  37. id_company,
  38. division, consignee, date_called_in, dispatch_number, shipper, date_ready,
  39. address_1, address_2, city, state, zip, phone,
  40. time_ready, time_close, time_pickup, time_depart, bol_delivered,
  41. dispatch_reference,
  42. ctns, weight, cube
  43. ) VALUES (
  44. :id_company,
  45. :division, :consignee, STR_TO_DATE(:date_called_in, '%m/%d/%Y'), :dispatch_number, :shipper, STR_TO_DATE(:date_ready, '%m/%d/%Y'),
  46. :address_1, :address_2, :city, :state, :zip, :phone,
  47. :time_ready, :time_close, :time_pickup, :time_depart, :bol_delivered,
  48. :dispatch_reference,
  49. :ctns, :weight, :cube
  50. )");
  51. if(!$stmt)
  52. {
  53. echo "\nPDO::errorInfo():\n";
  54. print_r($dbh->errorInfo());
  55. return;
  56. }
  57. try
  58. {
  59. //this is necessary to dramatically reduce the memory footprint
  60. $cacheMethod = PHPExcel_CachedObjectStorageFactory::cache_to_phpTemp;
  61. $cacheSettings = array( ' memoryCacheSize ' => '8MB');
  62. PHPExcel_Settings::setCacheStorageMethod($cacheMethod, $cacheSettings);
  63. // figure out which type it is
  64. $type = PHPExcel_IOFactory::identify($filename_report);
  65. // create an excel reader object
  66. $reader = PHPExcel_IOFactory::createReader($type);
  67. $reader->setReadDataOnly(false);
  68. echo "Report detected as: $type\n";
  69. // load the file
  70. $excel = $reader->load($filename_report);
  71. // pull the 'call details' worksheet, which should be the only one
  72. $sheet = $excel->getSheet(0);
  73. // count the number of rows and columns
  74. $num_rows = $sheet->getHighestRow();
  75. $last_column = $sheet->getHighestColumn();
  76. // let's keep track of how many succeeded and failed
  77. $num_success = 0;
  78. $num_fail = 0;
  79. // pull column names
  80. $column_names = $sheet->rangeToArray('A1:' . $last_column . '1', NULL, TRUE, FALSE);
  81. $columns_by_names = array();
  82. //flip the column names to reflect the indexes
  83. foreach($column_names[0] as $index => $name)
  84. if($name && strlen(trim($name)))
  85. $columns_by_names[$name] = $index;
  86. // go through and read each row
  87. for($r = 2; $r <= $num_rows; $r++)
  88. {
  89. $range = 'A' . $r . ':' . $last_column . $r;
  90. echo "processing row #$r...";
  91. // read row of data into array
  92. $row_array = $sheet->rangeToArray($range, NULL, TRUE, TRUE);
  93. if(!count($row_array))
  94. {
  95. echo "no data\n";
  96. continue;
  97. }
  98. //pull the row out and format the nulls as needed
  99. $row = $row_array[0];
  100. for($c = 0; $c < count($row); $c++)
  101. $row[$c] = $row[$c] && strlen(trim($row[$c])) ? trim($row[$c]) : null;
  102. //skip if no data for first three columns
  103. if(!$row[0] && !$row[1] && !$row[2])
  104. {
  105. echo "SKIP\n";
  106. continue;
  107. }
  108. //bind appropriate values
  109. $params = array();
  110. $params[':id_company'] = $id_company;
  111. $params[':division'] = $row[0];
  112. $params[':consignee'] = $row[1];
  113. $params[':date_called_in'] = $row[2];
  114. $params[':dispatch_number'] = $row[3];
  115. $params[':shipper'] = $row[4];
  116. $params[':date_ready'] = $row[5];
  117. $params[':address_1'] = $row[6];
  118. $params[':address_2'] = $row[7];
  119. $params[':city'] = $row[8];
  120. $params[':state'] = $row[9];
  121. $params[':zip'] = $row[10];
  122. $params[':phone'] = $row[11];
  123. $params[':time_ready'] = $row[14] ? DateTime::createFromFormat('H:i A', $row[14])->format('H:i:s') : null;
  124. $params[':time_close'] = $row[15] ? DateTime::createFromFormat('H:i A', $row[15])->format('H:i:s') : null;
  125. $params[':time_pickup'] = $row[16] ? DateTime::createFromFormat('H:i A', $row[16])->format('H:i:s') : null;
  126. $params[':time_depart'] = $row[17] ? DateTime::createFromFormat('H:i A', $row[17])->format('H:i:s') : null;
  127. $params[':bol_delivered'] = $row[18];
  128. $params[':dispatch_reference'] = $row[35];
  129. $params[':ctns'] = $row[44];
  130. $params[':weight'] = $row[45];
  131. $params[':cube'] = $row[46];
  132. try
  133. {
  134. $stmt->execute($params);
  135. }
  136. catch(Exception $e)
  137. {
  138. echo 'FAIL: ' . $e->getMessage() . "\n";
  139. continue;
  140. }
  141. echo "OK\n";
  142. }
  143. }
  144. catch(Exception $e)
  145. {
  146. echo "Uncaught fatal error while attempting to process the downloaded report: " . $e->getMessage() . "\n";
  147. }
  148. }
  149. ?>