我使用 PHPExcel从Excel表中读取数据并存储在MysqL表中,直到现在我可以上传.xls以及.xlsx文件,并且在上传xls后,我得到了下面的数据结构
name    start_date              end_date               city
one 11/25/2011 3:30:00 PM   11/29/2011 4:40:00 AM   Jaipur
two 10/22/2011 5:30:00 PM   10/25/2011 6:30:00 AM   Kota
three  3/10/2011 2:30:00 PM 3/11/2011 12:30:00 AM   Bikaner
                                                    chandigarh

现在我有一些问题,请建议我优化的方法

>我们如何获得工作表名称(bcoz在一个excel有7张)
>现在我做的是存储这些
数据到db,下面是代码片段

$inputFileName = "test.xls";  
$inputFileType = PHPExcel_IOFactory::identify($inputFileName);  
$objReader = PHPExcel_IOFactory::createReader($inputFileType);  
$objReader->setReadDataOnly(true);  
/**  Load $inputFileName to a PHPExcel Object  **/  
$objPHPExcel = $objReader->load($inputFileName);  
$total_sheets=$objPHPExcel->getSheetCount(); // here 4  
$allSheetName=$objPHPExcel->getSheetNames(); // array ([0]=>'student',[1]=>'teacher',[2]=>'school',[3]=>'college')  
$objWorksheet = $objPHPExcel->setActiveSheetIndex(0); // first sheet  
$highestRow = $objWorksheet->getHighestRow(); // here 5  
$highestColumn = $objWorksheet->getHighestColumn(); // here 'E'  
$highestColumnIndex = PHPExcel_Cell::columnIndexFromString($highestColumn);  // here 5  
for ($row = 1; $row <= $highestRow; ++$row) {  
    for ($col = 0; $col <= $highestColumnIndex; ++$col) {  
    $value=$objWorksheet->getCellByColumnAndRow($col,$row)->getValue();  
        if(is_array($arr_data) ) { $arr_data[$row-1][$col]=$value; }  
    }  
}
print_r($arr_data);

并返回

Array
(
[0] => Array
    (
        [0] => name
        [1] => start_date
        [2] => end_date
        [3] => city
        [4] =>         
    )

[1] => Array
    (
        [0] => one  
        [1] => 40568.645833333
        [2] => 40570.5
        [3] => Jaipur
        [4] => 
    )
[2] => Array
    (
        [0] => two 
        [1] => 40568.645833333
        [2] => 40570.5
        [3] => Kota
        [4] => 
    )
[3] => Array
    (
        [0] => three
        [1] => 40568.645833333
        [2] => 40570.5
        [3] => Bikaner
        [4] => 
     )
  [4] => Array
    (
        [0] => 
        [1] => 
        [2] => 
        [3] => Chandigarh
        [4] => 
    )

)

我需要它

>每个excel表(即第一行)的标题变为数组($arr_data)的关键字
> rest成为数组的值.
>时间更改为一些整数值,这与excel表中的相同
>所有行中的数组的空白字段(即blank头文件列)应该被截断(这里[4])
>如果Excel表格的第一个字段(或某些的组合条件)
字段)不满足,那么该行不应该添加到数组中

即所期望的数组应该看起来像

Array  
    (  
    [0] => Array  
    (  
      [name] => one  
      [start_date] => 11/25/2011 3:30:00 PM  
      [end_date] => 11/29/2011 4:40:00 AM  
      [city] => Jaipur  
    )  
    [1] => Array  
    (  
      [name] => two  
      [start_date] => 10/22/2011 5:30:00 PM  
      [end_date] => 10/25/2011 6:30:00 AM  
      [city] => Kota  
    )  
    [2] => Array  
    (  
      [name] => three  
      [start_date] => 3/10/2011 2:30:00 PM  
      [end_date] => 3/11/2011 12:30:00 AM  
      [city] => Bikaner  
    )  
)

之后,我将数据存储到我的数据库中,使用所需数组上的MysqL操作.

>在db中存储上述数据还有其他简单的方法

注意:请不要参考手册(真的很糟糕)…只是告诉我方法名称..

更新

@Mark感谢您的解决方案,它帮助我很多,但仍然有一些问题

>当任何单元格为空时,如何处理excel sheet..bcoz中的空白单元格,然后显示通知

Notice: Undefined index: C in C:\xampp\htdocs\xls_reader\Tests\excel2007.PHP
on line 60
Notice: Undefined index: D in C:\xampp\htdocs\xls_reader\Tests\excel2007.PHP
on line 60

而第60行是

foreach($headingsArray as $columnKey => $columnheading) { 
    $namedDataArray[$r][$columnheading] = $daTarow[$row]$columnKey];
}

