0

MySQL クエリの結果を Excel ファイルにエクスポートする必要があります。これを実現するためにいくつかのコードを取り上げましたが、1 つの問題があります。このコードは、.xls コンテンツ タイプとヘッダーに続くクエリ結果を含むヘッダー情報をブラウザーに送信します。呼び出されたページのコードは次のとおりです。

<?php
function cleanData(&$str)
{
$str = preg_replace("/\t/", "\\t", $str);
$str = preg_replace("/\r?\n/", "\\n", $str);
if(strstr($str, '"')) $str = '"' . str_replace('"', '""', $str) . '"';
}

// filename for download
$filename = "customer_inventory_" . date('Ymd') . ".xls";

header("Content-Disposition: attachment; filename=\"$filename\"");
header("Content-Type: application/vnd.ms-excel");

$flag = false;
$query = "SELECT customer_id,sku,qtyoh,date FROM sims_customer_inventory WHERE   customer_id=$customer_id and date=(select max(date) from sims_customer_inventory)";
$result = mysql_query($query, $conn) or die(mysql_error());
while(false !== ($row = mysql_fetch_assoc($result))) {
if(!$flag) {
  // display field/column names as first row
  echo implode("\t", array_keys($row)) . "\r\n";
  $flag = true;
}
array_walk($row, 'cleanData');
echo implode("\t", array_values($row)) . "\r\n";
?>

問題は、ページが次の形式で呼び出された場合です。

<form action="inventory_download.php" method="get" onsubmit="return validateInventoryform();">

ファイルは自動的にダウンロードされません。ただし、ページを更新すると、ファイルがダウンロードされます。私の問題は、ページが呼び出されると、コードを自動的に実行してファイルをダウンロードする必要があることです。それはしません。問題を解決するためにインターネット全体を見てきましたが、なぜ機能しないのかわかりません。

4

1 に答える 1

0

この問題は、.xls データを作成する外部ページに ajax データが渡されることが原因で発生します。答えは、リンクの ajax データをオフにすることです。

<a href="something.php" data-ajax="false">

これにより、php コードが正しく機能するようになります。これは実際には有効な Excel ファイルではないという問題がまだあります。このコードはヘッダーを作成し、その後に Excel ファイルとして解釈されるデータを続けます。これは Excel ファイルではありませんが、Excel で開き、Excel ファイルとして保存できます。それは重要な違いです。実際の Excel ファイルが必要な場合は、PHPExcelを使用する必要があります。それがおそらく最良の選択肢です。

于 2013-07-06T05:03:14.230 に答える