|
|
|
| В 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 строка ужене катит, так кактам новый отдел — бухгалтерия)
}
} ?>
|
Я не знаю насколько доходчиво изложил суть, но сам догнать никак не могу. как тут правильно подойти. Если мало указал входных данных - спрашивайте! | |
|
|
|
|
|
|
|
для: Моя тень
(14.09.2010 в 02:28)
| | Вам приятно читать вашу горизонтальную портянку? | |
|
|
|
|
|
|
|
для: sim5
(14.09.2010 в 02:53)
| |
<?
$number = 0; //счетчик
while($arr = ...){
$number = $number +1; // инкремент
if($arr['id_section'] != $id_section){
// тут записываем название отдела
}
else {
///а здесь идет все тот же отдел, поэтому нужно сделать объединение ячеек
// на выходе нужно получить такое значение, которое будет агрументом
//специального метода объединения ячеек —
//"A1:A3" (4 строка ужене катит, так кактам новый отдел — бухгалтерия)
}
}
?>
|
Так лучше? Давайте теперь по существу! | |
|
|
|
|
|
|
|
для: Моя тень
(14.09.2010 в 10:12)
| | Лучше, и не мне вы одолжение делаете. Читать не удобо, и вы на такое сообщение можете и не получить ответа.
По существу:
$number++; // инкремент
И почему он с нулевого значения начинается, если ячейки с А1.... ? Я не знаю методов с которыми вы работаете, не знаю правомерно ли с точки зрения формирования exсel-таблицы объеденять ячейки в любое время, но получить признак того, что их "пора объеденить" либо номера объеденяемых ячеек "для последующего" просто.
Переменная хранящая номер ячейки должна начинаться с 1. Другая переменная хранит имя отдела полученное из базы. Если она пуста (в начале цикла) или не равна текущему значению, то текущее значение отдела присваивается ей. Поэтому же признаку узнаем номер последней ячейки для объеденения - $number. Поэтому инкремент этой переменной должен производиться после вышеуказанной проверки. Поэтому же признаку запоминается состояние $number в переменной хранящей номер начальной ячейки для объденения. Потребуется ли эта переменная или нет, сказать трудно - это зависит от методов/правил формирования выходной таблицы, но я их не знаю. | |
|
|
|
|
|
|
|
для: sim5
(14.09.2010 в 11:28)
| | >Лучше, и не мне вы одолжение делаете. Читать не удобо, и вы на такое сообщение можете и не получить ответа.
>По существу:
>$number++; // инкремент
>И почему он с нулевого значения начинается, если ячейки с А1.... ?
Потому что уже при первой итерации цикла ему будет присвоено значение 1. | |
|
|
|
|
|
|
|
для: sim5
(14.09.2010 в 11:28)
| | > Я не знаю методов с которыми вы работаете, не знаю правомерно ли с точки зрения формирования exсel-таблицы объеденять ячейки в любое время
Что значит в любое время. Я использую библиотеку PHPExcel для генерации сложных отчетов в формате .xlsx, в которой есть специальный метод, позволяющий объединить ячейки в одну, конкретного столбца(столбцов) , например $objPHPExcel->getActiveSheet()->mergeCells('A1:A5'), объединит ячейки столбца A начиная с первого ряда и заканчивая 5 в одну ячейку. В данный метод мне каким-то образом следует поместить начальное значение и конечное значение. | |
|
|
|
|
|
|
|
для: Моя тень
(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, я не знаю. | |
|
|
|
|
|
|
|
для: sim5
(14.09.2010 в 12:17)
| | Метод всего один в данном случае, я его выше описал. Ну даже давайте так, напишите, пожалуйста, код для объединения в вашем примере — html-таблице | |
|
|
|
|
|
|
|
для: sim5
(14.09.2010 в 12:17)
| | Беда в том что я не могу отследить последнюю ячейку среди одинаковых отделов. | |
|
|
|
|
|
|
|
для: sim5
(14.09.2010 в 12:17)
| | Пока тут думал родилась одна идея, на мой вгляд идеальная. Записываем все данные как есть, там где идут одинаковые отделы записываем только первый. Тем самым создаем массив, индексом которого будет $number , значением id отдела, затем когда цикл весь прогонит себя обрабатываем данный массив — находя в нем одинаковые значение, из которых уже несложно выявить минимальный и максимальный индекс. Где один будет начальным значением, а второй последним соответсвенно | |
|
|
|