Всем доброго времени суток. Коротко о проблеме. Есть скрипт который должен парсить *.xls и *.xlsx с помощью библиотеки PHPExcel. Файлы с расширением *.xls обрабатываются и вставляются в таблицу норм, но при выборе файла с расширением *.xlsx (данные в файлах одинаковые), возникают проблемы. Вот что паказуе Друпал 7 при импорте *.xlsx файла.
Warning: DOMDocument::loadHTML() [domdocument.loadhtml]: Invalid char in CDATA 0x4 in Entity, line: 1 in PHPExcel_Reader_HTML->loadIntoExisting() (line 495 of Z:\home\drupal7\www\sites\default\files\PHPExcel\PHPExcel\Reader\HTML.php).
Warning: DOMDocument::loadHTML() [domdocument.loadhtml]: Invalid char in CDATA 0x14 in Entity, line: 1 in PHPExcel_Reader_HTML->loadIntoExisting() (line 495 of Z:\home\drupal7\www\sites\default\files\PHPExcel\PHPExcel\Reader\HTML.php).
а в таблицу, во все поля вставляется вот это - "PK". Незнаю что это значит. Помогите, уже почти два дня решаю эту проблему. Я думаю это проблемы с PHPExcel (у меня версия PHPExcel 1.8.0).
Комментарии
Простите, забыл добавить скрипт
<?php
$rowIterator = $sheet->getRowIterator();
function asd_cron(){
$files = file_scan_directory("public://test",
"/.*\.xls/");
require_once("public://PHPExcel/PHPExcel/IOFactory.php");
foreach ($files as $file) {
$xls = PHPExcel_IOFactory::load("public://test/test1.xlsx");
$xls->setActiveSheetIndex(0);
$sheet = $xls->getActiveSheet();
$colspan = array('tovar', 'price', 'qty', 'article', 'original', 'price', 'title', 'brand', 'marka', 'model', 'descr');
foreach ($rowIterator as $row) {
$query = array();
$k = 0;
$cellIterator = $row->getCellIterator();
foreach ($cellIterator as $cell) {
$col = $cell->getCalculatedValue();
db_insert("test")
->fields(array(
'tovar' => $col,
'price' => $col,
))
->execute();
}
}
}
return false;
}
?>
Сегодня так же столкнулся с ошибкой (HTML.php:495) правда не на drupal а на своем проекте.
Методом "научного тыка" выяснил что дання проблема появляется если в имени файле есть UTF символы или русские символы.
Исправил путем переименования загружаемого файла.
Строка 495:
<?php$loaded = $dom->loadHTML(mb_convert_encoding($this->securityScanFile($pFilename), 'HTML-ENTITIES', 'UTF-8'));?>
В вашем случаи нету русских символов, но мне кажется что данной функции не нравится путь к фалу...