2012-02-03 48 views
1

- 私はexcel形式でエクスポートしたい私のテーブルからいくつかの行を持っています。この手順は、ユーザーが検索条件を入力するのと同じであり、一致するすべての行がExcelファイルにエクスポートされます。データをExcelにエクスポートし、次にPHPを使用してExcelからインポートします。 DBはMySQLです

- ユーザーがExcelファイルを変更しました。行を追加または更新します。

- ユーザーがファイルをアップロードすると、更新されたすべての行がデータベースで更新され、追加されたすべての行がデータベースに追加されます。

これは私がPHPでやりたいこととMySQLが使用しているデータベースです。サーバはLinuxを実行しています(COMはありません)

私は上記で説明したパートIのエクスポートとインポートを別に行っています。

PHPExcelReaderを使用してファイルを読み取り、保存します。しかし、これを行うには、まずユーザーがテンプレートをダウンロードし、エクスポートされたデータをExcelにコピーしてテンプレートに貼り付ける必要があります。

エクスポートするには、単純なHTMLテーブルを作成してブラウザをだまそうとしています。 ExcelはHTMLテーブルを開きますが、そのファイルを保存している間にフォーマットを変更して有効なExcelファイルにします。

どうすればいいですか? :/

ありがとうございます...ご協力いただきありがとうございます。

答えて

2

私はあなたにPHPExcelライブラリを提案したいと思います。

http://phpexcel.codeplex.com/

あなたは、私は、これは偉大なライブラリだと思うのインポート、エクスポート、PDFなどを行うことができます。

+0

最大の利点...これは、書き込みと読み取りの両方のための単一のライブラリであり、OPは両方を実行する必要があるため、互換性のない別のライブラリを読んだり書いたりするよりも良い選択です –

1

**

  • 目的を輸出

**

<?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://[email protected]/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; 
    } 
    } 
    ?> 
関連する問題