A meno che non si sta usando "Advanced Valore Binder" di PHPExcel, allora $ a foglio> setCellValueByColumnAndRow ($ colonna, $ row, '2010-07-16'); memorizzerà il valore come una stringa, non come una data, quindi il formato della data impostato nella riga successiva non ha senso se applicato a una stringa finché non si legge il file risultante in Excel e si impone un aggiornamento ... Excel stesso quindi corregge il tuo errore.
Per garantire che il valore sia archiviato correttamente, è necessario archiviarlo come data/timestamp/numero anziché una stringa, quindi impostare la maschera di formattazione per garantire che venga trattata come data/ora piuttosto che un valore numerico.
O convertire la stringa in una data PHP utilizzando strtotime(), quindi utilizzare di PHPExcel costruito in data metodi di conversione:
$PHPDateValue = strtotime('2010-07-16');
$ExcelDateValue = PHPExcel_Shared_Date::PHPToExcel($PHPDateValue);
$sheet->setCellValueByColumnAndRow($column, $row, $ExcelDateValue);
$sheet->getStyleByColumnAndRow($column, $row)->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_DATE_DMYSLASH);
o utilizzare il metodo built-in per convertire una stringa data-formattata in un Excel valore datetime direttamente
$dateString = '2010-07-16';
$ExcelDateValue = PHPExcel_Shared_Date::stringToExcel($dateString);
$sheet->setCellValueByColumnAndRow($column, $row, $ExcelDateValue);
$sheet->getStyleByColumnAndRow($column, $row)->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_DATE_DMYSLASH);
o utilizzare) la funzione del libreria di funzioni motori di calcolo DATEVALUE (:
$dateString = '2010-07-16';
$ExcelDateValue = PHPExcel_Calculation_Functions::DATEVALUE($dateString);
$sheet->setCellValueByColumnAndRow($column, $row, $ExcelDateValue);
$sheet->getStyleByColumnAndRow($column, $row)->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_DATE_DMYSLASH);
o, l'opzione 4, è quello di utilizzare "Valore avanzata Binder" di PHPExcel
Per abilitare questa funzione, eseguire la seguente chiamata statica
PHPExcel_Cell::setValueBinder(new PHPExcel_Cell_AdvancedValueBinder());
prima di istanzia l'oggetto cartella di lavoro o caricarlo da file
Poi PHPExcel identificherà che il valore è una data, e gestire la conversione di un Excel data/ora e data e formattare automaticamente
$dateString = '2010-07-16';
$sheet->setCellValueByColumnAndRow($column, $row, $dateString);
Questa è un'ottima risposta. Grazie! – ISBL
Non può essere sbagliato se viene risposto da uno dei creativi di PHPExcel da solo –