2015-07-11 4 views
1

Нужна помощь в выявлении странной проблемы, с которой я сталкиваюсь. Я попытался выполнить поиск в переполнении стека, но не нашел ответа.PHPExcel цикл через строки и столбцы

Вот пример программы, которая работает отображение всех строк и столбцов на UI

<?php 

date_default_timezone_set('America/Los_Angeles'); 
require_once 'PHPExcel-1.8/Classes/PHPExcel.php'; 
include 'PHPExcel-1.8/Classes/PHPExcel/IOFactory.php'; 

$path = 'demo.xlsx'; 

$sheet = $objPHPExcel->getSheet(0); 
$highestRow = $sheet->getHighestRow(); 
$highestColumn = $sheet->getHighestColumn(); 
$highestColumnIndex = PHPExcel_Cell::columnIndexFromString($highestColumn); 
for ($row = 2; $row <= $highestRow; ++ $row) { 
    $val=array(); 
for ($col = 0; $col < $highestColumnIndex; ++ $col) { 
    $cell = $worksheet->getCellByColumnAndRow($col, $row); 
    $val[] = $cell->getValue(); 
//End of For loop 
} 

$Col1 = $val[0] ; 
$Col2 = $val[1] ; 
$Col3 = $val[2]; 

echo $Col1; 
echo $Col2; 
echo $Col3; 
echo "<br>"; 

//End of for loop 
} 
?> 

Эта программа работает прекрасно печать всех столбцов и строк для п-клыков

Проблема - Теперь наше требование для получения значений Col1, Col2, Col3 и использования mysql_query в базе данных и дальнейших действий.

Минуту добавим что-нибудь выше // Конец цикла for. Он только выполняет итерацию один раз и останавливается без метаданных ошибок php.

например.

.....

echo $Col1; 
echo $Col2; 
echo $Col3; 
echo "<br>"; 

**$sql = mysql_query("select COALESCE(MAX(SrNo), 0) AS Max_No from TABLEA where ColumnA = 1 and ColumnB = '$Col3'"); 
    $row = mysql_fetch_array($sql); 


    echo $row["Max_No"];** 

//End of for loop 
} 
?> 

Если мы добавим выше SQL ту же программу только итерацию один раз и останавливается? Он не показывает ошибок в журналах или на экране.

Заранее за вашу помощь !.

+0

@arkascha - Первая программа правильно печатает все столбцы и строки. Вы можете попробовать попробовать, добавив простой demo.xls. После добавления второй части программы он только выполняет итерацию один раз и прекращает работу. –

ответ

3

Как вы используете один и тот же переменную $row для числа строк в Excel итерации и для результата вашего выбора запроса, это не удивительно, что вы работаете с проблемами .....

целочисленное значение, которое содержит номер строки Excel, переписывается массивом, который вы получаете из вашего SQL-запроса, а затем вы пытаетесь использовать этот массив результатов в качестве следующего номера строки Excel.

Решение: Используйте другую переменную для эти два элемента.

$rowData = mysql_fetch_array($sql); 
echo $rowData["Max_No"];** 
+0

Большое спасибо !!!! Теперь я чувствую себя глупо. Это сработало. Я посмотрел код 10 раз. Не знаю, как это пропустило! –

+1

Чувство глупостей - это способ природы научить нас не повторять ту же ошибку в будущем :) –

+0

Полностью согласен. Не уверен, сколько времени потребовалось вам, чтобы посмотреть на эту ошибку. Я, конечно, трачу 2 часа на то, чтобы съесть свой мозг :( –

3

При попытке итерацию с for ($col = 2; $col <= $highestColumn; ++ $col){...} он будет работать для колонок от А до Z, но она не проходит Z (Ex. Итерацию между «А» до «AB»).

Чтобы итерация прохода «Z», необходимо преобразовать столбец в целое, приращения, сравнить, и получить его в виде строки снова:

$MAX_COL = $sheet->getHighestDataColumn(); 
$MAX_COL_INDEX = PHPExcel_Cell::columnIndexFromString($MAX_COL); 
    for($index=0 ; $index <= $MAX_COL_INDEX ; $index++){ 
    $col = PHPExcel_Cell::stringFromColumnIndex($index); 

    // do something, like set the column width... 
    $sheet->getColumnDimension($col)->setAutoSize(TRUE); 
} 

С этим, вы легко итерации пройти «Z '.

Смежные вопросы