2017-02-07 2 views
0

7.0から7.1にPHPのバージョンをアップグレードすると問題が発生しました。 PHPExcel Laravelを使用してxlsファイルを作成/エクスポートしています。PHPExcelで正しくない数値が発生しましたLaravel

エラーメッセージは、「整形されていない数値が発生しました」です。 しかし、タイプをxlsからxlsxに変更しても、うまく動作していますが、フォーマットは正しくありません。 問題は私がPHP版をアップグレードしたためだと思います。

既にコードを変更しようとしますが、変更はすべて同じです。 誰でも手伝いできますか?

MyControllerは、次のようになります。

public function exportPo(Request $request) 
{ 
    try{ 
     if($request->getMethod() == 'POST'){ 
      $input = $request->all(); 

      $validator = Validator::make($input, [ 
       'start_date' => 'required|date', 
       'end_date' => 'required|date', 
      ]); 

      if ($validator->fails()) { 
       return redirect(route('export-po')) 
        ->withErrors($validator) 
        ->withInput(); 
      } 

      $postData = []; 
      $postData['search_term']['date'] = [ 
       'start_date'=> $input['start_date'], 
       'end_date'=> $input['end_date'] 
      ]; 

      if(count($postData) > 0){ 
       //Export the excel file here 
       $poList = EprocModel::getPostData('/listPurchaseOrder', $postData); 
       $poListArr = json_decode($poList, true); 
       if(isset($poListArr['data'])){ 
        $row = []; 
        foreach($poListArr['data'] as $data){ 
         switch($data['status_po']){ 
          case 0: 
           $status = 'Baru'; 
           break; 
          case 2: 
           $status = "Reject"; 
           break; 
          case 3: 
           $status = "Cancel"; 
           break; 
          case 1: 
           if(
            $data['status_shipping'] == 0 && 
            $data['status_payment_buyer'] == 0 && 
            $data['status_payment_seller'] == 0 
           ){ 
            $status = "Processing"; 
           } 
           if(
            $data['status_shipping'] == 1 && 
            $data['status_payment_buyer'] == 0 && 
            $data['status_payment_seller'] == 0 
           ){ 
            $status = "Shipping"; 
           } 

           if(
            $data['status_shipping'] == 2 && 
            $data['status_payment_buyer'] == 0 && 
            $data['status_payment_seller'] == 0 
           ){ 
            $status = "Shipping"; 
           } 

           if(
            $data['status_shipping'] == 2 && 
            $data['status_payment_buyer'] == 1 && 
            $data['status_payment_seller'] == 1 
           ){ 
            $status = "Closed"; 
           } 
           break; 
          default: 
           $status = "unknown"; 
           break; 
         } 
         $row[] = [ 
          'PO. No'=> $data['po_number'], 
          'PR. No'=> $data['pr_number'], 
          'Type (Direct/Indirect)'=> ($data['company_type'] == 1 ? "Direct" : "Indirect"), 
          'Requestor/Customer'=> $data['buyer_name'], 
          'Fulfillment'=> $data['seller_name'], 
          'Status'=>$status, 
          'Catatan Pembelian'=> $data['notes'] 
         ]; 
        } 
        Excel::create('purchase_order', function($excel) use ($row){ 
         $excel->sheet('purchase order', function($sheet) use ($row) { 
          $sheet->fromArray($row, null, 'A1', true, true); 

          //Change background color for the first row to grey 
          $sheet->row(1, function($row) { 
           $row->setBackground('#cccccc'); 

          }); 
         }); 
        })->export('xls'); 
       }else{ 
        \Session::flash('error', $poListArr['errors']['userMessage']); 
       } 
      } 
     } 
     Theme::asset()->serve('form'); 
     return $this->theme->scope('finances.exportPo')->render(); 
    }catch(\Exception $e){ 
     return $e->getMessage(); 
    } 
} 

マイセットアップ: Laravel 5.1 "maatwebsite /エクセル": "〜2.0"、 "phpoffice/phpword": "v0.13 *"、

+0

これは実際にはパッケージ内のバグです。こちらをご覧ください:https://github.com/PHPOffice/PHPExcel/issues/1110 – David

答えて

2

この場合、すべてのHTML構文をチェックして解決します。 例として、colspan/rowspanなどはすべての行ごとに標準を持つ必要があります。最初の行がcolspan 4を使用する必要がある場合は、後の行も同じ値でなければなりません。

したがって、すべてのHTML構文で異なるわけではありません。そして、輸出( 'xls')を輸出( 'xlsx')に変更すると、今すぐよく見えます。

関連する問題