2016-09-23 38 views
1

我在我的網格中使用擴展名yii2-export將數據導出到XLS和XLSX。無論我嘗試什麼,Excel都不會自動識別日期。我曾嘗試過以下列格式:Yii2,ExportMenu:如何格式化日期,Excel會自動將其識別爲日期?

'mydate', // yyyy-mm-dd 
'mydate:date', // dd.mm.yyyy 
[ 
    'attribute' => 'mydate', 
    'value' => function($model) { 
     return date("m/d/Y", strtotime($model->mydate)); 
    }, 
], // mm/dd/yyyy 

我想,我必須將日期標記爲日期。但是如何?

回答

1

你可以試試這個:

在網格配置中添加:

'onRenderDataCell' => function ($cell, $content, $model, $key, $index, $grid) { 
    if ($key == 'mydate') { 
     $cell->setValue(\PHPExcel_Shared_Date::PHPToExcel(\Yii::$app->formatter->asTimestamp($model->$key))); 
    } 
}, 

絕對 100%肯定,如果它的工作原理。一些命名空間修復可能也需要。這個想法是改變單元格的內容,我正在檢查PHPExcel回購的可能選項,但我沒有證實這一點。

從中幾個環節已採取:

+0

謝謝。它看起來很有希望。 –

+0

1.問題:$ key不返回屬性的名稱,而是返回行的ID。 –

+0

2.問題:$ cell-> setValue(\ PHPExcel_Shared_Date :: PHPToExcel(\ Yii :: $ app-> formatter-> asTimestamp('2016-01-01'))返回:'42370.394699074'並且不是Excel解釋 –

0

在你的模型,你應該提供的日期類似以下內容:

public function getDate(){ 
    return \PHPExcel_Shared_Date::PHPToExcel(Yii::$app->formatter->asTimestamp($this->date)); 

} 

您的excel導出包含特定列的常規列和格式化功能。

<?= ExportMenu::widget([ 
     'onRenderSheet' => function($sheet, $grid){ 
       $sheet->getStyle('What ever column it is(A, B, C, ..)')->getNumberFormat() 
        ->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_DATE_DDMMYYYY); 
       } 
     }, 

     'columns' => [      
       [ 
        'attribute' => 'date', 
        'label' => 'Datum', 
       ], 


     ]);?>`