getExcel.php 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. <?php
  2. require '../../../vendor/autoload.php';
  3. include("../sql.php");
  4. use PhpOffice\PhpSpreadsheet\Spreadsheet;
  5. use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
  6. $ajax = array();
  7. $errorLists = array();
  8. $connectionInfo = array("Database" => "$dbname", "UID" => "$username", "PWD" => "$password", "CharacterSet" => "UTF-8");
  9. $conn = sqlsrv_connect($hostname, $connectionInfo);
  10. if ($conn === false) {
  11. die(print_r(sqlsrv_errors(), true));
  12. }
  13. $fileinfo = array(array("計畫編號", "計畫名稱", "工程類別", "此計畫是否匯入過"));
  14. $file = '00000.xlsx';
  15. if (isset($_GET['file'])) {
  16. $file = "uploads/{$_GET['file']}";
  17. }
  18. $test = '';
  19. $isImport = '是';
  20. $isImportArray = array();
  21. $project_id = $_GET['projectId'];
  22. $category_id = $_GET['categoryId'];
  23. $sql = "SELECT TOP 1 [project_id] FROM [21000X].[dbo].[File_Table] WHERE [project_id] = '{$project_id}'";
  24. $fetchResult = sqlsrv_query($conn, $sql);
  25. $row = sqlsrv_fetch_array($fetchResult);
  26. if (empty($row)) {
  27. $isImport = '否';
  28. }
  29. $sql = "SELECT [category_name] FROM [Construction_Category] WHERE [category_id] = '{$category_id}'";
  30. $fetchResult = sqlsrv_query($conn, $sql);
  31. $category = sqlsrv_fetch_array($fetchResult)[0];
  32. $sql = "SELECT [project_name] FROM [Project_Table] WHERE [project_id] = '{$project_id}'";
  33. $fetchResult = sqlsrv_query($conn, $sql);
  34. $project_name = sqlsrv_fetch_array($fetchResult)[0];
  35. array_push($fileinfo, array($project_id, $project_name, $category, $isImport));
  36. $importinfo = array(array("類別", "選擇檔案類型"/*, "是否為新的類型"*/));
  37. $statuses["匯入資訊"] = "info";
  38. $extension = pathinfo($file, PATHINFO_EXTENSION);
  39. $ajax["匯入資訊"] = $fileinfo;
  40. if ('csv' == $extension) {
  41. $reader = new \PhpOffice\PhpSpreadsheet\Reader\Csv();
  42. } else if ('xls' == $extension) {
  43. $reader = new \PhpOffice\PhpSpreadsheet\Reader\Xls();
  44. } else
  45. $reader = new \PhpOffice\PhpSpreadsheet\Reader\Xlsx();
  46. $reader->setReadDataOnly(true);
  47. $reader->setReadEmptyCells(false);
  48. $spreadsheet = $reader->load($file);
  49. $sheetCount = $spreadsheet->getSheetCount();
  50. $all = $spreadsheet->getSheetNames();
  51. for ($s = 0; $s < $sheetCount; $s++) {
  52. if (str_contains($all[$s], "_")) {
  53. $Category = explode("_", $all[$s])[1];
  54. } else if (str_contains($all[$s], ".")) {
  55. $Category = explode(".", $all[$s])[1];
  56. } else {
  57. $Category = $all[$s];
  58. }
  59. $sql = "IF NOT EXISTS (SELECT [type_id] FROM [File_Category] WHERE [type_name] = '{$Category}')
  60. BEGIN
  61. SELECT '是'
  62. END
  63. ELSE
  64. BEGIN
  65. SELECT '否'
  66. END";
  67. $fetchResult = sqlsrv_query($conn, $sql);
  68. while ($row = sqlsrv_fetch_array($fetchResult)) {
  69. array_push($isImportArray, $row[0]);
  70. }
  71. }
  72. for ($s = 0; $s < $sheetCount; $s++) {
  73. $status = 'success';
  74. $normalCheck = "";
  75. $blueprintCheck = "";
  76. $cancelCheck = "";
  77. $sheet = $spreadsheet->getSheet($s);
  78. $sheetName = $spreadsheet->getSheetNames()[$s];
  79. $fileCol = '0';
  80. $sheetName = str_replace('&','及',$sheetName);
  81. $sheetName = str_replace(' ','',$sheetName);
  82. if (str_contains($sheetName, '成果圖') || str_contains($sheetName, '設計圖')) {
  83. $fileCol = 'F';
  84. $blueprintCheck = "checked='checked'";
  85. } else {
  86. $fileCol = 'C';
  87. $normalCheck = "checked='checked'";
  88. }
  89. if (str_contains($sheetName, '目錄') || str_contains($sheetName, '注意')) {
  90. $cancelCheck = "checked='checked'";
  91. $fileCol = '0';
  92. }
  93. $cellCollection = $sheet->getCellCollection();
  94. $column = $cellCollection->getHighestRowAndColumn();
  95. $data = array();
  96. $error = "";
  97. for ($i = 1; $i <= $column['row']; $i++) { //行
  98. $row = array();
  99. for ($j = 'A'; $j <= $column['column']; $j++) { //列
  100. $key = $j . $i;
  101. $value = $sheet->getCell($key)->getValue();
  102. if ($value === null & $status != 'error') {
  103. $status = 'warning';
  104. //$test = "key: ".$key." value: ".$value;
  105. }
  106. if ($fileCol != '0') {
  107. if ($j == $fileCol & $i > 1) {
  108. if (!is_file('../../../assets/建置資料/' . $category . '/' . $project_id . '-' . $project_name . $value)) {
  109. $error = $error.','.$i-2; //扣掉欄位名稱及從零開始計算
  110. $status = 'error';
  111. }
  112. }
  113. }
  114. array_push($row, $value);
  115. }
  116. array_push($data, $row);
  117. }
  118. $ajax[$sheetName] = $data;
  119. $statuses[$sheetName] = $status;
  120. //array_push($statuses, $status);
  121. array_push($importinfo, array($sheetName, "<input type='radio' id='normal{$s}' name='type{$s}' value='[File_Table]' {$normalCheck}>
  122. <label for='normal{$s}'>一般檔案</label><br>
  123. <input type='radio' id='blueprint{$s}' name='type{$s}' value='[Blueprint]' {$blueprintCheck}>
  124. <label for='blueprint{$s}'>設計圖或成果圖</label><br>
  125. <input type='radio' id='cancel{$s}' name='type{$s}' value='cancel' {$cancelCheck}>
  126. <label for='cancel{$s}'>不進行匯入</label> "/*, $isImportArray[$s]*/));
  127. $errorLists[$sheetName] = $error;
  128. }
  129. $data["table"] = $ajax;
  130. $data["info"] = $importinfo;
  131. $data["statuses"] = $statuses;
  132. $data["errorLists"] = $errorLists;
  133. echo json_encode($data, JSON_UNESCAPED_UNICODE);
  134. sqlsrv_close($conn);