❶ php怎么读取excel 文件数据并输出
PHPExcel是用来操作Office Excel 文档的一个PHP类库,它基于微软的OpenXML标准和PHP语言。可以使用它来读取、写入不同格式的电子表格,如 Excel (BIFF) .xls, Excel 2007 (OfficeOpenXML) .xlsx, CSV, Libre/OpenOffice Calc .ods, Gnumeric, PDF, HTML等等。
PHP读取示例代码
//获取上传的excel临时文件
$path=$_FILES["file"]["tmp_name"];
//将临时文件移动当前目录,可自定义存储位置
move_uploaded_file($_FILES["file"]["tmp_name"],$_FILES["file"]["name"]);
//将获取在服务器中的Excel文件,此处为上传文件名
$path=$_FILES["file"]["name"];
//调用readExcel函数返回一个
二维数组
$exceArray=readExcel($path);
//创建一个读取
excel函数
functionreadExcel($path){
//引入PHPExcel类库
include'Classes/PHPExcel.php';
include'Classes/PHPExcel/IOFactory.php';
$type='Excel5';//设置为Excel5代表支持2003或以下版本,
Excel2007代表2007版
$xlsReader=PHPExcel_IOFactory::createReader($type);
$xlsReader->setReadDataOnly(true);
$xlsReader->setLoadSheetsOnly(true);
$Sheets=$xlsReader->load($path);
//开始读取上传到服务器中的Excel文件,返回一个
二维数组
$dataArray=$Sheets->getSheet(0)->
toArray();
return$dataArray;
}
❷ PHPexcel 文件关联读取数据问题
主要有两个选择,第一个是PHPExcelReader,另外一个是PHPExcel。
PHPExcelReader比较轻量级,仅支持Excel的读取,实际上就是一个Reader。但是可惜的是不能够支持Excel 2007的格式(.xlsx)。
PHPExcel比较强大,能够将内存中的数据输出成Excel文件,同时还能够对Excel做各种操作,下面主要介绍下如何使用PHPExcel进行Excel 2007格式(.xlsx)文件的读取。
❸ php 5.4 如何读取excel中的列名跟值,导入到数据库中形成“列1,值1,列2,值2......”这种样式
下载PHPExcel后保存到自己的类文件目录中,然后使用以下代码可以打开Excel 2007(xlsx)格式的文件:
require_once'/libs/PHPExcel-1.8.0/Classes/PHPExcel.php';//修改为自己的目录
echo'<p>TESTPHPExcel1.8.0:readxlsxfile</p>';
$objReader=PHPExcel_IOFactory::createReaderForFile($filename);
$objPHPExcel=$objReader->load($filename);
$objPHPExcel->setActiveSheetIndex(1);
$date=$objPHPExcel->getActiveSheet()->getCell('A16')->getValue();
读出以后再根据内容写入数据库
❹ phpexcel读取不到xlsx的文件!
可以读取到的, 你先用file_exists()判断文件是否存在, 如果存在再读取
❺ php读取excel文件示例分享(更新修改excel)
复制代码
代码如下:
//模板存放目录
$dir
=
$DOCUMENT_ROOT.'/backoffice/admin/oemcheck/';
$templateName
=
'1.xlsx';
$outputFileName
=
'模板.xlsx';
$txt='test';
//实例化Excel读取类
$PHPReader
=
new
PHPExcel_Reader_Excel2007();
if(!$PHPReader->canRead($dir.$templateName)){
$PHPReader
=
new
PHPExcel_Reader_Excel5();
if(!$PHPReader->canRead($dir.$templateName)){
echo
'无法识别的Excel文件!';
return
false;
}
}
//读取Excel
$PHPExcel
=
$PHPReader->load($dir.$templateName);
//读取工作表1
$currentSheet
=
$PHPExcel->getSheet(0);
$currentSheet->setCellValue('B13',iconv('gbk','utf-8',$txt));//表头赋值//
//实例化Excel写入类
$PHPWriter
=
new
PHPExcel_Writer_Excel2007($PHPExcel);
ob_start();
header("Content-Type:
application/force-download");
header("Content-Type:
application/octet-stream");
header("Content-Type:
application/download");
header('Content-Disposition:attachment;filename="'
.$outputFileName.
'"');//输出模板名称
header("Content-Transfer-Encoding:
binary");
header("Last-Modified:".gmdate("D,
d
M
Y
H:i:s")."
GMT");
header('Pragma:
public');
header('Expires:
30');
header('Cache-Control:
public');
$PHPWriter->save('php://output');
❻ 如何用PHPExcel读取超大excel文件
工作中经常要遇到将xlsx文件中的部分内容导入到数据库。通常我们都是用PHPExcel来读取。
通过下面的方法我们可以很容易将一个excel表格读取成为php数组,之后就可以为所欲为了:
$input_file = "data.xlsx";
$objPHPExcel = PHPExcel_IOFactory::load($input_file);
$sheetData = $objPHPExcel->getSheet(0)->toArray(null, true, true, true);
如果文章到此结束,那价值就不大了。
很不幸的情况总是存在的,当data.xlsx有上万行,每一行又有很多列,每一列又有很长的字符串,并且有的还有颜色等效果时,用上面的方法经常发生的情况就是内存不足。
好吧,我们还有ini_set来加大内存,还可以用set_time_limit来设置较长的超时,如下:
set_time_limit(90);
ini_set("memory_limit", "1024M");
$input_file = "data.xlsx";
$objPHPExcel = PHPExcel_IOFactory::load($input_file);
$sheetData = $objPHPExcel->getSheet(0)->toArray(null, true, true, true);
但很负责任的说,这些都不是终极的方案。
我曾经试过将内存设置到了2G,超时设置到了90秒,也仍然读不出一个4000行的花花绿绿的表格。原因都出在toArray这个方法上,它会将处理的结果全保存到数组中,这种方式在处理简单表格时还是很方便的,但在处理大表格时,真的是很杯具。
我们的解决方案如下:
require 'lib/PHPExcel.php';
set_time_limit(90);
$input_file = "data.xlsx";
$objPHPExcel = PHPExcel_IOFactory::load($input_file);
// 读取规则
$sheet_read_arr = array();
$sheet_read_arr["sheet1"] = array("A","B","C","D","F");
$sheet_read_arr["sheet2"] = array("A","B","C","D","F");
// 循环所有的页
foreach ($sheet_read_arr as $key => $val)
{
$currentSheet = $objPHPExcel->getSheetByName($key);// 通过页名称取得当前页
$row_num = $currentSheet->getHighestRow();// 当前页行数
// 循环从第二行开始,第一行往往是表头
for ($i = 2; $i <</span>= $row_num; $i++)
{
$cell_values = array();
foreach ($val as $cell_val)
{
$address = $cell_val . $i;// 单元格坐标
// 读取单元格内容
$cell_values[] = $currentSheet->getCell($address)->getFormattedValue();
}
// 看看数据
print_r($cell_values);
}
}
上面的方式算是较复杂的情况了,如果只是想将所有的单元格全读出来,用下面的方法就行了:
require 'lib/PHPExcel.php';
set_time_limit(90);
$input_file = "data.xlsx";
$objPHPExcel = PHPExcel_IOFactory::load($input_file);
$sheet_count = $objPHPExcel->getSheetCount();
for ($s = 0; $s <</span> $sheet_count; $s++)
{
$currentSheet = $objPHPExcel->getSheet($s);// 当前页
$row_num = $currentSheet->getHighestRow();// 当前页行数
$col_max = $currentSheet->getHighestColumn(); // 当前页最大列号
// 循环从第二行开始,第一行往往是表头
for($i = 2; $i <</span>= $row_num; $i++)
{
$cell_values = array();
for($j = 'A'; $j <</span> $col_max; $j++)
{
$address = $j . $i; // 单元格坐标
$cell_values[] = $currentSheet->getCell($address)->getFormattedValue();
}
// 看看数据
print_r($cell_values);
}
}
我们可以将上面的print_r地方改成组拼sql语句并写入文件,然后用mysql导入,当然也可以直接连接数据库向表中插入记录,这就随意了。
❼ 现在在开发一个PHP程序,需要读取EXCEL里面的值,比如我想取出G3的值,如何处理,怎么写代码
<?php
header("Content-Type: text/html; charset=utf-8");
require_once 'db.class.php';
require_once 'Classes/PHPExcel.php';
$objPHPExcel = new PHPExcel();
$filePath = "email.xlsx";
$arr = array();
$temparr = array();
$PHPExcel = new PHPExcel();
$PHPReader = new PHPExcel_Reader_Excel2007();
$PHPExcel = $PHPReader->load($filePath);
$currentSheet = $PHPExcel->getSheet(0);
/*取得一共有多少列*/
$allColumn = $currentSheet->getHighestColumn();
/*取得一共有多少行*/
$allRow = $currentSheet->getHighestRow();
echo $allColumn;
echo '<hr>';
echo $allRow;
echo '<hr>';
for($currentRow = 2;$currentRow<=$allRow;$currentRow++){
$temparr['usernum'] = $currentSheet->getCell('A'.$currentRow)->getValue();
$temparr['price'] = $currentSheet->getCell('B'.$currentRow)->getValue();
$temparr['rongliang'] = $currentSheet->getCell('C'.$currentRow)->getValue();
$temparr['fujian'] = $currentSheet->getCell('D'.$currentRow)->getValue();
$temparr['gerenwangpan'] = $currentSheet->getCell('E'.$currentRow)->getValue();
$temparr['chaodafujian'] = $currentSheet->getCell('F'.$currentRow)->getValue();
$temparr['suishenyou'] = $currentSheet->getCell('G'.$currentRow)->getValue();
$temparr['chuanzhen'] = $currentSheet->getCell('H'.$currentRow)->getValue();
$temparr['qiyewangpan'] = $currentSheet->getCell('I'.$currentRow)->getValue();
//$arr[$currentRow-1] = $temparr;
$sql = "INSERT INTO `netease_price` (`usernum`, `price`, `rongliang`, `fujian`, `gerenwangpan`, `chaodafujian`,`suishenyou`, `chuanzhen`, `qiyewangpan`) VALUES (
'".$temparr['usernum']."',
'".$temparr['price']."',
'".$temparr['rongliang']."',
'".$temparr['fujian']."',
'".$temparr['gerenwangpan']."',
'".$temparr['chaodafujian']."',
'".$temparr['suishenyou']."',
'".$temparr['chuanzhen']."',
'".$temparr['qiyewangpan']."'
)";
mysql_query($sql);
/*
自动读取
for($currentColumn='A';$currentColumn<=$allColumn;$currentColumn++){
$address = $currentColumn.$currentRow;
echo $currentSheet->getCell($address)->getValue()."\t";
}
echo "<br />";
*/
}
❽ PHP远程读取excel文件,怎么读取
PHPExcel 通过 PHPExcel_Shared_OLERead 类的 read 方法读取文件
但 read 方法里使用了 is_readable 函数来确认文件是否存在,而 is_readable 不能作用于 url
所以不可直接远程读取
但若绕过 is_readable 函数的话,就是可以的
public function read($sFileName)
{
// Check if file exists and is readable
if(!is_readable($sFileName)) {
throw new Exception("Could not open " . $sFileName . " for reading! File does not exist, or it is not readable.");
}
// Get the file data
$this->data = file_get_contents($sFileName);
❾ php读取excel,excel下多个个工作表,该怎么读取
php有个PHPExcel扩展,是可以实现你的要求的。
我这里有个可以读取多个工作薄的自定义excel类,试试看:
<?php
/**
*excel.class.php
*/
class Excel
{
/**
* 从excel文件中取得所有数据。并转换成指定编码格式。
* $toCode 表示需要转换成的编码格式,目前扩充了utf8,gbk2312,html三种格式。
* @return 返回二维数组。
*/
static function getDataFromExl($filePath,$toCode = "utf8")
{
$fh = @fopen($filePath,'rb');
if( !$fh || filesize($filePath)==0 )
{
return -1; //文件不可读或者为空
}
$fc = fread( $fh, filesize($filePath) );
@fclose($fh);
if( strlen($fc) < filesize($filePath) )
{
return -2; //读取错误
}
$exc = new ExcelFileParser();
$res = $exc->ParseFromString($fc);
$ws_number = count($exc->worksheet['name']);//取得工作薄数量
if( $ws_number < 1 )
{
return -3;
}
for ($ws_n = 0; $ws_n < $ws_number; $ws_n++)
{
$ws = $exc -> worksheet['data'][$ws_n];
$data = $ws['cell'];
foreach($data as $k=>$v) //一行数据
{
$row = null;
foreach($v as $a=>$d) //一行数据的一个字节
{
$value = null;
if(count($d) == 1)
{
continue;
}
if($d['type'] == 0) //如果是字符类型则转换成为指定编码格式
{
$ind = $d['data'];
if( $exc->sst['unicode'][$ind] ) //返回数据编码格式
{
switch($toCode)
{
case "utf8":
$s = Strings::uc2utf8($exc->sst['data'][$ind]);
break;
case "gbk":
$s = Strings::uc2gbk($exc->sst['data'][$ind]);
break;
case "html":
$s = Strings::uc2html($exc->sst['data'][$ind]);
break;
default:
$s = Strings::uc2utf8($exc->sst['data'][$ind]);
break;
}
}
else
{
$s = $exc->sst['data'][$ind];
}
if( strlen(trim($s))==0 || $s === null )
{
$value = '';
}
else
{
$value = $s;
}
}
elseif($d['type'] == 3)
{
$time_list = explode('.', $d['data']);
$time_format = $time_list[2].'-'.$time_list[0].'-'.$time_list[1];
$timestamp = strtotime($time_format);
$value = date("Y-m-d H:i:s", $timestamp);
}
else
{
$value = $d['data'];
}
$row[$a] = $value;
}
$recordList[] = $row;
}
}
return $recordList;
}
}
require_once('./excel.class.php');
$emailData = Excel::getDataFromExl($_FILES['file_name']['tmp_name']);
❿ php怎样读取excel表格内容
常用的用PHP读取EXCEL的方法有以下三种,各自有各自的优缺点。个人推荐用第三种方法,因为它可以跨平台使用。
1. 以.csv格式读取
将.xls转换成.csv的文本格式,然后再用PHP分析这个文件,和PHP分析文本没有什么区别。
优点:跨平台,效率比较高、可以读写。
缺点:只能直接使用.csv的文件,如果经常接受.xls二进制文件的话需要手工转换,不能自动化。一个文件只有一个SHEET。
PHP有自带的分析.csv函数:fgetcsv
array fgetcsv ( int $handle [, int $length [, string $delimiter [, string $enclosure]]] )
handle 一个由 fopen()、popen() 或 fsockopen() 产生的有效文件指针。
length (可选)必须大于 CVS 文件内最长的一行。在 PHP 5 中该参数是可选的。如果忽略(在 PHP 5.0.4 以后的版本中设为 0)该参数的话,那么长度就没有限制,不过可能会影响执行效率。
delimiter (可选)设置字段分界符(只允许一个字符),默认值为逗号。
enclosure (可选)设置字段环绕符(只允许一个字符),默认值为双引号。该参数是在 PHP 4.3.0 中添加的。 和 fgets() 类似,只除了 fgetcsv() 解析读入的行并找出 CSV 格式的字段然后返回一个包含这些字段的数组。
fgetcsv() 出错时返回 FALSE,包括碰到文件结束时。
注意: CSV 文件中的空行将被返回为一个包含有单个 null 字段的数组,不会被当成错误。
当然也可以自己手动分析字符串。
还可以利用fputcsv函数将行格式化为 CSV 并写入文件指针。
2. ODBC链接数据源
优点:支持多种格式,cvs, xls等。支持读写,使用标准SQL语言,和SQLSERVER、MYSQL数据库几乎完全一样。
缺点:值支持windows服务器
3. PHP自定义类
优点:跨平台。某些类支持写操作。支持.xls二进制文件
常用的类有phpExcelReader、PHPExcel。其中后者支持读写,但是需要php5.2以上版本。
phpExcelReader是专门用来读取文件的。返回一个数组,包含表格的所有内容。
该 class 使用的方法可以参考网站下载回来的压缩档中的 example.php。
不过我下载回来的 (版本 2009-03-30),有两点要注意:
reader.php 中的下面这行要修改
将 require_once ‘Spreadsheet/Excel/Reader/OLERead.php’;
改为 require_once ‘oleread.inc’;
example.php 中
修改 $data->setOutputEncoding(’CP1251′);
为 $data->setOutputEncoding(’CP936′);
example2.php 中
修改 nl2br(htmlentities($data->sheets[$sheet]['cells'][$row][$col]));
为 $table_output[$sheet] .= nl2br(htmlspecialchars($data->sheets[$sheet]['cells'][$row][$col]));
不然中文会有问题。
繁体的话可以修改为CP950、日文是CP932,具体可参考codepage说明。
修改 $data->read(’jxlrwtest.xls’) 为自己的 excel 文件名,zip 档中附的 jxlrwtest.xls 应该是坏了。