2016-03-23 35 views
1

Neyin var! PhpExcel ile uzun bir tabloyu xlsx'den csv'ye dönüştürüyorum. Her şey iyiydi, ama şimdi biraz şaşırdım çünkü son dosyamda 772,68'den 772.6799999999999'a bir değer değişti.PhpExcell benim dönüştürülmüş dosyamdaki bir değeri değiştiriyor

Raporlama için CSV dosyalarını kullanıyorum ve bu değer çok uzun ve (uzaktan) yorumlayıcı bunu anlayamıyor.

Ne olduğunu anlayamıyorum.

function convertXLStoCSV($infile,$outfile) { 
    $fileType = PHPExcel_IOFactory::identify($infile); 
    $objReader = PHPExcel_IOFactory::createReader($fileType); 
    $objReader->setReadDataOnly(true); 


    $objPHPExcel = $objReader->load($infile); 
    $max = $objPHPExcel->setActiveSheetIndex(0)->getHighestRow(); 

    $objPHPExcel->getActiveSheet()->getStyle('B2:B'.$max.'')->getNumberFormat()->setFormatCode('YYYY.MM.DD'); 
    $objPHPExcel->getActiveSheet()->getStyle('AP2:AP'.$max.'')->getNumberFormat()->setFormatCode('YYYY.MM.DD'); 
    $objPHPExcel->getActiveSheet()->getStyle('AQ2:AQ'.$max.'')->getNumberFormat()->setFormatCode('YYYY.MM.DD'); 


    $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'CSV'); 
    $objWriter->setDelimiter(';'); 
    $objWriter->save($outfile); 

} 

cevap

0

PHPExcel herhangi bir değer değişmedi: Burada

kaynağıdır. Yüklediğiniz dosyada depolanan değer 772.6799999999999 kayan nokta değeridir, muhtemelen orijinal dosyada yalnızca 2dp'ye görüntülemek için bir sayı biçimi maskesine sahiptiniz, ancak sayı biçimi maskelerini yüklemediğiniz için (çünkü $objReader->setReadDataOnly(true); kullanıyorsunuz), csv olarak kaydettiğinizde bu maskeleme uygulanamaz.

+0

Teşekkürler. Bir diğer çözüm bulmak: bu benim için çalıştı edilir: \t $ objPHPExcel-> getActiveSheet() -> getStyle (.. 'AO2: AO' $ max '') -> getNumberFormat() -> setFormatCode (PHPExcel_Style_NumberFormat :: FORMAT_NUMBER_00); –

+0

Bir sayı biçimi maskesinin uygulandığından emin olmanız sorunu çözecektir, ister orijinal dosyadan maske olsun, isterse de kaydetmeden önce kendinizi uyguladığınızdan –