phpexcel如何读和写大于26列的excel

主要运用到PHPExcel_Cell类的两个方法

1读取excel大于26列时,由列名转化为列索引数字

PHPExcel_Cell::columnIndexFromString($highestColumm)://由列名转化为列索引数字 'A->0,Z->25'  

1、计算出总列数,获得最多的列数,返回列名的大写字母

$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);  
                    }  
                }  
            }  

在这个方法中可按自己需求进行列的来回转换

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百分号时自动转化为了小数

处理单元格数据时,如果有百分号小数会自动转为小数,处理时需要判断单元格数据类型,因为初步认定只有百分数是小数,其余各列不存在小数.故处理结果:

判断数据类型为数字,其余几种类型都在 PHPExcel_Cell_DataType类中:


    /* 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) . '%';  

 

要实现将超大的Excel文件上传到数据库,可以使用PHPExcel库来Excel文件的数据,然后使用EasyUI的文件上传组件来实现文件上传功能。下面是一个示例的代码: 1. 首先,确保已经安装了PHPExcel库和EasyUI库。 2. 创建一个上传页面(upload.php),包含一个EasyUI的文件上传组件和一个上传按钮: ```html <!DOCTYPE html> <html> <head> <title>Excel上传</title> <link rel="stylesheet" type="text/css" href="easyui/easyui.css"> <script type="text/javascript" src="easyui/jquery.min.js"></script> <script type="text/javascript" src="easyui/jquery.easyui.min.js"></script> </head> <body> <h2>Excel上传</h2> <input id="excelFile" name="excelFile" class="easyui-filebox" accept=".xls,.xlsx"> <br><br> <a href="#" class="easyui-linkbutton" onclick="upload()">上传</a> <script type="text/javascript"> function upload() { $('#excelFile').filebox('textbox').attr('name', 'excelFile'); $('#excelForm').form('submit', { url: 'upload_handler.php', onSubmit: function() { $.messager.progress(); return true; }, success: function(data) { $.messager.progress('close'); $.messager.alert('提示', data, 'info'); } }); } </script> </body> </html> ``` 3. 创建一个处理上传的脚本(upload_handler.php),在这个脚本中使用PHPExcel库来Excel数据并将其插入到数据库中: ```php <?php require_once 'PHPExcel/IOFactory.php'; // 获取上传的Excel文件 $excelFile = $_FILES['excelFile']['tmp_name']; // 加载Excel文件 $objPHPExcel = PHPExcel_IOFactory::load($excelFile); // 获取第一个工作表 $sheet = $objPHPExcel->getActiveSheet(); // 获取行数和数 $highestRow = $sheet->getHighestRow(); $highestColumn = $sheet->getHighestColumn(); // 循环取数据 for ($row = 1; $row <= $highestRow; $row++) { $rowData = $sheet->rangeToArray('A' . $row . ':' . $highestColumn . $row, null, true, false); // 将数据插入数据库,这里只是示例,需要根据实际情况进行数据库操作 // $rowData[0][0] 表示第一的数据,$rowData[0][1] 表示第二的数据,依此类推 // 例如:将数据插入名为data的表格中的两name和value中 // $name = $rowData[0][0]; // $value = $rowData[0][1]; // insert into data (name, value) values ('$name', '$value'); } echo '上传成功!'; ?> ``` 以上代码仅为示例,实际使用中需要根据数据库类型和表结构进行相应的修改。另外,由于上传大型Excel文件可能会占用较多内存,可能需要对服务器进行相应的配置和优化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值