Импорт Excel в MySQL: дата вставлена ​​как 0000-00-00

Я использовал библиотеку PHPExcel для импорта файла Excel (.xlsx) и вставки в MySQL. Я столкнулся с двумя проблемами с полем даты:

1- В листе excel я пытаюсь изменить формат даты на нужный. После сохранения ячейки показывают формат, который мне нужен (yyyy/mm/dd), но когда я дважды щелкаю, чтобы отредактировать их, они снова возвращаются к тому, что было до (mm/dd/yyyy).

2- Когда файл импортируется в MySQL через PHPExcel, все столбцы вставляются правильно, кроме столбца даты, который вставляет 0000-00-00. Формат в таблице Excel такой же, как и в MySQL, но вводятся все нули.

Пожалуйста помоги!


person CobaltBabyBear    schedule 24.09.2013    source источник


Ответы (2)


Хранилище значений в PHPExcel представляет собой сериализованное значение даты и времени Excel (число с плавающей запятой, представляющее количество дней с 01.01.1900 или 01.01.9004, в зависимости от того, использовался ли календарь Windows или Mac). Изменение формата — это просто изменение способа отображения этого значения.

Вам нужно либо заранее узнать, содержит ли ячейка дату, либо проверить ее с помощью метода PHPExcel_Shared_Date::isDateTime() и соответствующим образом преобразовать. Затем вы можете либо получить его, используя getFormattedValue(), чтобы вернуть значение в виде форматированной строки; или используйте встроенные функции преобразования, чтобы преобразовать его в отметку времени unix (PHPExcel_Shared_Date::ExcelToPHP()) или объект PHP DateTime (PHPExcel_Shared_Date::ExcelToPHPObject()), который затем можно отформатировать с помощью стандартных функций форматирования даты PHP, прежде чем использовать его в ваших инструкциях MySQL INSERT/UPDATE.

person Mark Baker    schedule 25.09.2013
comment
Ну стреляй. Я преобразовывал свои листы Excel в CSV, а затем читал их, но я думаю, чтобы получить точные значения дат, мне все-таки придется использовать библиотеку Excel. - person andrewtweber; 19.02.2014

Измените формат даты на yyyy-mm-dd, сохраните файл в формате CSV и импортируйте его в свою базу данных.

person unique2    schedule 24.09.2013
comment
да. Формат, используемый для просмотра в Excel, не имеет ничего общего с тем, как он будет импортирован. Вам нужно изменить фактическое значение в файле Excel на гггг-мм-дд или сделать это преобразование самостоятельно перед вставкой в ​​БД. - person Mike Brant; 24.09.2013
comment
@MikeBrant Вот в чем проблема. Меняю фактическое значение на нужное и сохраняю. Но при повторном редактировании он возвращается к старому. - person CobaltBabyBear; 24.09.2013