2016-09-23 39 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', 
       ], 


     ]);?>`