如何使用 PHPExcel 解析响应表导入 Excel 文件以输入标签(例如:自动填充输入 id="fname" 到 Hello 并输入 id="lname"
Posted
技术标签:
【中文标题】如何使用 PHPExcel 解析响应表导入 Excel 文件以输入标签(例如:自动填充输入 id="fname" 到 Hello 并输入 id="lname" 到 World)?【英文标题】:How to parse response table with PHPExcel import Excel file to input tag (example : autofill input id="fname" to Hello and input id="lname" to World)? 【发布时间】:2020-06-17 15:57:53 【问题描述】:如何使用 phpExcel 将这个响应表解析为所需的输入字段(例如:自动填充 input id="fname"
到 Hello 和自动填充 input id="lname"
到 World)?
我可以
1. 将文件发送到 PHP。
2. 用第三方库解析EXCEL文件(使用PHPExcel库)。
3. 为 AJAX/POST 创建响应到 html 页面。
但我无法使用 PHPExcel 将这个响应表解析为所需的输入字段(例如:自动填充 input id="fname"
到 Hello 和自动填充 input id="lname"
到 World)。
底部的示例代码和文件。
excelimport.xlsx
(Excel 文件)
Download Link
excelimport.php
(PHP 代码)
<!DOCTYPE html>
<html>
<head>
<style>
h2 display: inline;
</style>
<script>
var _validFileExtensions = [".xls", ".xlsx", ".csv"];
function ValidateSingleInput(oInput)
if (oInput.type == "file")
var sFileName = oInput.value;
if (sFileName.length > 0)
var blnValid = false;
for (var j = 0; j < _validFileExtensions.length; j++)
var sCurExtension = _validFileExtensions[j];
if (sFileName.substr(sFileName.length - sCurExtension.length,
sCurExtension.length).toLowerCase() == sCurExtension.toLowerCase())
blnValid = true;
break;
if (!blnValid)
alert("Sorry, " + sFileName + " is invalid, allowed extensions are: " + _validFileExtensions.join(",
"));
oInput.value = "";
return false;
return true;
</script>
</head>
<body>
<?php
if(isset($_FILES['excel']) && $_FILES['excel']['error']==0)
require_once "PHPExcel/Classes/PHPExcel.php";
$tmpfname = $_FILES['excel']['tmp_name'];
$excelReader = PHPExcel_IOFactory::createReaderForFile($tmpfname);
$excelObj = $excelReader->load($tmpfname);
$worksheet = $excelObj->getSheet(0);
$lastRow = $worksheet->getHighestRow();
echo "<table class=\"table table-sm\">";
for ($row = 1; $row <= $lastRow; $row++)
echo "<tr><td scope=\"row\">";
echo $worksheet->getCell('A'.$row)->getValue();
echo "</td><td>";
echo $worksheet->getCell('B'.$row)->getValue();
echo "</td><td>";
echo $worksheet->getCell('C'.$row)->getValue();
echo "</td><td>";
echo $worksheet->getCell('D'.$row)->getValue();
echo "</td><tr>";
echo "</table>";
?>
<form action = "" method = "POST" enctype = "multipart/form-data">
<h2 for="myfile1">Select files : </h2>
<input type = "file" name = "excel" onchange="ValidateSingleInput(this)" />
<input type = "submit"/><br><br>
</form>
<h2 for="fname">First name : </h2><input type="text" id="fname" name="fname"
value=""><br><br>
<h2 for="lname">Last name : </h2><input type="text" id="lname" name="lname"
value=""><br><br>
<input type="submit" name="submit2">
</body>
</html>
我用PHPExcel库用link下载。
【问题讨论】:
【参考方案1】:好消息:我已经回答了使用 PHPExcel 解析响应表导入 Excel 文件以输入标签(例如:自动填充输入 id=“fname” 到 Hello,输入 id=“lname” 到 World)用我的完整源代码。
我有 link. 的答案
excelimport.xlsx
(Excel 文件)
Download Link
excelimport.php
(PHP 代码)
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Document</title>
<style>
h2 display: inline;
</style>
</head>
<body>
<form action="" method="post" enctype="multipart/form-data" name="myform1" id="myform1">
<h2 for="myfile1">Select files : </h2><input type="file" name="excelFile" id="excelFile" /><br><br>
<h2 for="fname">First name : </h2><input type="text" id="fname" name="fname"><br><br>
<h2 for="lname">Last name : </h2><input type="text" id="lname" name="lname"><br><br>
<input type="submit" name="btnSubmit" id="btnSubmit" value="Submit" />
</form>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<script type="text/javascript">
$(function()
// เมื่อฟอร์มการเรียกใช้ evnet submit ข้อมูล
$("#excelFile").on("change",function(e)
e.preventDefault(); // ปิดการใช้งาน submit ปกติ เพื่อใช้งานผ่าน ajax
// เตรียมข้อมูล form สำหรับส่งด้วย FormData Object
var formData = new FormData($("#myform1")[0]);
// ส่งค่าแบบ POST ไปยังไฟล์ read_excel.php รูปแบบ ajax แบบเต็ม
$.ajax(
url: 'read_excel.php',
type: 'POST',
data: formData,
/*async: false,*/
cache: false,
contentType: false,
processData: false
).done(function(data)
console.log(data); // ทดสอบแสดงค่า ดูผ่านหน้า console
/* การใช้งาน console log เพื่อ debug javascript ใน chrome firefox และ ie
http://www.ninenik.com/content.php?arti_id=692 via @ninenik */
$("#fname").val(data.A2);
$("#lname").val(data.B2);
);
);
);
</script>
</body>
</html>
read_excel.php
(PHP 代码)
<?php
header("Content-type:application/json; charset=UTF-8");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
/** Error reporting */
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);
date_default_timezone_set('Asia/Bangkok');
// http://php.net/manual/en/timezones.php
require_once("PHPExcel/Classes/PHPExcel.php");
?>
<?php
if(isset($_FILES['excelFile']['name']) && $_FILES['excelFile']['name']!="")
$tmpFile = $_FILES['excelFile']['tmp_name'];
$fileName = $_FILES['excelFile']['name']; // เก็บชื่อไฟล์
$_fileup = $_FILES['excelFile'];
$info = pathinfo($fileName);
$allow_file = array("csv","xls","xlsx");
/* print_r($info); // ข้อมูลไฟล์
print_r($_fileup);*/
if($fileName!="" && in_array($info['extension'],$allow_file))
// อ่านไฟล์จาก path temp ชั่วคราวที่เราอัพโหลด
$objPHPExcel = PHPExcel_IOFactory::load($tmpFile);
// ดึงข้อมูลของแต่ละเซลในตารางมาไว้ใช้งานในรูปแบบตัวแปร array
$cell_collection = $objPHPExcel->getActiveSheet()->getCellCollection();
// วนลูปแสดงข้อมูล
$v=1;
$json_data = array();
foreach ($cell_collection as $cell)
// ค่าสำหรับดูว่าเป็นคอลัมน์ไหน เช่น A B C ....
$column = $objPHPExcel->getActiveSheet()->getCell($cell)->getColumn();
// คำสำหรับดูว่าเป็นแถวที่เท่าไหร่ เช่น 1 2 3 .....
$row = $objPHPExcel->getActiveSheet()->getCell($cell)->getRow();
// ค่าของข้อมูลในเซลล์นั้นๆ เช่น A1 B1 C1 ....
$data_value = $objPHPExcel->getActiveSheet()->getCell($cell)->getValue();
// เท่านี้เราก็สามารถแสดงข้อมูลจากการอ่านไฟล์ได้แล้ว และสามารถนำข้อมูลเหล่านี้
// ทำการบันทักลงฐานข้อมูล หรือแสดงได้เลย
$json_data["$column$row"] = $data_value;
// echo $v." ---- ".$data_value."<br>";
$v++;
// แปลง array เป็นรูปแบบ json string
if(isset($json_data))
$json= json_encode($json_data);
if(isset($_GET['callback']) && $_GET['callback']!="")
echo $_GET['callback']."(".$json.");";
else
echo $json;
?>
我用PHPExcel库用link.下载
【讨论】:
以上是关于如何使用 PHPExcel 解析响应表导入 Excel 文件以输入标签(例如:自动填充输入 id="fname" 到 Hello 并输入 id="lname" 的主要内容,如果未能解决你的问题,请参考以下文章
PHPExcel下载文件在实时服务器中提供错误,因为文件扩展名不正确
thinkphp5.0 如何导入phpexcel插件,能详细些点吗