Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.01.2018, 05:05   #1
andriushka
Пользователь
 
Регистрация: 05.04.2017
Сообщений: 19
По умолчанию Прочесть из excel,обработать данные и записать обратно

Добрый день.Имеется вот такой скрипт,замысел его в том чтобы он позволял прочесть данные из excel,произвести некоторую операцию с прочтенными данными(в одном из столбцов имеются адреса сайтов,и необходимо узнать их территориальную принадлежность),и записать результаты в новую excel которая тут же скачивается.По отдельности всё работает,читает excel и выводит данные,определяет территориальную принадлежность,записывает в excel.А вот соединив всё воедино не работает((Подскажите в чём проблема?Да и скорее всего далеко не оптимизировано реализовано,но мож и тут советом поделитесь,укажите что и как
PHP код:
<?php
 
header
("Content-Type: text/html; charset=utf-8");
require_once(
'PHPexcel/Writer/Excel2007.php');
 
//функция чтения excel
function readExelFile($filepath){
        require_once 
'PHPExcel.php';
 
$ar=array();
 
$inputFileType PHPExcel_IOFactory::identify($filepath);
$objReader PHPExcel_IOFactory::createReader($inputFileType);
$objPHPExcel $objReader->load($filepath);
$ar $objPHPExcel->getActiveSheet()->toArray();
 
return 
$ar;
}
 
$file_path_excel 'test.xlsx';
 
$ar=readExelFile($file_path_excel);
 
foreach(
$ar as $ar_colls){
$fio $ar_colls[0];
$cityy $ar_colls[1];
$year $ar_colls[2];
 
    
$out .= file_get_contents($year);
    
$ip gethostbyname($year);
    
$result file_get_contents("http://ipgeobase.ru:7020/geo?ip=".$ip);
    
$xml = new SimpleXMLElement($result);
 
 
//    echo "$fio - $cityy -  $year <br />";
//    echo "<font color=black>Страна: ".$xml->ip->country."<br>";
//    echo "Город: ".$xml->ip->city."<br>";
 
$pattern 'works.xlsx';
$objPHPExcel PHPExcel_IOFactory::load($pattern);
$objWriter = new PHPExcel_Writer_Excel2007($objPHPExcel);
$objPHPExcel->setActiveSheetIndex(0);
 
//        while( $row = $data->fetch_assoc() )
//        {
                                
$objPHPExcel->getActiveSheet()->setCellValue('A'.$j $fio);
                                
$objPHPExcel->getActiveSheet()->setCellValue('B'.$j $cityy);
                                
$objPHPExcel->getActiveSheet()->setCellValue('C'.$j $year);
                                
$objPHPExcel->getActiveSheet()->setCellValue('D'.$j , .$xml->ip->country.);
                                
$objPHPExcel->getActiveSheet()->setCellValue('E'.$j , .$xml->ip->city.);
 
//              }
$j++;
        
$outputFileName 'result.xlsx';
        
$objWriter->save($outputFileName);
        
$objPHPExcel->disconnectWorksheets();
        unset(
$objPHPExcel);
        
header("Location: " .$outputFileName );
        
ob_end_flush();
 
   }
 
?>
_____
Код программы нужно выделять (форматировать) тегами [CODE] или [PHP] (читать FAQ)
Модератор

Последний раз редактировалось Serge_Bliznykov; 22.01.2018 в 09:29.
andriushka вне форума Ответить с цитированием
Старый 22.01.2018, 08:09   #2
ADSoft
Старожил
 
Регистрация: 25.02.2007
Сообщений: 4,150
По умолчанию

телепатов нема
... что именно не работает, какая то ошибка?
ADSoft вне форума Ответить с цитированием
Старый 22.01.2018, 12:59   #3
andriushka
Пользователь
 
Регистрация: 05.04.2017
Сообщений: 19
По умолчанию

Цитата:
Сообщение от ADSoft Посмотреть сообщение
телепатов нема
... что именно не работает, какая то ошибка?
просто белая страница,ничего не происходит,предполагаю что наверно блок записи в эксель необходимо возможно перенести отдельно,что в этом моменте происходит сбой
andriushka вне форума Ответить с цитированием
Старый 22.01.2018, 14:21   #4
ADSoft
Старожил
 
Регистрация: 25.02.2007
Сообщений: 4,150
По умолчанию

ну у вас все в одном цикле - читает данные и записывает тут же в файл конечный.. .я бы разделил
1. Прочли файл
2. в цикле сформировали массив на основе его данных и проверок
3. закрыли файл
4. Создали файл
5. в цикле по массиву записали данные
6. закрыли файл

и еще - что обращение к внешнему сервису, что работа с phpExel -оченнно ресурсоёмко.. .может из-за нехватки памяти вылетать .. попробуйте увеличить как выделяемую память та и время выполнения скрипта
ADSoft вне форума Ответить с цитированием
Старый 23.01.2018, 11:06   #5
andriushka
Пользователь
 
Регистрация: 05.04.2017
Сообщений: 19
По умолчанию

Цитата:
Сообщение от ADSoft Посмотреть сообщение
ну у вас все в одном цикле - читает данные и записывает тут же в файл конечный.. .я бы разделил
1. Прочли файл
2. в цикле сформировали массив на основе его данных и проверок
3. закрыли файл
4. Создали файл
5. в цикле по массиву записали данные
6. закрыли файл

и еще - что обращение к внешнему сервису, что работа с phpExel -оченнно ресурсоёмко.. .может из-за нехватки памяти вылетать .. попробуйте увеличить как выделяемую память та и время выполнения скрипта
подскажите как по 2 пункту сформировать такой массив?у меня получается на каждой итерации 5 переменных: $fio,$cityy,$year,$xml->ip->country,$xml->ip->city.Затрудняюсь сформировать массивы,и чтобы потом корректно при записи в excel записывать их в соответствии.
andriushka вне форума Ответить с цитированием
Старый 23.01.2018, 11:20   #6
andriushka
Пользователь
 
Регистрация: 05.04.2017
Сообщений: 19
По умолчанию

Цитата:
Сообщение от ADSoft Посмотреть сообщение
ну у вас все в одном цикле - читает данные и записывает тут же в файл конечный.. .я бы разделил
1. Прочли файл
2. в цикле сформировали массив на основе его данных и проверок
3. закрыли файл
4. Создали файл
5. в цикле по массиву записали данные
6. закрыли файл

и еще - что обращение к внешнему сервису, что работа с phpExel -оченнно ресурсоёмко.. .может из-за нехватки памяти вылетать .. попробуйте увеличить как выделяемую память та и время выполнения скрипта
сделал вот так
Код:
$arrayy = array(
    $fio,
    $cityy,
    $year,
    $xml->ip->country,
    $xml->ip->city,
);
}
var_dump($arrayy);
ну и получается что в массиве оказалась только последняя итерация цикла,а как сделать чтобы все итерации записывались?
andriushka вне форума Ответить с цитированием
Старый 23.01.2018, 12:07   #7
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Цитата:
Сообщение от andriushka Посмотреть сообщение
сделал вот так
Код:
$arrayy = array(
    $fio,
    $cityy,
    $year,
    $xml->ip->country,
    $xml->ip->city,
);
}
var_dump($arrayy);
ну и получается что в массиве оказалась только последняя итерация цикла,а как сделать чтобы все итерации записывались?
Код:
$arrayy[] = array(
    $fio,
    $cityy,
    $year,
    $xml->ip->country,
    $xml->ip->city,
);
}
var_dump($arrayy);
Andkorol вне форума Ответить с цитированием
Старый 23.01.2018, 12:23   #8
andriushka
Пользователь
 
