phpExcel 中的自定义单元格格式或掩码(GPS 坐标)?
custom cell format or mask (GPS coordinates) in phpExcel?
我正在尝试弄清楚如何使用自定义单元格格式或创建输入掩码以便用户可以输入数据(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
)
);
注意:我认为不正确...
然而,尽管它在单击 'Format cells' 时确实显示格式,但当用户输入与格式不匹配的值时,它不会执行任何操作。
我怎样才能做到这一点?可能吗?
在 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\"');
(在曼彻斯特机场等待时测试)
我正在尝试弄清楚如何使用自定义单元格格式或创建输入掩码以便用户可以输入数据(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
)
);
注意:我认为不正确...
然而,尽管它在单击 'Format cells' 时确实显示格式,但当用户输入与格式不匹配的值时,它不会执行任何操作。
我怎样才能做到这一点?可能吗?
在 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\"');
(在曼彻斯特机场等待时测试)