>如何在检索完整数据数组之前设置条件,即如果我想要的是,如果第一列和第二列在任何行中为空/空白,则该行不应该添加到我们所需的数组中

谢谢

how do we get the sheet name ( bcoz in
one excel there are 7 sheets )?

获取当前活动表单:

$sheetName = $objPHPExcel->getActiveSheet()->getTitle();

time changed into some integer value,
that shoud be same as in excel sheet

查看PHPExcel_Shared_Date :: ExcelToPHP($excelDate)或PHPExcel_Shared_Date :: ExcelToPHPObject($excelDate)将日期/时间值转换为PHP时间戳记或DateTime对象

看看$objPHPExcel-> getActiveSheet() – > toArray()方法,而不是自己循环遍历所有的rwos和列.如果要使用toArray格式化参数,请不要使用$objReader-> setReadDataOnly(true);否则PHPExcel无法区分数字和日期/时间.最新的SVN代码在工作表对象中添加了一个rangetoArray()方法,它允许您一次读取一行(或单元格块),例如. $objPHPExcel-> getActiveSheet() – > rangetoArray( ‘A1:A4’)

其余的问题基本上是PHP数组操作

编辑

PS.而不是告诉我们手册真的非常糟糕…告诉我们如何改进它.

编辑2

使用最新的SVN代码来利用rangetoArray()方法:

$objWorksheet = $objPHPExcel->setActiveSheetIndex(0);
$highestRow = $objWorksheet->getHighestRow();
$highestColumn = $objWorksheet->getHighestColumn();

$headingsArray = $objWorksheet->rangetoArray('A1:'.$highestColumn.'1',null,true,true);
$headingsArray = $headingsArray[1];

$r = -1;
$namedDataArray = array();
for ($row = 2; $row <= $highestRow; ++$row) {
    $daTarow = $objWorksheet->rangetoArray('A'.$row.':'.$highestColumn.$row,true);
    if ((isset($daTarow[$row]['A'])) && ($daTarow[$row]['A'] > '')) {
        ++$r;
        foreach($headingsArray as $columnKey => $columnheading) {
            $namedDataArray[$r][$columnheading] = $daTarow[$row][$columnKey];
        }
    }
}

echo '<pre>';
var_dump($namedDataArray);
echo '</pre><hr />';

PHPExcel reader – 需要帮助的更多相关文章

  1. html5使用canvas实现弹幕功能示例

    这篇文章主要介绍了html5使用canvas实现弹幕功能示例的相关资料,需要的朋友可以参考下

  2. 前端实现弹幕效果的方法总结(包含css3和canvas的实现方式)

    这篇文章主要介绍了前端实现弹幕效果的方法总结(包含css3和canvas的实现方式)的相关资料,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  3. H5 canvas实现贪吃蛇小游戏

    本篇文章主要介绍了H5 canvas实现贪吃蛇小游戏,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  4. ios – parse.com用于键,预期字符串的无效类型,但是得到了数组

    我尝试将我的数据保存到parse.com.我已经预先在parse.com上创建了一个名为’SomeClass’的类.它有一个名为’mySpecialColumn’的列,其数据类型为String.这是我尝试使用以下代码保存数据的代码:如果我运行这个我得到:错误:密钥mySpecialColumn的无效类型,预期字符串,但得到数组这就是我在parse.com上的核心外观:有谁知道我为什么会收到这个错误?

  5. ios – 上下文类型’NSFastEnumeration’不能与数组文字一起使用

    斯威夫特3,你会这样做吗?解决方法正如您所发现的,您不能使用as-casting将数组文字的类型指定为NSFastEnumeration.您需要找到一个符合NSFastEnumeration的正确类,在您的情况下它是NSArray.通常写这样的东西:

  6. 对于NSManagedObject,Xcode 9构建了Date vs NSDate的问题

    Xcode9为模拟器与设备中的实体的Date类型属性生成不同的代码.我在coredata中将类设置为类别/扩展名下的codegen功能.直到Xcode8.3(最新)它一切正常.下面是Xcode9为属性自动生成的代码–在设备上:–和,在模拟器上:–有谁遇到过这个问题?对于一个有50个成员的项目来解决这个问题的最佳解决方案是什么,直到Xcode更新修复它?

  7. ios – 获取资产目录文件夹中所有图像的数组

    在iOS中,是否可以获取资产目录文件夹中的图像数组?我不确定为什么会对此进行投票.我真的不知道从哪里开始.我的另一种方法是创建文件夹中所有文件的plist,但它似乎是多余的.我无法添加任何代码,因为我会添加什么?

  8. iOS兼容输入类型日期 – 设置最小值最大值

    我试图在UIWebViewiOS应用程序中使用jQueryMobile设置日期,值设置正确但最小和最大属性日期设置不起作用.和当我在模拟器上运行它时,当选择日期字段时,日期选择器可见,但未设置最小,最大日期.解决方法模拟器的safari不支持设置输入类型=“日期”的最小值和最大值.您可以通过导航到thissite并尝试控制来测试它.它(可能)可以在桌面浏览器上运行,但不会在模拟器的浏览器或UIWebView中运行.

  9. ios – 设置NSDataDetector的上下文日期

    假设今天是2014年1月20日.如果我使用NSDataDetector从“明天下午4点”字符串中提取日期,我将得到2014-01-21T16:00.大.但是,假设我希望NSDataDetector假装当前日期是2014年1月14日.这样,当我解析“明天下午4点”时,我将得到2014-01-15T16:00.如果我在设备上更改系统时间,我会得到我想要的.但是,有没有办法以编程方式指定它?

  10. ios – 如何自动生成日期属性为Date而不是NSDate的NSManagedObject子类?

    我目前正在将我的项目更新为Swift3,并且我将所有的NSDate方法和扩展都移动到Date以便在应用程序中保持标准.问题是我使用Xcode自动生成我的NSManagedobject子类,它生成日期属性为NSDate而不是Date.有没有办法用日期属性作为日期生成它?

