PHPOffice / PHPExcel

ARCHIVED
Other
11.46k stars 4.2k forks source link

PHP Excel 1.8.2 Loss of precision when writing numeric strings #1427

Open myloveGy opened 5 years ago

myloveGy commented 5 years ago
Q A
Package version 1.8.2
PHP version 7.1.16

Actual Behaviour

When I used PHP Excel to write a large numeric string, I found that the behaviors of 1.8.1 and 1.8.2 were inconsistent. My code is as follows:

$objPHPExcel = new \PHPExcel();
        // Set document properties
        $objPHPExcel->getProperties()
            ->setCreator("REPORTINFO")
            ->setLastModifiedBy("VeryStar")
            ->setTitle("VeryStar REPORTINFO")
            ->setSubject("VeryStar REPORTINFO")
            ->setDescription("VeryStar REPORTINFO")
            ->setKeywords("VeryStar")
            ->setCategory("VeryStar");
        $sheet_num = 1;

        $phpExcelActiveSheet = $objPHPExcel->getActiveSheet();
        $objPHPExcel->setActiveSheetIndex(0)->setTitle('demo');
        $objPHPExcel->getActiveSheet()->getStyle('E')->getNumberFormat()->setFormatCode(\PHPExcel_Style_NumberFormat::FORMAT_NUMBER);
        $objPHPExcel->getActiveSheet()->getStyle('G')->getNumberFormat()->setFormatCode(\PHPExcel_Style_NumberFormat::FORMAT_NUMBER);
        $phpExcelActiveSheet->setCellValue('A' . $sheet_num, 'PHP Version');
        $phpExcelActiveSheet->setCellValue('B' . $sheet_num, 'System');
        $phpExcelActiveSheet->setCellValue('C' . $sheet_num, 'Excel Version');
        $phpExcelActiveSheet->setCellValue('D' . $sheet_num, 'test value 1');
        $phpExcelActiveSheet->setCellValue('E' . $sheet_num, 'test value 2');
        $phpExcelActiveSheet->setCellValue('F' . $sheet_num, 'test value 3');
        $phpExcelActiveSheet->setCellValue('G' . $sheet_num, 'test value 4');

        $sheet_num++;
        $phpExcelActiveSheet->setCellValue('A' . $sheet_num, PHP_VERSION);
        $phpExcelActiveSheet->setCellValue('B' . $sheet_num, PHP_OS);
        $phpExcelActiveSheet->setCellValue('C' . $sheet_num, '1.8.2');
        $phpExcelActiveSheet->setCellValue('D' . $sheet_num, '898350553311499'."\t");
        $phpExcelActiveSheet->setCellValue('E' . $sheet_num, '898350553311499');
        $phpExcelActiveSheet->setCellValue('F' . $sheet_num, '898350553311491'."\t");
        $phpExcelActiveSheet->setCellValue('G' . $sheet_num, '898350553311491');
        $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
        $file_name = '/data/demo-1.8.2.xlsx';
        $objWriter->save($file_name);

1.8.2 Write is the following data: demo-1.8.2.xlsx 1 8 2

The number is found to be rounded up according to the mantissa But 1.8.1 does not have this problem: demo-1.8.1.xlsx 1 8 1