例如:
$sheet->getCell("A4")->setValueExplicit('123', PHPExcel_Cell_DataType::TYPE_STRING);
但是在產生 Excel 檔的時候,常常是用迴圈去產生。但是 A1 的 A 要怎麼處理呢?好麻煩,難道還要用 ASCII 碼,從 65 開始算起嗎?
其實儲存格的代號也可以用數字:
$sheet->getCellByColumnAndRow(0, 1)->setValueExplicit('123', PHPExcel_Cell_DataType::TYPE_STRING);
先是列,再來是行。列從 0 算起,行從 1 算起。
所以 (0,1) 是 A1
聽說也可以使用範圍:
$sheet->->getStyleByColumnAndRow(0,1,2,4)->applyFromArray($styleArray);
這樣就是在設定從左上 A1 到右下 C4 這一塊 4 x 3 區塊的樣式。
或是用這個函數轉換:
PHPExcel_Cell::stringFromColumnIndex($i)
例如:
$i = 0;
$letter = PHPExcel_Cell::stringFromColumnIndex($i); //$letter 就是 A
$cellname = $letter.'1'; //A1
然後再設定值
$sheet->setCellValue($cellname, '123');
$sheet->->getStyleByColumnAndRow(0,1,2,4)->applyFromArray($styleArray);
這樣就是在設定從左上 A1 到右下 C4 這一塊 4 x 3 區塊的樣式。
或是用這個函數轉換:
PHPExcel_Cell::stringFromColumnIndex($i)
例如:
$i = 0;
$letter = PHPExcel_Cell::stringFromColumnIndex($i); //$letter 就是 A
$cellname = $letter.'1'; //A1
然後再設定值
$sheet->setCellValue($cellname, '123');
-------------------------------------------------------------------------------
不過上面這些是後來剛剛才發現的。在這之前我已經幾個小時寫了一個轉換的函數了 =_="。
真蠢。
雖然用不到了,還是記錄一下:
<?php $column_num=89; $row_num = 5; $letter = get_excel_cell_letter($column_num); $cellname = $letter.$row_num; echo $cellname; function get_excel_cell_letter($n){ $no[1] = $n%26; //第1個數字 $no[2] = floor($n/26)%26; //第2個數字 $no[3] = floor($n/676)%26; //第3個數字 //echo ' 計算借位之前:'; print_r($no); //計算借位 if(isset($no[1]) && $no[1] < 1){ $no[1] += 26; if(isset($no[2])){ $no[2] -= 1; } } if(isset($no[2]) && $no[2] < 1){ $no[2] += 26; if(isset($no[3])){ $no[3] -= 1; } } //換算成英文字母 $letter[1] = chr(64+$no[1]); $full_letter = $letter[1]; if($n > 26){ $letter[2] = chr(64+$no[2]); $full_letter = $letter[2].$letter[1]; } if($n > 702){ $letter[3] = chr(64+$no[3]); $full_letter = $letter[3].$letter[2].$letter[1]; } return $full_letter; } ?>
結果:
CK5
沒有留言:
張貼留言