如何指定从哪个列位置开始从excel到mysql的数据导入

嗨,大家好,我有一个PHP的Excel问题。 问题是,我有一个Excel文件,有几个行和列,交易是我只想从特定的行位置,例如A11或C12导入。 我怎么能告诉这个在PHP? 这是列select代码:

$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的手册开始,我创build了一个循环,只在指定的行和列处开始读取。 我select了随机值,但是无论你想要什么,都可以制作。 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); } ?> 

然后,您将有该部分中的值的二维数组。 我已经select了一个有点笨拙的样子,所以你可以很容易地理解我试图展示的逻辑。

其实你可以把它看得更可读,就像这样:

 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的广场内。

同样在你的应用程序中,你可能想要做一些更有用的事情,而不仅仅是把数据放到一个数组中。 我想你可能想要将数据embedded到SQL或类似的东西。

YYMV。 我没有testing过这个代码,但是大致就是这样。