За последние 24 часа нас посетили 17606 программистов и 1968 роботов. Сейчас ищет 991 программист ...

Как выбрать нужную строку в xls

Тема в разделе "PHP для новичков", создана пользователем lssbor, 10 авг 2009.

  1. lssbor

    lssbor Активный пользователь

    С нами с:
    15 окт 2008
    Сообщения:
    23
    Симпатии:
    0
    Адрес:
    Saint-Petesburg
    Здравствуйте. Распарсил документ xls с помощью PHP Excel parser pro 4.5, подскажите пожалуйста, как мне найти по номеру полиса нужную строку и взять из нее нужные данные.

    // цикл по рабочим листам
    for( $ws_num=0; $ws_num<count($exc->worksheet['name']); $ws_num++ )
    {
    echo "<h3>Рабочий лист: ";
    if( $exc->worksheet['unicode'][$ws_num] )
    echo uc2cp1251($exc->worksheet['name'][$ws_num]);
    else
    echo $exc->worksheet['name'][$ws_num];

    echo "</h3>\n";
    $ws = $exc->worksheet['data'][$ws_num];

    // если рабочий лист не пустой
    if ( is_array($ws) && isset($ws['max_row']) && isset($ws['max_col']) ) {
    echo "<table border=1 cellspacing=0 cellpadding=2>\n";

    echo "<tr><td>&nbsp;</td>";
    for( $j=0; $j<=$ws['max_col']; $j++ ) {
    echo "<td class=index>&nbsp;";
    if( $j>25 ) echo chr((int)($j/26)+64);
    echo chr(($j % 26) + 65)."&nbsp;</td>";
    }
    echo "</tr>\n";
    // начало цикла по строкам
    for( $i=0; $i<=$ws['max_row']; $i++ ) {
    echo "<tr><td class=index>".($i+1)."</td>\n";
    // начало цикла по столбцам
    if( isset($ws['cell'][$i]) && is_array($ws['cell'][$i]) ) {
    for( $j=0; $j<=$ws['max_col']; $j++ )
    {
    if( isset($ws['cell'][$i][$j]) ) {

    // Печать данных ячейки
    echo "<td>";
    $data = $ws['cell'][$i][$j];
    switch ($data['type'])
    {
    // строка
    case 0:
    $ind = $data['data'];
    if( $exc->sst['unicode'][$ind] )
    $s = uc2cp1251($exc->sst['data'][$ind]);
    else
    $s = $exc->sst['data'][$ind];
    if( strlen(trim($s))==0 )
    echo "&nbsp;";
    else
    echo $s;
    break;
    //целое число
    case 1:
    echo (int)($data['data']);
    break;
    //вещественное число
    case 2:
    echo (float)($data['data']);
    break;
    // дата
    case 3:
    $ret = $exc->getDateArray($data['data']);
    printf ("%s-%s-%s",$ret['day'], $ret['month'], $ret['year']);
    break;
    default:
    echo "&nbsp;";
    break;
    echo $data['data'];
    }

    xls файлик такого вида:
    Рассрочка платежа
    Вид риска Фамилия, Имя, Отчество № паспорта № полиса Дата выдачи 2-й платеж оплатить до 3-й платеж оплатить до 4-й платеж оплатить до Итого
    каско Шкутник Сергей Владимирович 4508 № 082039 060181 28.09.08 29 580,00р. 29.12.08 29 580,00р.
    каско Санцевич Александр Михайлович 4504 № 627618 060757 12.12.08 6 600,00р. 12.03.09 6 600,00р. 12.06.09 6 600,00р. 12.09.09 19 800,00р.
    каско Борзов Алексей Васильевич 1401 № 433607 060377 09.03.09 29 985,00р. 09.09.09 29 985,00р.
    каско Тимошин Игорь Андреевич 4506 № 286471 060109 16.03.09 13 812,50р. 16.06.09 13 812,50р. 16.09.09 13 812,50р. 20.12.09 41 437,50р.
    каско Инякин Владимир Викторович 4607 № 226398 060415 28.03.09 12 787,00р. 28.09.09 12 787,00р.
     
  2. iliavlad

    iliavlad Активный пользователь

    С нами с:
    24 янв 2009
    Сообщения:
    1.689
    Симпатии:
    4
    а вы этот код написали?
     
  3. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    вот коглда ты его парсишь и формируешь таблицу. вместо таблицы формируй массив и по нему потом бегай.
     
  4. lssbor

    lssbor Активный пользователь

    С нами с:
    15 окт 2008
    Сообщения:
    23
    Симпатии:
    0
    Адрес:
    Saint-Petesburg
    Спасибо за помощь, но вот я как раз и не понимаю, как массив брать, а не делать эту таблицу(((
     
  5. S.t.A.M.

    S.t.A.M. Активный пользователь

    С нами с:
    10 сен 2007
    Сообщения:
    1.041
    Симпатии:
    0
    440Hz
    да там уже готовый массив - $ws['cell'][$i][$j]

    lssbor
    Даже не знаю как ответить... просто находишь и берешь...
    т.е. судя по всему полис это индекс 5
    пробегаешь по массиву и где $ws['cell'][$i][5] = нужному полису выводишь:
    echo $ws['cell'][$i][0].', '.$ws['cell'][$i][1].', '.$ws['cell'][$i][2].', '.$ws['cell'][$i][3].', '.$ws['cell'][$i][4].', '. $ws['cell'][$i][5].', '.и т.д. зависит от того какие поля нужно вывести...
     
  6. lssbor

    lssbor Активный пользователь

    С нами с:
    15 окт 2008
    Сообщения:
    23
    Симпатии:
    0
    Адрес:
    Saint-Petesburg
    спасибо, сейчас буду пробовать
    я и думал, что $ws и есть массив, но что-то у меня не получилось выдернуть из него нужное)
     
  7. lssbor

    lssbor Активный пользователь

    С нами с:
    15 окт 2008
    Сообщения:
    23
    Симпатии:
    0
    Адрес:
    Saint-Petesburg
    не получается выбрать элементы массива $ws['cell'][$i][$j]
    если его отобразить целиком, то получается не очень понятный набор цифр, нету текста, только суммы правильно вывелись:(((

    http://mcpay.ru/excel1.php
    PHP:
    1.  
    2. <?PHP
    3. include ("excel.php");
    4. $exc = new ExcelFileParser ("log.txt", ABC_NO_LOG);
    5. $res = $exc->ParseFromFile("1.xls");
    6.  for( $ws_num=0; $ws_num<count($exc->worksheet['name']); $ws_num++ )
    7. {                  
    8.     $ws = $exc->worksheet['data'][$ws_num];
    9. if ( is_array($ws) && isset($ws['max_row']) && isset($ws['max_col']) ) {
    10.         // ?????? ????? ?? ???????
    11.         for( $i=0; $i<=$ws['max_row']; $i++ ) {
    12.             // ?????? ????? ?? ????????
    13.             if( isset($ws['cell'][$i]) && is_array($ws['cell'][$i]) ) {
    14.                 for( $j=0; $j<=$ws['max_col']; $j++ )
    15.                 {
    16.                     if( isset($ws['cell'][$i][$j]) ) {      
    17. $data = $ws['cell'][$i][$j];
    18. //$k = array_pop($data);
    19. //$k = array_shift($data);
    20. //if (array_key_exists("060181", $data)) {
    21. //    echo "The 'first' element is in the array";
    22. //}
    23. echo '<br>';
    24. if (in_array("40018", $data)) {
    25.     echo "Got Irix";
    26. }
    27. echo '<br>';
    28.     }
    29.     }
    30.     }
    31.     }
    32.     }
    33.     }
    34. // ????????? ? ?????? ?????????
    35. function uc2cp1251($str) {
    36.     return iconv('UNICODELITTLE','cp1251',$str);
    37. }
    38. ?>
    [/php]