1

私のプロジェクトでは、symfony2 PHPExcel ラッパーhttps://github.com/liuggio/ExcelBundleを使用しています

上記のリンクの例では、新しい Excel ファイルを作成できます。ただし、このファイルにはスタイルやマークアップがまったくありません。そこで、データを入力するExcelテンプレートを作成しました。

Excelファイルをロードする方法を知っています:

$excelObj = $this->get('xls.load_xls2007')
                 ->load($this->get('kernel')
                 ->getRootDir() . '/../web/excel-template.xlsx');

//custom modifications on excel file

次に、応答を作成する必要があります。しかし、ExcelBundle のドキュメントには、その方法に関する情報はありません。コードで作成された Excel ファイルに対して応答がどのように機能するかを示しているだけです。

私は試した:

 $excelService->setExcelObj($excelObj);
 $response = $excelService->getResponse();
 //the rest is equal to the code in the doc

しかし、それは私に空のExcel文書を与えます。

ロードされたExcelファイルで応答を作成する方法はありますか?

4

3 に答える 3

2

あなたはこれを行うことができます

// Read the file
    $objReader = PHPExcel_IOFactory::createReader($fileType);
    $objPHPExcel = $objReader->load($fileName);

    // Change the file
    $objPHPExcel->setActiveSheetIndex(0)
                ->setCellValue('A1', 'Hello')
                ->setCellValue('B1', 'World!');

    // Write the file
    $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, $fileType);
    $objWriter->save($fileName);

わからなかったらコメントください..

于 2012-12-05T15:08:11.093 に答える
0

ファイルをディスクに保存し、ユーザーをディスク上のバージョンに個人的にリダイレクトします。これにより、いくつかのことが可能になります

  • PHP の代わりにファイルを提供する Web サーバー。これは、パフォーマンスとメモリ使用量の観点からは良いことです。
  • アーキテクチャを少し分離して、Excel ファイルの作成と読み込みを非同期操作に移行するなど、将来の変更を可能にします。
  • http://wiki.nginx.org/XSendfileを使用する機能(Apache モジュールもあります)。
  • ユーザーは、ファイルを再ダウンロードしたり、ダウンロードを一時停止して再開したりできますが、再作成する必要はありません。

これを行うには、次のことを行います

  • 作成後、Web アクセス可能な一時ディレクトリにファイルを保存します。
  • ユーザーをそのファイルの場所にリダイレクトします
  • 一時ディレクトリ内の古いファイルを削除する cron またはその他のジョブを作成します。

ここでは、一時ファイル API (http://us2.php.net/tmpfile) が役立つ場合があります。

于 2012-12-02T21:11:40.993 に答える
0

PHPExcelbundle の新しいバージョン 2.* が役に立ちます。

可能になりました:

//read
$phpExcelObject = $this->get('phpexcel')->createPHPExcelObject('file.xls');
$phpExcelObject->setActiveSheetIndex(0)
  ->setCellValue( 'C6', 'some text' )
  ->setCellValue( 'D6', 'some text2' );
$writer = $this->get('phpexcel')->createWriter($phpExcelObject, 'Excel5');
$writer->save('file.xls');
// or 
$response = $this->get('phpexcel')->createStreamedResponse($writer);
于 2013-12-06T23:10:09.440 に答える