Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: excel и массивы
 
 автор: Моя тень   (14.09.2010 в 02:28)   письмо автору
 
 

В PHPExcel существует метод $objPHPExcel->getActiveSheet()->mergeCells(), который позволяет объединить ячейки в таблице, например, $objPHPExcel->getActiveSheet()->mergeCells('A1:A5'); объединяет строки А1:А5.
Так вот у меня это происходит в цикле — динамически.
Например, есть значения

id_отдела Отед Сотрудник

1 Финансы Иванов И.И.
1 Финансы Смирнов С.С.
1 Финансы Петров А.А,
2 Бухгалтерия Сидоров А.В.

В таблицк Excel название отделов записываются, например в строки столбца A.
Данные выводятся из быза, непосредственно циклом.
Например
<?
$number 
0//счетчик
while($arr = ...){
$number $number +1// инкремент
    
if($arr['id_section'] != $id_section){
        
// тут записываем название отдела
        
}  else
        {
            
///а здесь идет все тот же отдел, поэтому нужно сделать объединение ячеек    
            // на выходе нужно получить такое значение, которое будет агрументом специального метода объединения ячеек — "A1:A3" (4 строка ужене катит, так кактам новый отдел — бухгалтерия)
        
}
    }  
?>

Я не знаю насколько доходчиво изложил суть, но сам догнать никак не могу. как тут правильно подойти. Если мало указал входных данных - спрашивайте!

  Ответить  
 
 автор: sim5   (14.09.2010 в 02:53)   письмо автору
 
   для: Моя тень   (14.09.2010 в 02:28)
 

Вам приятно читать вашу горизонтальную портянку?

  Ответить  
 
 автор: Моя тень   (14.09.2010 в 10:12)   письмо автору
 
   для: sim5   (14.09.2010 в 02:53)
 

<? 
$number 
0//счетчик 
while($arr = ...){ 
$number $number +1// инкремент 
    
if($arr['id_section'] != $id_section){ 
        
// тут записываем название отдела 
    
}  
    else { 
            
///а здесь идет все тот же отдел, поэтому нужно сделать объединение ячеек     
            // на выходе нужно получить такое значение, которое будет агрументом 
            //специального метода объединения ячеек — 
            //"A1:A3" (4 строка ужене катит, так кактам новый отдел — бухгалтерия) 
        

    }  
 
?> 

Так лучше? Давайте теперь по существу!

  Ответить  
 
 автор: sim5   (14.09.2010 в 11:28)   письмо автору
 
   для: Моя тень   (14.09.2010 в 10:12)
 

Лучше, и не мне вы одолжение делаете. Читать не удобо, и вы на такое сообщение можете и не получить ответа.
По существу:
$number++; // инкремент
И почему он с нулевого значения начинается, если ячейки с А1.... ? Я не знаю методов с которыми вы работаете, не знаю правомерно ли с точки зрения формирования exсel-таблицы объеденять ячейки в любое время, но получить признак того, что их "пора объеденить" либо номера объеденяемых ячеек "для последующего" просто.
Переменная хранящая номер ячейки должна начинаться с 1. Другая переменная хранит имя отдела полученное из базы. Если она пуста (в начале цикла) или не равна текущему значению, то текущее значение отдела присваивается ей. Поэтому же признаку узнаем номер последней ячейки для объеденения - $number. Поэтому инкремент этой переменной должен производиться после вышеуказанной проверки. Поэтому же признаку запоминается состояние $number в переменной хранящей номер начальной ячейки для объденения. Потребуется ли эта переменная или нет, сказать трудно - это зависит от методов/правил формирования выходной таблицы, но я их не знаю.

  Ответить  
 
 автор: Моя тень   (14.09.2010 в 11:44)   письмо автору
 
   для: sim5   (14.09.2010 в 11:28)
 

>Лучше, и не мне вы одолжение делаете. Читать не удобо, и вы на такое сообщение можете и не получить ответа.
>По существу:
>$number++; // инкремент
>И почему он с нулевого значения начинается, если ячейки с А1.... ?

Потому что уже при первой итерации цикла ему будет присвоено значение 1.

  Ответить  
 
 автор: Моя тень   (14.09.2010 в 11:52)   письмо автору
 
   для: sim5   (14.09.2010 в 11:28)
 

> Я не знаю методов с которыми вы работаете, не знаю правомерно ли с точки зрения формирования exсel-таблицы объеденять ячейки в любое время

Что значит в любое время. Я использую библиотеку PHPExcel для генерации сложных отчетов в формате .xlsx, в которой есть специальный метод, позволяющий объединить ячейки в одну, конкретного столбца(столбцов) , например $objPHPExcel->getActiveSheet()->mergeCells('A1:A5'), объединит ячейки столбца A начиная с первого ряда и заканчивая 5 в одну ячейку. В данный метод мне каким-то образом следует поместить начальное значение и конечное значение.

  Ответить  
 
 автор: sim5   (14.09.2010 в 12:17)   письмо автору
 
   для: Моя тень   (14.09.2010 в 11:52)
 

Если вам нравится никчемный в данном случае ноль, можете начитать инкремент с него.

Что значит в любое время? А то, что например, таблица 3х3, с тремя объедененными ячейками второго столбца будет выглядеть так:
<table>
<tr>
    <td>1</td>
    <td rowspan="3">all</td>
    <td>t1</td>
</tr>
<tr>
    <td>2</td>
    <td>t2</td>
</tr>
<tr>
    <td>3</td>
    <td>t3</td>
</tr>
</table>

При этом номер последней ячейки второго столбца для объеденения вы узнаете в третей итерации цикла, а сама объдененная ячейка должна быть прописана уже в первой итерации. Как это регулируется методами PHPExcel, я не знаю.

  Ответить  
 
 автор: Моя тень   (14.09.2010 в 12:28)   письмо автору
 
   для: sim5   (14.09.2010 в 12:17)
 

Метод всего один в данном случае, я его выше описал. Ну даже давайте так, напишите, пожалуйста, код для объединения в вашем примере — html-таблице

  Ответить  
 
 автор: Моя тень   (14.09.2010 в 12:34)   письмо автору
 
   для: sim5   (14.09.2010 в 12:17)
 

Беда в том что я не могу отследить последнюю ячейку среди одинаковых отделов.

  Ответить  
 
 автор: Моя тень   (14.09.2010 в 12:51)   письмо автору
 
   для: sim5   (14.09.2010 в 12:17)
 

Пока тут думал родилась одна идея, на мой вгляд идеальная. Записываем все данные как есть, там где идут одинаковые отделы записываем только первый. Тем самым создаем массив, индексом которого будет $number , значением id отдела, затем когда цикл весь прогонит себя обрабатываем данный массив — находя в нем одинаковые значение, из которых уже несложно выявить минимальный и максимальный индекс. Где один будет начальным значением, а второй последним соответсвенно

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования