我从一个网站下载一个excel文件,并希望用PHP导入它的html文件中的数据,我使用PHPEXCEL库,但我的代码无法正常工作,除非我打开我的excel文件并手动保存,之后php代码可以从中读取数据并导入html文件中的数据。 我该如何自动完成这个过程?
我的代码:
<?PHP
require_once ('Classes/PHPExcel.php');
$file="sample.xlsx";
$inputFileName = $file;
$objPHPExcel = PHPExcel_IOFactory::load($inputFileName);
$sheet = $objPHPExcel->getActiveSheet();
$row = $objPHPExcel->getActiveSheet()->getHighestRow();
for($i=1;$i<=$row;$i++){
$cell = $sheet->getCell('A'.$i);
if($cell=='test'){
$find=1;
break;
}
}
if($find==1){
$rownumber=$i;
$row = $objPHPExcel->getActiveSheet()->getRowIterator($rownumber)->current();
$cellIterator = $row->getCellIterator();
$cellIterator->setIterateOnlyExistingCells(false);
foreach ($cellIterator as $key => $cell) {
$data[$j]=round($cell->getCalculatedValue(),2);
$j++;
}
$output="<meta http-equiv='Content-Type' content='text/html; charset=utf-8'>
<table width='95%' class='bourse'>
<tr><td colspan='2' bgcolor='#F2F2F2'>$header</td></tr>";
for($i=2;$i< $j-1 ;$i++){
$output.="<tr><td>".$data[$i]."</font></td></tr>";
}
$output.="</table></div>";
//echo $output;
file_put_contents('sample.html',$output);
}
?>
答案 0 :(得分:2)
问题是您下载的文件在标准MS Excel文件没有使用时会使用命名空间。
例如(标准MS Excel文件)
<?xml version="1.0" encoding="UTF-8" standalone="true"?>
<workbook xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xml:space="preserve">
<fileVersion rupBuild="4505" lowestEdited="4" lastEdited="4" appName="xl"/>
<workbookPr codeName="ThisWorkbook"/>
<bookViews>
<workbookView visibility="visible" tabRatio="600" showVerticalScroll="1" showSheetTabs="1" showHorizontalScroll="1" minimized="0" firstSheet="0" autoFilterDateGrouping="1" activeTab="0"/>
</bookViews>
<sheets>
<sheet r:id="rId4" sheetId="1" name="Simple"/>
</sheets>
<definedNames/>
<calcPr fullCalcOnLoad="0" calcMode="auto" calcId="124519"/>
</workbook>
您的档案:
<?xml version="1.0" encoding="UTF-8"?>
<x:workbook xmlns:x="http://schemas.openxmlformats.org/spreadsheetml/2006/main">
<x:bookViews>
<x:workbookView/>
</x:bookViews>
<x:sheets>
<x:sheet xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" r:id="R87019d29e03f45b0" sheetId="1" name="دیده بان بازار"/>
</x:sheets>
</x:workbook>
注意每个元素的x:
前缀;行xmlns:x="http://schemas.openxmlformats.org/spreadsheetml/2006/main"
为x
定义http://schemas.openxmlformats.org/spreadsheetml/2006/main
的命名空间,而在标准MS Excel文件中,这只是xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main"
将http://schemas.openxmlformats.org/spreadsheetml/2006/main
设置为$xmlStyles = simplexml_load_string($this->_getFromZipArchive($zip, "$dir/$xpath[Target]"), 'SimpleXMLElement', PHPExcel_Settings::getLibXmlLoaderOptions()); //~ http://schemas.openxmlformats.org/spreadsheetml/2006/main");
的默认命名空间文件
这个
没有简洁明了的解决方案一个肮脏的解决方案是修改Excel2007 Reader。假设您正在使用PHPExcel 1.8.0
从
更改第505行$xmlStyles = simplexml_load_string(preg_replace('/\bx:/','',$this->_getFromZipArchive($zip, "$dir/$xpath[Target]")), 'SimpleXMLElement', PHPExcel_Settings::getLibXmlLoaderOptions()); //~ http://schemas.openxmlformats.org/spreadsheetml/2006/main");
到
$xmlWorkbook = simplexml_load_string($this->_getFromZipArchive($zip, "{$rel['Target']}"), 'SimpleXMLElement', PHPExcel_Settings::getLibXmlLoaderOptions()); //~ http://schemas.openxmlformats.org/spreadsheetml/2006/main");
从
更改第609行$xmlWorkbook = simplexml_load_string(preg_replace('/\bx:/','',$this->_getFromZipArchive($zip, "{$rel['Target']}")), 'SimpleXMLElement', PHPExcel_Settings::getLibXmlLoaderOptions()); //~ http://schemas.openxmlformats.org/spreadsheetml/2006/main");
到
$xmlSheet = simplexml_load_string($this->_getFromZipArchive($zip, "$dir/$fileWorksheet"), 'SimpleXMLElement', PHPExcel_Settings::getLibXmlLoaderOptions()); //~ http://schemas.openxmlformats.org/spreadsheetml/2006/main");
从
更改第652行$xmlSheet = simplexml_load_string(preg_replace('/\bx:/','',$this->_getFromZipArchive($zip, "$dir/$fileWorksheet")), 'SimpleXMLElement', PHPExcel_Settings::getLibXmlLoaderOptions()); //~ http://schemas.openxmlformats.org/spreadsheetml/2006/main");
到
{{1}}
请注意,这是一个黑客,而不是一个修复......它可能会对其他工作簿产生负面影响(虽然我希望它赢了)
答案 1 :(得分:0)
尝试加载这样的文件:
$inputFileType = PHPExcel_IOFactory::identify($path);
$objReader = PHPExcel_IOFactory::createReader($inputFileType); //Excel5
/** @var PHPExcel $objPHPExcel */
$objPHPExcel = $objReader->load($path);
.....
答案 2 :(得分:0)
我不是PHP程序员的专家。但是我已经将PHPexcel用于了很多工具。
主要问题似乎是文件的第一行,其中所有单元格都已合并。我删除了合并,我的脚本能够毫无问题地读取值。
链接到OP的原始文件(由于原始帖子被删除,此处重新发布): - http://members.tsetmc.com/tsev2/excel/MarketWatchPlus.aspx?d=0
脚本的最低要求: -
将Excel,PHPExcel.php和此脚本保存在同一目录中
将PHPExcel库保留在同一目录中。
请在下面找到我的脚本,该脚本从第4行开始读取第3列中的所有值。
<?php
require "PHPExcel.php";
require "PHPExcel/IOFactory.php";
mb_internal_encoding('UTF-8');
mb_http_output('UTF-8');
set_time_limit ( 0 );
$fileName = "MarketWatchPlus-1393-3-17.xlsx";
$inputFileType = PHPExcel_IOFactory::identify ( $fileName );
$readerObj = PHPExcel_IOFactory::createReader ( $inputFileType );
$excelFile = $readerObj->load ( $fileName );
// Set active sheet to 0(First Sheet)
$excelFile->setActiveSheetIndex ( 0 );
$activeSheet = $excelFile->getActiveSheet();
// Get the highest row in the file( for looping purposes )
$highestRow = $activeSheet->getHighestRow();
$currentRow = 4;
echo "<html><body>";
while ( $currentRow <= 100 ) {
// Column numbers start with 0. A => 0, B => 1 .. and so on.
$value = $activeSheet->getCellByColumnAndRow ( 2, $currentRow );
// Convert to string
$value = $value."";
echo "<p>".$value."</p>";
$currentRow++;
}
echo "</body></html>";
exit();
?>