2013-03-01 3 views
3

Я пытаюсь запросить базу данных mysql и отобразить данные в таблице. Эта часть работает. На данный момент он настроен для отображения результатов в пределах определенного диапазона дат.Экспорт таблицы html (mysql populated) в файл excel

Теперь я хочу взять таблицу и сделать кнопку, которая позволяет экспортировать ее в файл Excel. Прежде чем добавить опцию выбора диапазона дат, вы смогли экспортировать в Excel, но теперь кажется, что второй файл не знает, о какой таблице я говорю. Я попытался использовать POST для отправки значений данных и повторного запроса на другой странице.

Когда я нажимаю кнопку для экспорта, загружаемый документ excel пуст (хотя он имеет размер). Любая помощь, пожалуйста?

----- MySQL Query ---------

<html><head><title>New Production Rejections</title></head></html> 
    <?php 

    include("config.php"); 
    //get serial from submitted data 
     //$serial = $_POST['sNumber']; 
     //if the submitted data is empty 
     $serial = $_POST['entryDate']; 
    $dateEnd = $_POST['entryDate2']; 
     //parse the serial from the link in tracker 
    ?> 
     <form method="post" action="<?php echo "queryNewProdRejections.php?"?>"> 
     Search between dates: (Format: YYYY-MM-DD)<input type='text' size='20' maxlength='20' name='entryDate'> - <input type='text' size='20' maxlength='20' name='entryDate2'> 
     <input type="submit" value="Search Date Range"><br/></form> 

    <?php 


    //query based on approved date that is nothing, repaired date that is nothing, 
    //tech is a real tech, location that is not Revite (RVP), action was to replace, 
    //and the status is not (declined or skipped). 

    $query = "SELECT * 
    FROM `rma` 
    WHERE `origin` NOT LIKE 'Field_failure' 
    AND `origin` NOT LIKE 'DOA_at_Customer' 
    AND `origin` NOT LIKE 'Sweden_Fail_VI' 
    AND `entry` > '$serial' AND `entry` < '$dateEnd'"; 
    $data = mysql_query($query) or die(mysql_error()); 

    //Create a table with the array of data from repairs, based on the previous query 

    echo "<table border='1'><tr><th>RMA</th><th>Product</th><th>Serial</th><th>Origin</th><th>Return To</th><th>Credit Num</th><th>Order</th><th>Entry Date</th><th>Tech</th><th>Traking Num</th></tr>"; 

    while($row = mysql_fetch_array($data)){ 
     print "<tr><td>".$row['intrma']."</td><td>".$row['product']."</td><td>".$row['serial']."</td><td>".$row['origin']."</td><td>".$row['retto']."</td><td>".$row['creditnum']."</td><td>".$row['ordernum']."</td><td>".$row['entry']."</td><td>".$row['tech']."</td><td>".$row['tracknum']."</td></tr>"; 
    } 
    print "</table>"; 

    ?> 
    <html> 
    <form method="post" action="saveQueryToExcel.php"> 
    <input type='hidden' name='ent_1' value="<?php echo $_POST['entryDate']; ?>"> 
    <input type='hidden' name='ent_2' value="<?php echo $_POST['entryDate2']; ?>"> 
     <input type="submit" value="Save to Excel"> 
    </form> 
    </html> 

--------------- Печать в файл Excel - (saveQueryToExcel .php)

<html><head><title>New Production Rejections</title></head></html> 

<?php 
error_reporting(0); 

$dateBeg=$_POST['ent_1']; 
$dateEnd=$_POST['ent_2']; 

//Connect to the database, repairs in maprdweb 
include("config.php"); 

//query based on approved date that is nothing, repaired date that is nothing, 
//tech is a real tech, location that is not Revite (RVP), action was to replace, 
//and the status is not (declined or skipped). 

$query = "SELECT * 
FROM `rma` 
WHERE `origin` NOT LIKE 'Field_failure' 
AND `origin` NOT LIKE 'DOA_at_Customer' 
AND `origin` NOT LIKE 'Sweden_Fail_VI' 
AND `entry` > '$dateBeg' AND `entry` < '$dateEnd'"; 
$data = mysql_query($query) or die(mysql_error()); 

//Create a table with the array of data from repairs, based on the previous query 
header('Content-type: application/vnd.ms-excel'); 

echo "<table border='1'><tr><th>RMA</th><th>Product</th><th>Serial</th><th>Origin</th><th>Return To</th><th>Credit Num</th><th>Order</th><th>Entry Date</th><th>Tech</th><th>Traking Num</th></tr>"; 

while($row = mysql_fetch_array($data)){ 
    print "<tr><td>".$row['intrma']."</td><td>".$row['product']."</td><td>".$row['serial']."</td><td>".$row['origin']."</td><td>".$row['retto']."</td><td>".$row['creditnum']."</td><td>".$row['ordernum']."</td><td>".$row['entry']."</td><td>".$row['tech']."</td><td>".$row['tracknum']."</td></tr>"; 
} 
print "</table>"; 
?> 
+1

Вы должны сказать нам, в чем ваша проблема. – Oliver

+0

Спасибо, я пропустил эту часть. – Emeria

+1

excel не работает со столами, насколько я знаю. Просто создайте CSV-файл и разделите данные запятыми. Вы можете открыть файл csv в excel. –

ответ

3

PHPexcel отлично подходит для экспорта данных в фактический документ Excel.

Похоже, вы просто создаете таблицу HTML с вашим результатом. Это не совсем формат Excel.

+0

Это было очень просто реализовать, спасибо! – Emeria

1

Вы должны принять тот же код, и вместо того, чтобы печатать <tr> линии с ним, отправить его в fputcsv. Используйте стандартный вывод в качестве дескриптора файла. Вам нужно установить правильные заголовки html для вывода, который будет отправлен как csv, по строкам этого сообщения: force file download.

1

Посмотрите этот класс. Он способен решить проблему.

https://github.com/GSTVAC/HtmlExcel

$xls = new HtmlExcel(); 
$xls->addSheet("Names", $names); 
$xls->headers(); 
echo $xls->buildFile(); 
Смежные вопросы