2011-06-23 7 views
0

Microsoft SQL Server 2008データベースからExcelスプレッドシートにデータをエクスポートしようとしました。 がhttp://www.appservnetwork.com/modules.php?name=News&file=article&sid=8ExcelへのPHPのエクスポート結果が間違った形式と不要な記号になる

私のヘッダーは次のようになります:

header("Pragma: public"); 
header("Expires: 0"); 
header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); 
header("Content-Type: application/force-download"); 
header("Content-Type: application/octet-stream"); 
header("Content-Type: application/download");; 
header("Content-Disposition: attachment;filename=$filename.xls "); 
header("Content-Transfer-Encoding: binary "); 

XLSデータセルは次のようになります。

xlsBOF(); 

xlsWriteString(0,0,"$lng_report_age_title"); 
xlsWriteString(0,4,"$lng_report_sex_title"); 
xlsWriteString(0,6,"$lng_report_referredfrom_title"); 
xlsWriteString(0,8,"$lng_report_selfreferred_title"); 

xlsWriteString(1,0,"$lng_report_age04"); 
xlsWriteString(1,1,"$lng_report_age514"); 
xlsWriteString(1,2,"$lng_report_age1549"); 
xlsWriteString(1,3,"$lng_report_age50"); 
xlsWriteString(1,4,"$lng_report_sexm"); 
xlsWriteString(1,5,"$lng_report_sexf"); 
xlsWriteString(1,6,"$lng_report_referredfrom_indistrict"); 
xlsWriteString(1,7,"$lng_report_referredfrom_outdistrict"); 
xlsWriteString(1,8,"$lng_report_selfreferred_indistrict"); 
xlsWriteString(1,10,"$lng_report_selfreferred_outdistrict"); 

xlsWriteString(2,6,"$lng_report_referredfrom_new"); 
xlsWriteString(2,7,"$lng_report_referredfrom_new"); 
xlsWriteString(2,8,"$lng_report_selfreferred_new"); 
xlsWriteString(2,9,"$lng_report_selfreferred_old"); 
xlsWriteString(2,10,"$lng_report_selfreferred_new"); 
xlsWriteString(2,11,"$lng_report_selfreferred_old"); 

xlsWriteNumber(3,0,"$searchresultsage04"); 
xlsWriteNumber(3,1,"$searchresultsage514"); 
xlsWriteNumber(3,2,"$searchresultsage1549"); 
xlsWriteNumber(3,3,"$searchresultsage50"); 
xlsWriteNumber(3,4,"$searchresultssexm"); 
xlsWriteNumber(3,5,"$searchresultssexf"); 
xlsWriteNumber(3,6,"$searchresultsreferredfrom01"); 
xlsWriteNumber(3,7,"$searchresultsreferredfrom02"); 
xlsWriteNumber(3,8,"$searchresultsselfreferred03"); 
xlsWriteNumber(3,9,"$searchresultsselfreferred04"); 
xlsWriteNumber(3,10,"$searchresultsselfreferred05"); 
xlsWriteNumber(3,11,"$searchresultsselfreferred06"); 

xlsEOF(); 

exit(); 

そして、作成XLS機能が見える

私はこのチュートリアルを使用していますこのように:

function xlsBOF() { 

    echo pack("ssssss", 0x809, 0x8, 0x0, 0x10, 0x0, 0x0); 

    return; 
} 

function xlsEOF() { 

    echo pack("ss", 0x0A, 0x00); 

    return; 
} 

function xlsWriteNumber($Row, $Col, $Value) { 

    echo pack("sssss", 0x203, 14, $Row, $Col, 0x0); 
    echo pack("d", $Value); 

    return; 
} 

function xlsWriteString($Row , $Col , $Value) { 

    $L = strlen($Value); 
    echo pack("sssss" , 0x204 , 8 + $L , $Row , $Col , 0x0 , $L); 
    echo $Value; 

    return; 
} 

問題Nr。 1: Excelシートには、表示したいテキストの周りにいくつかの不要な特殊文字があります(おそらく私はUTF-8を使用しているためでしょうか?(最初に文字列をutf8_decodeしようとしましたが、 Excel 2007を使用していますか?)

問題Nr。 2: 値は行/列に書き込まれません。

結果は次のようになります(特別な文字は、stackoverflowエディタによって自動的に削除されるため、Xで置き換えます)。

XXXXXXXAgeXXXXXSexXXXX
呼ばFromXXXX
自己ReferredXXX 0-4 YearsXXX
5-14 YearsXXXX 15-49 YearsXXX X
= 50 YearsXXX XXMaleXXX XXFemaleXXXX XXIn DistrictXXX XXOut DistrictXXXX XXIn DistrictXXX
XOUT DistrictXXXXXXNewXXXXXXNewXXXXXXNewXXXXXOldXXXX
XNewXXXXXXOldXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXX

すべてこのデータは、列Aにと行1-8にあります。

もう一度、私が知っておきたいことは、いったん動作したら: どのようにしてセル(罫線、フォントなど)をフォーマットできますか?

ありがとうございます。

答えて

4

質問に間接的な解決策として、私はhttp://phpexcel.codeplex.com/でクラスをお勧めしたいと思います。

私は過去に良い結果を出して使用しました。学習曲線はそれほど悪くはない、ドキュメンテーションはOK、それは小さなパッケージだ、フォーラムで良いサポートを持っている、そして私は合理的にあなたが尋ねたすべてに答えることができると確信している。

+0

PHPExcelは、正しく構造化された有効なデータをPHPから取得する唯一の論理的な方法です。そして、それは.pdfのための輸出でも大丈夫です。 – bpeterson76

0

私は同じ問題を抱えていました。

ob_end_clean(); $objWriter->save('php://output'); 

これは、Excelから不要な文字を削除します。

+0

正確に同じ回答[1](http://stackoverflow.com/a/34152004/1364007)、[2](http:// stackoverflow。com/a/34152061/1364007)を2つの異なる質問に追加すると、質問には重複としてフラグが付けられます。 –

関連する問題