主要運用到PHPExcel_Cell類的兩個方法
1讀取excel大於26列時.
PHPExcel_Cell::columnIndexFromString($highestColumm)://由列名轉化爲列索引數字 'A->0,Z->25'
$highestColumm = $sheet->getHighestColumn(); // 獲得最多的列數,返回列名的大寫字母 如 'AB','F'等
2>計算出列對應的索引$end_index = PHPExcel_Cell::columnIndexFromString($highestColumm);//由列名轉爲列數('AB'->28)
$PHPExcel = $reader->load($file_path_root . '/' . $file_name);//文件路徑加載文件名
$sheet = $PHPExcel->getSheet(0);
$highestRow = $sheet->getHighestRow(); // 取得總行數
$highestColumm = $sheet->getHighestColumn(); // 取得總列數
$end_index = PHPExcel_Cell::columnIndexFromString($highestColumm);//由列名轉爲列數('AB'->28)
$titles = array();
$content = array();
/** 循環讀取每個單元格的數據 */
for ($row = 1; $row <= $highestRow; $row++) {
for ($column = 0; $column < $end_index; $column++) {
$col_name = PHPExcel_Cell::stringFromColumnIndex($column);//由列數反轉列名(0->'A')
$value = mb_convert_encoding($sheet->getCell($col_name . $row)->getValue(), 'gbk', 'utf8');//轉碼
if ($row == 1) {
//獲取表頭
$titles[] = preg_replace('/\s/', '', $value);
} else {
if ($sheet->getCell($col_name . $row)->getDataType() == PHPExcel_Cell_DataType::TYPE_NUMERIC) {
//數字類型時,三位精度標準來比較該數是否在0,1之間,轉換爲百分數,保留一位小數
if (bccomp(floatval($value), floatval('1'), 3) == -1 && bccomp(floatval($value), floatval('0'), 3) == 1) {
$value = sprintf("%01.1f", $value * 100) . '%';
}
}
$content[$row][$column] = preg_replace('/\s/', '', $value);
}
}
}
ps:2寫大於26列的excel
$title_col = PHPExcel_Cell::stringFromColumnIndex($k);//標題行列名,由列索引反轉列名(0->'A')
</pre><pre name="code" class="php"><pre name="code" class="php">foreach($titles as $k =>$t)
{
$title_col = PHPExcel_Cell::stringFromColumnIndex($k);//標題行列名,由列索引反轉列名(0->'A')
$this->_objPHPExcel->getActiveSheet()->getColumnDimension($title_col)->setWidth(12);
$this->_objPHPExcel->setActiveSheetIndex()->getStyle($title_col."1")->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
$this->_objPHPExcel->getActiveSheet()->setCellValue($title_col."1",iconv('GBK','UTF-8//IGNORE',$t));//標題行
}
3讀取excel百分號時自動轉化爲了小數
/* Data types */
const TYPE_STRING2 = 'str';
const TYPE_STRING = 's';
const TYPE_FORMULA = 'f';
const TYPE_NUMERIC = 'n';
const TYPE_BOOL = 'b';
const TYPE_NULL = 'null';
const TYPE_INLINE = 'inlineStr';
const TYPE_ERROR = 'e';
if ($sheet->getCell($col_name . $row)->getDataType() == PHPExcel_Cell_DataType::TYPE_NUMERIC) {
//數字類型時,三位精度標準來比較該數是否在0,1之間,轉換爲百分數,保留一位小數
if (bccomp(floatval($value), floatval('1'), 3) == -1 && bccomp(floatval($value), floatval('0'), 3) == 1) {
$value = sprintf("%01.1f", $value * 100) . '%';
}
}
判斷浮點數是否在0-1之間(三位精度),然後組合成百分數即可:
$value = sprintf("%01.1f", $value * 100) . '%';