【发布时间】:2012-02-04 11:29:42
【问题描述】:
我在尝试从 Excel 文件中提取信息时遇到了这个问题。这是我的情况,我从不同的用户那里收到了 34 个 Excel 文件。
我使用 PHP 版本 5 从 Excel 文件中提取。我的脚本会循环每个文件,并根据工作表名称再次循环,最后根据单元格地址再次循环。
当用户输入一个单元格时出现问题,例如=+A1 表示用户将单元格值引用到另一个单元格,因为它与单元格 A1 具有相同的值。
当我签入 mysql 时(因为我保存了这些以供将来使用),我从特定单元格的记录中发现与从同一单元格但在不同 excel 文件中获得的另一条记录相同。我的意思是,由于我的 php 脚本将从一个文件循环到另一个文件,因此 PHPExcel 第一次读取例如具有 3,000.00 美元价值的单元格 C3 时,PHPExcel 的下一个文件可能会转到同一个单元格 C3 但这次C3 单元格包含一个引用单元格 A1 的公式(“=+A1”公式),其价值为 5,000.00 美元。
PHP 脚本假设以 5,000.00 美元的价格记录在 mysql 中,但它没有。我怀疑 PHPExcel 脚本在第一轮没有清除变量。我试过 unset($objPHPExcel) 并销毁变量,但它仍然在发生。
我的编码简单如下:
if(file_exists($inputFileName))
{
$inputFileType = PHPExcel_IOFactory::identify($inputFileName);
$objReader = PHPExcel_IOFactory::createReader($inputFileType);
$objReader->setReadDataOnly(true);
$objPHPExcel = $objReader->load($inputFileName);
//to obtain date from FILE and store in DB for future comparison
$validating_date_reporting = $objPHPExcel->getSheet(0)->getCell('C10')->getValue();
$validating_date_reporting = PHPExcel_Style_NumberFormat::toFormattedString($validating_date_reporting,"YYYY-MMM-DD");
$validating_date_reporting = date('Y-m-d',strtotime($validating_date_reporting));
//first entry
$entry = mysql_query('INSERT INTO `'.$table.'`(`broker_code`, `date`, `date_from_submission`) VALUES("'.$broker_code.'","'.$reporting_date.'","'.$reporting_date.'")') or die(mysql_error());
foreach($cells_array as $caRef=>$sName)
{
foreach($sName as $sNameRef=>$cells)
{
$wksht_page = array_search($caRef, $sheetNameArray);
$cell_column = $wksht_page.'_'.$cells;
echo $inputFileName.' '.$caRef.' '.$cell_column.'<br>';
$value = $objPHPExcel->setActiveSheetIndexByName($caRef)->getCell($cells)->getCalculatedValue();
echo $value.'<br>';
if($value)
{
$isdPortal->LoginDB($db_periodic_submission);
$record = mysql_query('UPDATE `'.$table.'` SET `'.$cell_column.'` = "'.$value.'" WHERE broker_code = "'.$broker_code.'" AND date_from_submission = "'.$validating_date_reporting.'"') or die(mysql_error());
}
}
}
}
我真的希望你能在这里帮助我..
提前谢谢你。
【问题讨论】:
标签: phpexcel