phpExcel中的自定义单元格格式或掩码(GPS坐标)?

时间:2015-01-21 21:45:26

标签: gps format phpexcel masking

我正在尝试弄清楚如何使用自定义单元格格式或创建输入掩码,以便用户可以输入数据(32°12'13.44“,32°12'13.4”或32°12'13“)和不允许其他格式,这是为了避免错误,因为处理信息的应用程序需要符号(°,',“)来区分GPS坐标的每个位。

我看了this并试了一下:

#NumberFormat.php
const FORMAT_GPS                        = '##°##\'##.##\"';

控制器:

 $phpExcelObject->setActiveSheetIndex(0)
                    ->setCellValue('A1', '32° 12\' 13.44"')
                    ->setCellValue('B1', '32° 12\' 13.4"')
                    ->setCellValue('C1', '32° 12\' 13"');
            $phpExcelObject->getActiveSheet()->getStyle('A1:C2')->getNumberFormat()->applyFromArray(
                    array(
                        'code' => \PHPExcel_Style_NumberFormat::FORMAT_GPS
                    )
            );

注意:我不认为这是正确的......

然而,虽然单击“格式化单元格”时确实显示格式,但当用户输入与格式不匹配的值时,它不会执行任何操作。

我怎样才能做到这一点?有可能吗?

1 个答案:

答案 0 :(得分:1)

在MS Excel中,我可以使用类似的掩码:

##0"°"00"'"00\"

也许像

$objPHPExcel->setActiveSheetIndex(0)
    ->setCellValue('A1', 'Masked')
    ->setCellValue('B1', 'Degrees')
    ->setCellValue('C1', 'Minutes')
    ->setCellValue('D1', 'Seconds')
    ->setCellValue('E1', 'Decimal');
$objPHPExcel->setActiveSheetIndex(0)
    ->setCellValue('A2', 532128.8864)
    ->setCellValue('B2', '=FLOOR(A2/10000,SIGN(A2))')
    ->setCellValue('C2', '=MOD(FLOOR(ABS(A2)/100,1),100)')
    ->setCellValue('D2', '=MOD(ABS(A2),100)')
    ->setCellValue('E2', '=(ABS(B2)+C2/60+D2/3600)*SIGN(A2)')
    ->setCellValue('F2', 'Latitude');
$objPHPExcel->setActiveSheetIndex(0)
    ->setCellValue('A3', -21625.3338)
    ->setCellValue('B3', '=FLOOR(A3/10000,SIGN(A3))')
    ->setCellValue('C3', '=MOD(FLOOR(ABS(A3)/100,1),100)')
    ->setCellValue('D3', '=MOD(ABS(A3),100)')
    ->setCellValue('E3', '=(ABS(B3)+C3/60+D3/3600)*SIGN(A3)')
    ->setCellValue('F3', 'Longitude');
$objPHPExcel->getActiveSheet()
    ->getStyle('A2:A3')
    ->getNumberFormat()
    ->setFormatCode('##0"°"00"\'"00\"');

(在曼彻斯特机场等候时测试)