例如:
$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
沒有留言:
張貼留言