Регистрация: 05.04.2017
Сообщений: 19
По умолчанию

Цитата:
Сообщение от Andkorol Посмотреть сообщение
Код:
$arrayy[] = array(
    $fio,
    $cityy,
    $year,
    $xml->ip->country,
    $xml->ip->city,
);
}
var_dump($arrayy);
спасибо,сработало)и еще вопросик,как теперь в цикл
Код:
while( $row = $data->fetch_assoc() )
вставить перебор данного массива?
andriushka вне форума Ответить с цитированием
Старый 23.01.2018, 12:39   #9
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Массив желательно бы проиндексировать ассоциативными ключами, типа:
Код:
$arrayy[] = array(
    'fio' => $fio,
    'city' => $cityy,
    // ... etc
Затем для перебора этого массива использовать foreach:
Код:
foreach ($arrayy as $row){
    $objPHPExcel->getActiveSheet()->setCellValue('A'.$j , $row['fio']);
    $objPHPExcel->getActiveSheet()->setCellValue('B'.$j , $row['city']);
    // ... etc
}
Andkorol вне форума Ответить с цитированием
Старый 30.01.2018, 10:43   #10
andriushka
Пользователь
 
Регистрация: 05.04.2017
Сообщений: 19
По умолчанию

Цитата:
Сообщение от Andkorol Посмотреть сообщение
Массив желательно бы проиндексировать ассоциативными ключами, типа:
Код:
$arrayy[] = array(
    'fio' => $fio,
    'city' => $cityy,
    // ... etc
Затем для перебора этого массива использовать foreach:
Код:
foreach ($arrayy as $row){
    $objPHPExcel->getActiveSheet()->setCellValue('A'.$j , $row['fio']);
    $objPHPExcel->getActiveSheet()->setCellValue('B'.$j , $row['city']);
    // ... etc
}
опять проблема,нужна подсказка,вот такой код выдает 500 ошибку:
Код:
<?php
//ini_set("display_errors",1);
//error_reporting(E_ALL);

header("Content-Type: text/html; charset=utf-8");
require_once 'PHPexcel/Writer/Excel2007.php';

function readExelFile($filepath){
	require_once 'PHPExcel.php';
    $ar=array();
$inputFileType = PHPExcel_IOFactory::identify($filepath);
$objReader = PHPExcel_IOFactory::createReader($inputFileType);
$objPHPExcel = $objReader->load($filepath);
$ar = $objPHPExcel->getActiveSheet()->toArray();
   return $ar;
}

$file_path_excel = 'test.xlsx';

$ar=readExelFile($file_path_excel);
$i == 1;
foreach($ar as $ar_colls){
$fio = $ar_colls[0];
$cityy = $ar_colls[1];
$year = $ar_colls[2];
    $out .= file_get_contents($year);
    $ip = gethostbyname($year);
    $result = file_get_contents("http://ipgeobase.ru:7020/geo?ip=".$ip);
    $xml = new SimpleXMLElement($result);
//    echo "$fio - $cityy -  $year <br />";
//    echo "<font color=black>Страна: ".$xml->ip->country."<br>";
//    echo "Город: ".$xml->ip->city."<br>";
$arrayy[] = array(
    'number' => $fio,
    'oo' => $cityy,
    'adress' => $year,
    'country' => $xml->ip->country,
    'city' => $xml->ip->city,
);
}
//var_dump($arrayy);
$j==1;
$pattern = 'works.xlsx';
$objPHPExcel = PHPExcel_IOFactory::load($pattern);
$objWriter = new PHPExcel_Writer_Excel2007($objPHPExcel);
$objPHPExcel->setActiveSheetIndex(0);

        foreach($arrayy as $row)
        {
                                $objPHPExcel->getActiveSheet()->setCellValue('A'.$j , $number);
                                $objPHPExcel->getActiveSheet()->setCellValue('B'.$j , $oo);
                                $objPHPExcel->getActiveSheet()->setCellValue('C'.$j , $adress);
                                $objPHPExcel->getActiveSheet()->setCellValue('D'.$j , $country);
                                $objPHPExcel->getActiveSheet()->setCellValue('E'.$j , $city);		
                                $j++;
	}
        $outputFileName = 'result.xlsx';
        $objWriter->save($outputFileName);
        $objPHPExcel->disconnectWorksheets();
        unset($objPHPExcel);
        header("Location: " .$outputFileName );
        ob_end_flush();
?>
andriushka вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Возможно ли обработать данные из примечания? Тандер Microsoft Office Excel 19 05.11.2012 14:04
Текстовый файл с числами - обработать и записать в другие два файла (Delphi) Sweet-_-Orange Помощь студентам 10 15.01.2012 21:36
Считать и обработать данные из файла EXCEL CJ ALEX R Помощь студентам 4 14.08.2011 13:04
FASM. Считать содержимое файла в строку и затем записать обратно в файл Zart Помощь студентам 0 19.04.2011 17:02
Прочесть данные с сайта nix01d Общие вопросы Delphi 3 15.04.2010 11:26