2012-01-18 32 views
0

我使用的下面的插件,用于读取项目建立在微软excel文件(.xls扩展名)获取空白列值从SpreadsheetExcelReader

http://php-spreadsheetreader.googlecode.com/svn-history/r26/Excel/OLERead.php

按照它返回读取Excel当前插件实现作为一个数组。

在下面的代码读取擅长并返回它作为一个数组

 include_once('spreadsheet_excel_reader.php'); 
     $data = new Spreadsheet_Excel_Reader_New(); 
     $data->setOutputEncoding('CP1251'); 
     $data->read('full path of file'); 
     echo '<pre>';print_r($data->sheets[0]['cells']);echo '</pre>';exit; 

阵列细胞包含在Excel工作表的值等于行数的数量。

每个值本身都是一个由等于表格中列数的键组成的数组。

阵列细胞看起来如下 -

[cells] => Array( 
           [1] => Array 
            (
             [1] => a 
             [2] => b 
             [3] => c 
             [4] => d 
             [5] => e 
             [6] => f 
             [7] => g 
            ) 

           [2] => Array 
            (
             [1] => fddfg 
             [2] => dfgd 
             [5] => ghjgh 
             [6] => dgdf 
             [7] => uyijkgh 
            ) 

           [3] => Array 
            (
             [1] => fghfg 
             [2] => gvsfdgdf 
             [4] => fdg4t4 
             [5] => gfdg 
             [6] => dfgd 
             [7] => ghfghf 
            ) 

           [4] => Array 
            (
             [1] => fgh 
             [2] => sfsdf 
             [5] => fghfgh 
             [6] => fsdf 
             [7] => dfgdfg 
            ) 
) 

从上述阵列的关键1包含片材的标题的阵列看见。 所以在excel表格中共有7列。 目前,如果任何单元格在工作表中不包含任何值,则会跳过数组 中的这些值,但我的要求是,如果单元格不包含任何值,则该数组应包含空值。

的插件,这整个阵列创建过程发生在以下功能

功能_parsesheet($ SPOS)

我试图增加对处理空项,但没有成功一个新的案例。

对上述问题的任何帮助都会很大。

回答

2
$max = 0; 
array_walk($data->sheets[0]['cells'],function($row) use (&$max) { $max = max(max(array_keys($row)),$max); }); 
array_walk($data->sheets[0]['cells'],function(&$row) use ($max) { $row = $row + array_fill_keys(range(1,$max),NULL); ksort($row); }); 

var_dump($data->sheets[0]['cells']); 

用空单元填充每个缺失的列 对缺失的行不做任何操作。 PHP> = 5.3.0

0

它应该如何处理你的内容后的所有空值? 您可以遍历数组并填充所有缺失的行。