如何指定从哪个列位置开始从 excel 到 mysql 的数据导入
How can you specify from which column position to start the data import from excel to mysql
大家好,我有一个 php excel 问题。
问题是我有一个包含多行和多列的 excel 文件,问题是我只想从特定的行位置导入,例如 A11 或 C12。我怎么能在 php 中说出这个?
这是列选择代码:
$csv_file = $a;
if (($getfile = fopen($csv_file, "r")) !== FALSE) {
while(! feof($getfile))
{
$data = fgetcsv($getfile, NULL,"\t");
$col1 = $data[0];
$col2 = $data[1];
$col3 = $data[2];
$col4 = $data[3];
$col5 = $data[4];
$col6 = $data[5];
$col7 = $data[6];
$col8 = $data[7];
$query = "INSERT INTO $tableName(cod, den_material, furnizor, cant_reper ,lg, cod_furnizor, obs, data) VALUES('".$col1."','".$col2."','".$col3."','".$col4."','".$col5."','".$col6."','".$col7."','".$col8."')";
$s=mysql_query($query);
}
完整代码如下:
<?php
if ($_FILES["file"]["error"] > 0)
{
echo "Error: " . $_FILES["file"]["error"] . "<br>";
}
else
{
echo "Upload: " . $_FILES["file"]["name"] . "<br>";
echo "Type: " . $_FILES["file"]["type"] . "<br>";
echo "Size: " . ($_FILES["file"]["size"] / 10240) . " Kb<br>";
//echo "Stored in: " . $_FILES["file"]["tmp_name"];
$a=$_FILES["file"]["tmp_name"];
//echo $a;
$tableName = str_replace('.txt','',$_FILES["file"]["name"]);
$connect = mysql_connect('localhost','root','password');
if (!$connect) {
die('Could not connect to MySQL: ' . mysql_error());
}
//your database name
$cid =mysql_select_db('database_test',$connect);
if(mysql_num_rows(mysql_query("SHOW TABLES LIKE '".$tableName."'"))!=1){
$table = mysql_query("CREATE TABLE `$tableName` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`cod` TEXT NOT NULL,
`den_material` TEXT NOT NULL,
`furnizor` VARCHAR(255) NOT NULL,
`cant_reper` VARCHAR(255) NOT NULL,
`lg` VARCHAR(255) NOT NULL,
`cod_furnizor` VARCHAR(255) NOT NULL,
`obs` TEXT(255) NOT NULL,
`data` DATE ,
PRIMARY KEY (`id`)
);");
if(!$table){
die("Upload failed");
}
}
// path where your CSV file is located
//define('CSV_PATH','C:/xampp/htdocs/');
//<!-- C:\xampp\htdocs -->
// Name of your CSV file
$csv_file = $a;
if (($getfile = fopen($csv_file, "r")) !== FALSE) {
while(! feof($getfile))
{
$data = fgetcsv($getfile, NULL,"\t");
$col1 = $data[0];
$col2 = $data[1];
$col3 = $data[2];
$col4 = $data[3];
$col5 = $data[4];
$col6 = $data[5];
$col7 = $data[6];
$col8 = $data[7];
$query = "INSERT INTO $tableName(cod, den_material, furnizor, cant_reper ,lg, cod_furnizor, obs, data) VALUES('".$col1."','".$col2."','".$col3."','".$col4."','".$col5."','".$col6."','".$col7."','".$col8."')";
$s=mysql_query($query);
}
}
echo "<script>alert('Data succesfully added!');window.location.href='index.php';</script>";
//echo "File data successfully imported to database!!";
}
?>
希望你能帮助我,在此先感谢! :)
中肯警告:我从来没有用过 fgetcsv
任何东西,但我理解其中的原理。
但是根据 php.net 上的手册,我创建了一个循环,该循环仅在指定的行和列处开始读取。我选择了随机值,但你可以随心所欲地制作它们。 A=0,B=1 等等。所以我说了第 5 行和 C 列的所有数据。
<?php
$row = 1;
$mydata = array();
$wantrow = 4;
$wantcol = 2;
if (($handle = fopen("test.csv", "r")) !== FALSE) {
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
$num = count($data); // number of fields in the line
$row++;
for ($c=0; $c < $num; $c++) {
if($c<$wantcol){
// this is what we do not want
}elseif($row<$wantrow){
// also we do not want this
}else{
// ah-ha, we do want this
$mydata[$row][$c] = $data[$c];
}
}
}
fclose($handle);
}
?>
然后您将拥有该部分中值的二维数组。我选择看起来有点笨拙,这样您就可以轻松理解我要演示的内容的逻辑。
实际上你可以像这样让它更易读:
if( ($c>=3) && ($row>=5) ){
$mydata[$row][$c] = $data[$c];
}
您可以使用 if 语句应用更多限制并设置上限,但我相信您知道如何操作。
if( ($c>=3) && ($c<=22) && ($row>=5) && ($row<=6) ){
$mydata[$row][$c] = $data[$c];
}
这只会给你 C6 到 E23 的正方形。
此外,在您的应用程序中,您可能想要做一些比将数据推入数组更有用的事情。我想您可能想将数据嵌入到 SQL 或类似的东西中。
YYMV。我没有测试过这段代码,但大致就是这样。
大家好,我有一个 php excel 问题。 问题是我有一个包含多行和多列的 excel 文件,问题是我只想从特定的行位置导入,例如 A11 或 C12。我怎么能在 php 中说出这个? 这是列选择代码:
$csv_file = $a;
if (($getfile = fopen($csv_file, "r")) !== FALSE) {
while(! feof($getfile))
{
$data = fgetcsv($getfile, NULL,"\t");
$col1 = $data[0];
$col2 = $data[1];
$col3 = $data[2];
$col4 = $data[3];
$col5 = $data[4];
$col6 = $data[5];
$col7 = $data[6];
$col8 = $data[7];
$query = "INSERT INTO $tableName(cod, den_material, furnizor, cant_reper ,lg, cod_furnizor, obs, data) VALUES('".$col1."','".$col2."','".$col3."','".$col4."','".$col5."','".$col6."','".$col7."','".$col8."')";
$s=mysql_query($query);
}
完整代码如下:
<?php
if ($_FILES["file"]["error"] > 0)
{
echo "Error: " . $_FILES["file"]["error"] . "<br>";
}
else
{
echo "Upload: " . $_FILES["file"]["name"] . "<br>";
echo "Type: " . $_FILES["file"]["type"] . "<br>";
echo "Size: " . ($_FILES["file"]["size"] / 10240) . " Kb<br>";
//echo "Stored in: " . $_FILES["file"]["tmp_name"];
$a=$_FILES["file"]["tmp_name"];
//echo $a;
$tableName = str_replace('.txt','',$_FILES["file"]["name"]);
$connect = mysql_connect('localhost','root','password');
if (!$connect) {
die('Could not connect to MySQL: ' . mysql_error());
}
//your database name
$cid =mysql_select_db('database_test',$connect);
if(mysql_num_rows(mysql_query("SHOW TABLES LIKE '".$tableName."'"))!=1){
$table = mysql_query("CREATE TABLE `$tableName` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`cod` TEXT NOT NULL,
`den_material` TEXT NOT NULL,
`furnizor` VARCHAR(255) NOT NULL,
`cant_reper` VARCHAR(255) NOT NULL,
`lg` VARCHAR(255) NOT NULL,
`cod_furnizor` VARCHAR(255) NOT NULL,
`obs` TEXT(255) NOT NULL,
`data` DATE ,
PRIMARY KEY (`id`)
);");
if(!$table){
die("Upload failed");
}
}
// path where your CSV file is located
//define('CSV_PATH','C:/xampp/htdocs/');
//<!-- C:\xampp\htdocs -->
// Name of your CSV file
$csv_file = $a;
if (($getfile = fopen($csv_file, "r")) !== FALSE) {
while(! feof($getfile))
{
$data = fgetcsv($getfile, NULL,"\t");
$col1 = $data[0];
$col2 = $data[1];
$col3 = $data[2];
$col4 = $data[3];
$col5 = $data[4];
$col6 = $data[5];
$col7 = $data[6];
$col8 = $data[7];
$query = "INSERT INTO $tableName(cod, den_material, furnizor, cant_reper ,lg, cod_furnizor, obs, data) VALUES('".$col1."','".$col2."','".$col3."','".$col4."','".$col5."','".$col6."','".$col7."','".$col8."')";
$s=mysql_query($query);
}
}
echo "<script>alert('Data succesfully added!');window.location.href='index.php';</script>";
//echo "File data successfully imported to database!!";
}
?>
希望你能帮助我,在此先感谢! :)
中肯警告:我从来没有用过 fgetcsv
任何东西,但我理解其中的原理。
但是根据 php.net 上的手册,我创建了一个循环,该循环仅在指定的行和列处开始读取。我选择了随机值,但你可以随心所欲地制作它们。 A=0,B=1 等等。所以我说了第 5 行和 C 列的所有数据。
<?php
$row = 1;
$mydata = array();
$wantrow = 4;
$wantcol = 2;
if (($handle = fopen("test.csv", "r")) !== FALSE) {
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
$num = count($data); // number of fields in the line
$row++;
for ($c=0; $c < $num; $c++) {
if($c<$wantcol){
// this is what we do not want
}elseif($row<$wantrow){
// also we do not want this
}else{
// ah-ha, we do want this
$mydata[$row][$c] = $data[$c];
}
}
}
fclose($handle);
}
?>
然后您将拥有该部分中值的二维数组。我选择看起来有点笨拙,这样您就可以轻松理解我要演示的内容的逻辑。
实际上你可以像这样让它更易读:
if( ($c>=3) && ($row>=5) ){
$mydata[$row][$c] = $data[$c];
}
您可以使用 if 语句应用更多限制并设置上限,但我相信您知道如何操作。
if( ($c>=3) && ($c<=22) && ($row>=5) && ($row<=6) ){
$mydata[$row][$c] = $data[$c];
}
这只会给你 C6 到 E23 的正方形。
此外,在您的应用程序中,您可能想要做一些比将数据推入数组更有用的事情。我想您可能想将数据嵌入到 SQL 或类似的东西中。
YYMV。我没有测试过这段代码,但大致就是这样。