Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
 
Фильтр авторов:    показать 
  скрыть
  Ответ в темуСоздание новой темыСоздание опроса

> PHPExcel и MS Office 2007, Не считываются файлы созданные в 2007 офисе.
JohnBraxton  
 ۩     Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Старик
***

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 145
Пользователь №: 26458
На форуме: 5 лет, 9 месяцев, 18 дней
Карма: 1




Всем доброго времени суток!
Ни кто не сталкивался с такой проблемой, при считывании файла екселя созданного в 2007 офисе, выдает такую ошибку:

Fatal error: Uncaught exception 'PHPExcel_Exception' with message 'You tried to set a sheet active by the out of bounds index: 0. The actual number of sheets is 0.' in /PHPExcel.php:688 Stack trace: #0 /upload.php(46): PHPExcel->setActiveSheetIndex(0) #1 /upload.php(192): getXLS('C:\inetpub\wwwr...') #2 {main} thrown in /PHPExcel.php on line 688


Файлы созданные в 2010 и выше, корректно считываются.
Помогите побороть.
PMПисьмо на e-mail пользователюСайт пользователяICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
redreem  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 4259
Пользователь №: 29002
На форуме: 5 лет, 4 месяца, 10 дней
Карма: 147




посмотри какие коллекции возвращает
print_r( $xls_object->getAllSheets() );
в разных версиях офиса.
похоже ты обращаешься к вкладке по индексу, которого не существует
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
JohnBraxton  
 ۩  [x] Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Старик
***

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 145
Пользователь №: 26458
На форуме: 5 лет, 9 месяцев, 18 дней
Карма: 1




Цитата (redreem @ 25.12.2015 - 06:41)
посмотри какие коллекции возвращает
print_r( $xls_object->getAllSheets() );
в разных версиях офиса.
похоже ты обращаешься к вкладке по индексу, которого не существует

2007 вернул пустой массив.
Array() 

Тот же файл пересохраненный в 2010 и в 2013 вернули одинаковые результаты:

Array
(
[
0] => PHPExcel_Worksheet Object
(
[
_parent:PHPExcel_Worksheet:private] => PHPExcel Object
(
[
_uniqueID:PHPExcel:private] => 567cf4a9bd405
[_properties:PHPExcel:private] => PHPExcel_DocumentProperties Object
(
[
_creator:PHPExcel_DocumentProperties:private] => natalya
[_lastModifiedBy:PHPExcel_DocumentProperties:private] =>
[
_created:PHPExcel_DocumentProperties:private] => 1385368831
[_modified:PHPExcel_DocumentProperties:private] => 1451024730
[_title:PHPExcel_DocumentProperties:private] =>
[
_description:PHPExcel_DocumentProperties:private] =>
[
_subject:PHPExcel_DocumentProperties:private] =>
[
_keywords:PHPExcel_DocumentProperties:private] =>
[
_category:PHPExcel_DocumentProperties:private] =>
[
_manager:PHPExcel_DocumentProperties:private] =>
[
_company:PHPExcel_DocumentProperties:private] => LOGISTIC
[_customProperties:PHPExcel_DocumentProperties:private] => Array
(
)

)

// ...много много параметров...
PMПисьмо на e-mail пользователюСайт пользователяICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
redreem  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 4259
Пользователь №: 29002
На форуме: 5 лет, 4 месяца, 10 дней
Карма: 147




покажи upload.php
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
JohnBraxton  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Старик
***

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 145
Пользователь №: 26458
На форуме: 5 лет, 9 месяцев, 18 дней
Карма: 1




Выложу кусочек кода, где возникает ошибка.... Может поможет в решении проблемы:
public function setActiveSheetIndex($pIndex = 0)
{
$numSheets = count($this->_workSheetCollection);

if ($pIndex > $numSheets - 1) {
throw new PHPExcel_Exception(
"You tried to set a sheet active by the out of bounds index: {$pIndex}. The actual number of sheets is {$numSheets}."
);
} else {
$this->_activeSheetIndex = $pIndex;
}
return $this->getActiveSheet();
}


Более точнее тут:
if ($pIndex > $numSheets - 1) {
throw new PHPExcel_Exception(
"You tried to set a sheet active by the out of bounds index: {$pIndex}. The actual number of sheets is {$numSheets}."
);
PMПисьмо на e-mail пользователюСайт пользователяICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
JohnBraxton  
 ۩  [x] Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Старик
***

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 145
Пользователь №: 26458
На форуме: 5 лет, 9 месяцев, 18 дней
Карма: 1




Цитата (redreem @ 25.12.2015 - 07:43)
покажи upload.php

function getXLS($xls)
{
include_once 'PHPExcel/IOFactory.php';
$objPHPExcel = PHPExcel_IOFactory::load($xls);

$objPHPExcel->setActiveSheetIndex(0);

$aSheet = $objPHPExcel->getActiveSheet();

$array = array();//этот массив будет содержать массивы содержащие в себе значения ячеек каждой строки
//получим итератор строки и пройдемся по нему циклом


foreach($aSheet->getRowIterator() as $row)
{
//получим итератор ячеек текущей строки
$cellIterator = $row->getCellIterator();
//пройдемся циклом по ячейкам строки
$item = array();//этот массив будет содержать значения каждой отдельной строки
foreach($cellIterator as $cell){
//заносим значения ячеек одной строки в отдельный массив
array_push($item, $cell->getCalculatedValue());
}
//заносим массив со значениями ячеек отдельной строки в "общий массв строк"
array_push($array, $item);
}
return $array;
}

$xlsData = getXLS($_SERVER['DOCUMENT_ROOT'] . '/temp/[' . $id . ']' . $unic_name);

// далее сохраняю в БД


Скрипт завершает работу тут:
$objPHPExcel->setActiveSheetIndex(0);
PMПисьмо на e-mail пользователюСайт пользователяICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
redreem  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 4259
Пользователь №: 29002
На форуме: 5 лет, 4 месяца, 10 дней
Карма: 147




попробуй выбирать sheet не через индекс, а через
$xls_object->setActiveSheetIndexByName

я не знаю что там за прикол с 2007, но вот в файле Excel2007.php в методе load есть такая строчка
$excel->removeSheetByIndex(0);

т.е. при загрузке шит с индексом нуль тупо удаляется.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
  Быстрый ответ
Информация о Госте
Введите Ваше имя
Кнопки кодов
Для вставки цитаты, выделите нужный текст и
НАЖМИТЕ СЮДА
Введите сообщение
Смайлики
:huh:  :o  ;) 
:P  :D  :lol: 
B)  :rolleyes:  <_< 
:)  :angry:  :( 
:unsure:  :blink:  :ph34r: 
     
Показать всё

Опции сообщения  Включить смайлики?
 Включить подпись?
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темы Ответ в темуСоздание новой темыСоздание опроса