随机推荐

  1. PHP个人网站架设连环讲(一)

    先下一个OmnihttpdProffesinalV2.06,装上就有PHP4beta3可以用了。PHP4给我们带来一个简单的方法,就是使用SESSION(会话)级变量。但是如果不是PHP4又该怎么办?我们可以假设某人在15分钟以内对你的网页的请求都不属于一个新的人次,这样你可以做个计数的过程存在INC里,在每一个页面引用,访客第一次进入时将访问时间送到cookie里。以后每个页面被访问时都检查cookie上次访问时间值。

  2. PHP函数学习之PHP函数点评

    PHP函数使用说明,应用举例,精简点评,希望对您学习php有所帮助

  3. ecshop2.7.3 在php5.4下的各种错误问题处理

    将方法内的函数,分拆为2个部分。这个和gd库没有一点关系,是ecshop程序的问题。会出现这种问题,不外乎就是当前会员的session或者程序对cookie的处理存在漏洞。进过本地测试,includes\modules\integrates\ecshop.php这个整合自身会员的类中没有重写integrate.php中的check_cookie()方法导致,验证cookie时返回的username为空,丢失了登录状态,在ecshop.php中重写了此方法就可以了。把他加到ecshop.php的最后面去就可

  4. NT IIS下用ODBC连接数据库

    $connection=intodbc_connect建立数据库连接,$query_string="查询记录的条件"如:$query_string="select*fromtable"用$cur=intodbc_exec检索数据库,将记录集放入$cur变量中。再用while{$var1=odbc_result;$var2=odbc_result;...}读取odbc_exec()返回的数据集$cur。最后是odbc_close关闭数据库的连接。odbc_result()函数是取当前记录的指定字段值。

  5. PHP使用JpGraph绘制折线图操作示例【附源码下载】

    这篇文章主要介绍了PHP使用JpGraph绘制折线图操作,结合实例形式分析了php使用JpGraph的相关操作技巧与注意事项,并附带源码供读者下载参考,需要的朋友可以参考下

  6. zen_cart实现支付前生成订单的方法

    这篇文章主要介绍了zen_cart实现支付前生成订单的方法,结合实例形式详细分析了zen_cart支付前生成订单的具体步骤与相关实现技巧,需要的朋友可以参考下

  7. Thinkphp5框架实现获取数据库数据到视图的方法

    这篇文章主要介绍了Thinkphp5框架实现获取数据库数据到视图的方法,涉及thinkPHP5数据库配置、读取、模型操作及视图调用相关操作技巧,需要的朋友可以参考下

  8. PHP+jquery+CSS制作头像登录窗(仿QQ登陆)

    本篇文章介绍了PHP结合jQ和CSS制作头像登录窗(仿QQ登陆),实现了类似QQ的登陆界面,很有参考价值,有需要的朋友可以了解一下。

  9. 基于win2003虚拟机中apache服务器的访问

    下面小编就为大家带来一篇基于win2003虚拟机中apache服务器的访问。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  10. Yii2中组件的注册与创建方法

    这篇文章主要介绍了Yii2之组件的注册与创建的实现方法,非常不错,具有参考借鉴价值,需要的朋友可以参考下

返回
顶部