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

Posted

技术标签:

【中文标题】如何指定从哪个列位置开始从excel到mysql的数据导入【英文标题】:How can you specify from which column position to start the data import from excel to mysql 【发布时间】:2015-04-27 11:52:49 【问题描述】:

大家好,我有一个 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!!";


?>

希望您能帮助我,在此先感谢! :)

【问题讨论】:

【参考方案1】:

公平警告:我从未将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。我没有测试过这段代码,但大致是这样的。

http://php.net/manual/en/function.fgetcsv.php

【讨论】:

非常感谢您的回答!

以上是关于如何指定从哪个列位置开始从excel到mysql的数据导入的主要内容,如果未能解决你的问题,请参考以下文章

如何用R语言在数据中提取指定列数据,并且形成一个新的数据表

如何读取指定的单元格值并将文件从 excel 转换为电子表格?

excel用哪个公式可以使a列包含指定内容时在b列显示为1?

excel 截取单元格部分内容(从指定位置截取)

node--初步了解-03 从指定位置处开始写入文件

从 Excel 导出中删除列