4

У меня есть проект в Yii2, который использует библиотеку PHPExcel для чтения файла Excel. У меня есть Идентификатор транзакции столбец, содержащий данные в Общие сведения формат ячейки. Screenshoot моего файла Excel: enter image description herePHP: Как получить данные в виде строкового формата из данных Excel с научной нотацией/экспоненциальным форматом?

Вы можете видеть выше, если вход 15 знаков числа и поставить две точки внутри него. Он будет отображаться как номер.

Первый Ex: вход => 800.003.151476962 в ячейке показали, как image и в Formula Bar показал, как image

Но если входные 15 символов числа без точек внутри его будет отображаться как Научные обозначения/экспоненциальные.

Второй Ex: вход => 800003151476925 в ячейке показали, как image =>Scientific Notation/экспоненциальной формат данных и в Formula Bar показал, как image

Когда я пытаясь прочитать данные на моем PHP, мой PHP будет читать Второй пример данные как Scientific Notation/Exponential формат не как строка/число/десятичный знак.

Как я могу получить Second Ex данных в качестве (без строки материи или номера или десятичного формата) не 8.00003E + 14 в моем PHP?

Спасибо :)

ПРИМЕЧАНИЕ: На самом деле я прочитал и попробовать предложение в Convert exponential to a whole number in PHP, Convert exponential number to decimal in php, Convert exponential number to decimal in php, но я ничего не получил.

ответ

5

Если вы поместите 2 точки (десятичные точки) в значение, то это может быть только строка; поэтому MS Excel будет форматировать его General (форматирование ячейки по умолчанию для MS Excel) в виде строки. С помощью одной точки (десятичная точка) PHPExcel будет рассматривать ее как число и соответственно установить тип данных; и MS Excel увидит его как число с плавающей запятой, а правила форматирования MS Excel General будут форматировать его, используя научное форматирование, если оно больше стандартного 32-битного целочисленного размера, рассматривая его как float.

Если вы хотите форматировать строковое форматирование, вам нужно сделать это явно, установив его как строковый тип данных с помощью setCellValueExplicit(), чтобы заставить его быть установленным в виде строки; или задать формат маску, кроме General, таких как 0

$objPHPExcel->getActiveSheet()->getStyle('A9') 
    ->getNumberFormat() 
    ->setFormatCode(
     '0' 
    ); 
+0

Спасибо за знания :) Не может использовать ваш код выше только для записи файла Excel? – Blackjack

+1

Если вы читаете значение, то оно слишком велико для целого числа в 32-битном PHP и будет отображаться в научном формате в любом случае даже с 64-битным PHP, если вы просто эхо его (не имеет ничего общего с PHPExcel, просто базовым PHP). используйте функции '' sprintf() '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '', чтобы отображать его как целое число –

+0

Даже если ваше предложение не работает для моего дела, по крайней мере, я получаю новые знания, которые могут быть полезны в следующий раз. Спасибо: D Я пробовал отображать в виде строки с помощью 'sprintf', но он отображает строку ** 8.00003E + 14 ** в качестве строки, а не ** 800003151476922 ** как строку – Blackjack