【问题标题】:Export Data in excel and then import from excel using PHP. DB is MySQL在 excel 中导出数据,然后使用 PHP 从 excel 中导入。数据库是 MySQL
【发布时间】:2012-02-25 17:58:17
【问题描述】:

--我的表中有一些行,我想以 excel 格式导出。这一步相当于用户输入搜索条件,所有匹配的行都会导出到一个excel文件中。

--用户对excel文件进​​行修改。添加或更新行。

--用户上传文件,所有更新的行都更新到数据库中,所有添加的行都添加到数据库中。

我想在 PHP 中做的所有这些事情,它使用的数据库是 MySQL。服务器正在运行 Linux(没有 COM!)

我已经分别完成了上面解释的导出和导入部分。

我正在使用PHPExcelReader 读取文件并保存它。但这需要用户先下载模板,从导出的excel中复制数据并粘贴到模板中。

为了导出,我只是创建了一个简单的 HTML 表格并欺骗了浏览器,它是一个 excel! Excel 将打开 HTML 表格,但当然在保存该文件时,它会更改格式并使其成为有效的 Excel 文件。

请就如何使其发挥作用提出一些想法? :/

谢谢...非常感谢您的帮助。

【问题讨论】:

    标签: php mysql excel import export


    【解决方案1】:

    我想向你推荐 PHPExcel 库。

    http://phpexcel.codeplex.com/

    你可以做导入、导出、pdf等。我认为这是一个很棒的库。

    【讨论】:

    • 最大的好处...它是一个用于写入和读取 xls 文件的单一库,并且由于 OP 需要同时执行这两种操作,这使得它比使用单独的不兼容库来读取和读取更好的选择写作
    【解决方案2】:

    **

    • 出口目的

    **

    <?php
        mysql_connect("localhost","root","");
        mysql_select_db("school");
    ?>
    
    <html>
        <head>
            <script type="text/javascript" src="../js/exp_stdsub.js"></script>
        </head>
           <hr />
                                <u><h3>Export your Data here</h3></u>
                                <form action="" method="post"> 
                                            <select name="expstd" id="expstd" onclick="return expsubjs(this.value);">
                                                <option>Select Standared</option>
                                        <?php
                                            $exe_sel_std = mysql_query("SELECT * from s_standared");
                                            while($r_sel_std = mysql_fetch_array($exe_sel_std)){
                                                $sel_stdid = $r_sel_std['std_id'];
                                                $sel_std = $r_sel_std['std']; ?>
                                                <option value="<?php echo $sel_stdid; ?>"><?php echo $sel_std; ?></option>
                                                <?php  } ?>
                                                </select></td>
    
    
                                    <input type="submit" class="btn btn-green" name="exp_stdque" value="Export Standardwise Question">
    
                                </form>
                            </table>
    
    <?php
    
    //EDIT YOUR MySQL Connection Info:
    $DB_Server = "localhost";        //your MySQL Server
    $DB_Username = "root";                 //your MySQL User Name
    $DB_Password = "";                //your MySQL Password
    $DB_DBName = "school";                //your MySQL Database Name
    $DB_TBLName = "s_question";                //your MySQL Table Name
    
    if(isset($_POST['exp_stdque'])) {
        $exstdid = $_POST['expstd'];
    
    //$DB_TBLName,  $DB_DBName, may also be commented out & passed to the browser
    //as parameters in a query string, so that this code may be easily reused for
    //any MySQL table or any MySQL database on your server
    
    //DEFINE SQL QUERY:
    //edit this to suit your needs
    $sql = "Select * from $DB_TBLName WHERE std_id = $exstdid";
    
    //Optional: print out title to top of Excel or Word file with Timestamp
    //for when file was generated:
    //set $Use_Titel = 1 to generate title, 0 not to use title
    $Use_Title = 1;
    //define date for title: EDIT this to create the time-format you need
    $now_date = DATE('m-d-Y H:i');
    //define title for .doc or .xls file: EDIT this if you want
    $title = "Dump For Table $DB_TBLName from Database $DB_DBName on $now_date";
    /*
    
    Leave the connection info below as it is:
    just edit the above.
    
    (Editing of code past this point recommended only for advanced users.)
    */
    //create MySQL connection
    $Connect = @MYSQL_CONNECT($DB_Server, $DB_Username, $DB_Password)
         or DIE("Couldn't connect to MySQL:<br>" . MYSQL_ERROR() . "<br>" . MYSQL_ERRNO());
    //select database
    $Db = @MYSQL_SELECT_DB($DB_DBName, $Connect)
         or DIE("Couldn't select database:<br>" . MYSQL_ERROR(). "<br>" . MYSQL_ERRNO());
    //execute query
    $result = @MYSQL_QUERY($sql,$Connect)
         or DIE("Couldn't execute query:<br>" . MYSQL_ERROR(). "<br>" . MYSQL_ERRNO());
    
    //if this parameter is included ($w=1), file returned will be in word format ('.doc')
    //if parameter is not included, file returned will be in excel format ('.xls')
    IF (ISSET($w) && ($w==1))
    {
         $file_type = "msword";
         $file_ending = "doc";
    }ELSE {
         $file_type = "vnd.ms-excel";
         $file_ending = "xls";
    }
    //header info for browser: determines file type ('.doc' or '.xls')
    HEADER("Content-Type: application/$file_type");
    HEADER("Content-Disposition: attachment; filename=database_dump.$file_ending");
    HEADER("Pragma: no-cache");
    HEADER("Expires: 0");
    
    /*    Start of Formatting for Word or Excel    */
    
    IF (ISSET($w) && ($w==1)) //check for $w again
    {
         /*    FORMATTING FOR WORD DOCUMENTS ('.doc')   */
         //create title with timestamp:
         IF ($Use_Title == 1)
         {
             ECHO("$title\n\n");
         }
         //define separator (defines columns in excel & tabs in word)
         $sep = "\n"; //new line character
    
         WHILE($row = MYSQL_FETCH_ROW($result))
         {
             //set_time_limit(60); // HaRa
             $schema_insert = "";
             FOR($j=0; $j<mysql_num_fields($result);$j++)
             {
             //define field names
             $field_name = MYSQL_FIELD_NAME($result,$j);
             //will show name of fields
             $schema_insert .= "$field_name:\t";
                 IF(!ISSET($row[$j])) {
                     $schema_insert .= "NULL".$sep;
                     }
                 ELSEIF ($row[$j] != "") {
                     $schema_insert .= "$row[$j]".$sep;
                     }
                 ELSE {
                     $schema_insert .= "".$sep;
                     }
             }
             $schema_insert = STR_REPLACE($sep."$", "", $schema_insert);
             $schema_insert .= "\t";
             PRINT(TRIM($schema_insert));
             //end of each mysql row
             //creates line to separate data from each MySQL table row
             PRINT "\n----------------------------------------------------\n";
         }
    }ELSE{
         /*    FORMATTING FOR EXCEL DOCUMENTS ('.xls')   */
         //create title with timestamp:
         IF ($Use_Title == 1)
         {
             ECHO("$title\n");
         }
         //define separator (defines columns in excel & tabs in word)
         $sep = "\t"; //tabbed character
    
         //start of printing column names as names of MySQL fields
         FOR ($i = 0; $i < MYSQL_NUM_FIELDS($result); $i++)
         {
             ECHO MYSQL_FIELD_NAME($result,$i) . "\t";
         }
         PRINT("\n");
         //end of printing column names
    
         //start while loop to get data
         WHILE($row = MYSQL_FETCH_ROW($result))
         {
             //set_time_limit(60); // HaRa
             $schema_insert = "";
             FOR($j=0; $j<mysql_num_fields($result);$j++)
             {
                 IF(!ISSET($row[$j]))
                     $schema_insert .= "NULL".$sep;
                 ELSEIF ($row[$j] != "")
                     $schema_insert .= "$row[$j]".$sep;
                 ELSE
                     $schema_insert .= "".$sep;
             }
             $schema_insert = STR_REPLACE($sep."$", "", $schema_insert);
             //following fix suggested by Josue (thanks, Josue!)
             //this corrects output in excel when table fields contain \n or \r
             //these two characters are now replaced with a space
             $schema_insert = PREG_REPLACE("/\r\n|\n\r|\n|\r/", " ", $schema_insert);
             $schema_insert .= "\t";
             PRINT(TRIM($schema_insert));
             PRINT "\n";
         }
    }
    }
    
    ?>
    

    IMPORTING FROM EXCEL INTO MySQL USING PHP

    <table>
                        <form enctype="multipart/form-data" action="" method="post">
                          <input type="hidden" name="MAX_FILE_SIZE" value="2000000" />
                                <tr>
                                <td><h5><b>Select Standared</b></h5></td>
                                <td><select name="chap_sel_std" id="chap_sel_std">
                                                            <option>Select Standared</option>
                                                    <?php
                                                        $exe_sel_std = mysql_query("SELECT * from s_standared");
                                                        while($r_sel_std = mysql_fetch_array($exe_sel_std)){
                                                            $sel_stdid = $r_sel_std['std_id'];
                                                            $sel_std = $r_sel_std['std'];?>
    
                                                            <option value="<?php echo $sel_stdid; ?>"><?php echo $sel_std;?></option>
                                                            <?php } ?>
                                    </select></td>
                                </tr>
                                <tr>
                                    <td><h5><b>Select Font</b></h5></td>
                                    <td><select name="sel_f_gn_que">
                                        <option>Select Font</option>
                                            <?php
                                                $xf = mysql_query("SELECT * from s_font");
                                                while($rquef = mysql_fetch_array($xf)){
                                                    $f_id = $rquef['f_id'];
                                                    $f_name = $rquef['f_name'];  ?>
                                        <option value="<?php echo $f_id; ?>"><?php echo $f_name; }?>  </option>
                                    </select></td>
                                </tr>
                                <tr>
                                    <td><h5><b>Upload Question<h5><b></td>
                                    <td>
                                        <input type="file" name="file" id="file" class="btn">
                                    </td>
                                </tr>
                                <tr>
                                    <td></td>
                                    <td colspan="2"><input type="submit" class="btn btn-green big" name="add_que" value="Add Questions"></td>
                                    <td><input type="submit" name="saveandexit" class="" value="Finish" onclick="close();"></td>
                                </tr>
                        </form>
                        </table>
                        </div>                   
    
        <?php
    
                $data = array();
    
        //$db =& DB::connect("mysql://root@localhost/names", array());
        //if (PEAR::isError($db)) { die($db->getMessage()); }
          //quetype    difficulty    standard    subject    chap    que    marks
    
        function add_person($quetype,$dif, $subject,$chap_name,$que,$marks)
        {
         global $data, $db;
    
         //$sth = $db->prepare( "INSERT INTO names VALUES( 0, ?, ?, ?, ? )" );
        // $db->execute( $sth, array( $first, $middle, $last, $email ) );
    
         $data []= array(
           'quetype' => $quetype, 
           'difficulty' => $dif,
           'subject' => $subject,
           'chap' => $chap_name,
           'que' => $que,
           //'ans' => $ans,
           'marks' => $marks
    
         );
        }
    
        if(!isset($_FILES['file']['tmp_name'])){
            echo "";
        }elseif($_FILES['file']['tmp_name'])
        {
         $dom = DOMDocument::load( $_FILES['file']['tmp_name'] );
         $rows = $dom->getElementsByTagName( 'Row' );
         $first_row = true;
         foreach ($rows as $row)
         {
           if ( !$first_row )
           {
             $quetype = "";
             $dif = "";
             $subject = "";
             $chap_name = "";
             $que = "";
             //$ans = "";
             $marks = "";
    
             $index = 1;
             $cells = $row->getElementsByTagName( 'Cell' );
             foreach( $cells as $cell )
             {
               $ind = $cell->getAttribute( 'Index' );
               if ( $ind != null ) $index = $ind;
    
               if ( $index == 1 ) $quetype = $cell->nodeValue;
               if ( $index == 2 ) $dif = $cell->nodeValue;
               if ( $index == 4 ) $subject = $cell->nodeValue;
               if ( $index == 6 ) $chap_name = $cell->nodeValue;
               if ( $index == 8) $que = $cell->nodeValue;
               //if ( $index == 9) $ans = $cell->nodeValue;
               if ( $index == 9) $marks = $cell->nodeValue;
    
               $index += 1;
             }
             add_person($quetype,$dif, $subject,$chap_name,$que,$marks);
    
             if(isset($_POST['add_que'])){    
    
                     $chap_sel_std = $_POST['chap_sel_std'];
                     echo $simquefnt = $_POST['sel_f_gn_que'];
    
                        //que_id    quetype_id    chap_id    sub_id    std_id    que    dif_id    marks    que_cdate
                 //$chap_sel_std = $_POST['chap_sel_std']; //que_id    quetype_id    chap_id    sub_id    std_id    que    dif_id    marks    que_cdate
                 mysql_query("INSERT INTO 
                              s_question
                              VALUES (null,'$quetype','$chap_name','$subject','$chap_sel_std','$que','NO IMAGE','$dif','$marks','$simquefnt','$current')");                                                        
        //         header("location:../admin/quetionaris.php#tabs-que"); 
             echo "Successfully Added";
              }
           }
           $first_row = false;
         }
        }
        ?>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-07-03
      • 1970-01-01
      • 1970-01-01
      • 2011-04-13
      • 2014-02-25
      • 2013-03-19
      • 1970-01-01
      • 2011-10-15
      相关资源
      最近更新 更多