1

以下のコードを使用して、データベースからExcelシートにデータをエクスポートしています。私がやりたいのは、特定のフィールドのセットを同じブック内の別のシートにエクスポートすることです。最終的には、このコードのようにすべてが同じシートに結合されるのではなく、各人のデータが別々のシートに表示されます。数式やColdFusionの一部を作成する方法について、これを実行できるようになることについて何か考えはありますか?

また、ColdFusion 8を使用しているため、cfspreadsheet関数を使用できません。

<!--- use cfsetting to block output of HTML 
outside of cfoutput tags --->
<cfsetting enablecfoutputonly="Yes">

<!--- set content type to invoke Excel --->
<cfcontent type="application/msexcel">

<!--- suggest default name for XLS file --->
<!--- use "Content-Disposition" in cfheader for 
Internet Explorer  --->
<cfheader name="Content-Disposition" value="filename=export.xls">
<!--- output data using cfloop & cfoutput --->

<cfquery name="qquestionnaire_export" datasource="mydatabase">
Select * from registration
</cfquery>

<cfoutput>
<table>
<tr><td align="center">Transfer Registration Questionnaire</td>
<td></td>
</tr>
<th>Credit Category</th>
<th>Completed Degree</th>
<th>Highest Degree</th>





</cfoutput>

<cfloop query="qquestionnaire_export">
<cfoutput>  
<tr>
<td align="center">#credit_category#</td>
<td align="center">#completed_degree#</td>
<td align="center">#highest_degree#</td>



</tr>
</cfoutput>
</cfloop>

<cfoutput><tr><td height="10"></td></tr></cfoutput>

<cfoutput></table></cfoutput>
4

4 に答える 4

3

を使用できない場合<cfspreadsheet>は、単純な「CFCONTENTを介したExcelとしてのHTML」アプローチの代わりに、ApachePOIプロジェクトを使用することをお勧めします。POIを使用すると、実際のExcelスプレッドシートを作成して、それらに関連するすべての楽しみを得ることができます。

Ben Nadelには、APIのマルチシート部分を公開するCFCラッパーがあります。

http://www.bennadel.com/projects/poi-utility.htm

于 2012-11-19T22:40:06.460 に答える
2

これは古いトピックであることは知っていますが、以前に見つけていれば、この解決策は役に立ちました。ただし、これは基本的な関数呼び出しであり、複数のタブを含むExcelシートに任意の数のクエリを入力できるようにする必要があります。

<cffunction name="QueriesToXLS" access="public">
    <cfargument name="queryArr" required="true"><!--- An Array of Query Objects --->
    <cfargument name="sheetNameArr" required="false"><!--- Optional sheet names to use instead of "Sheet1","Sheet2",... --->
    <cfset tempPath = GetTempDirectory() & CreateUuid() & ".xls"><!--- Creaete a Temp XLS File --->
    <cfset counter = 1>
    <cfloop array="#ARGUMENTS.queryArr#" index="i">
        <cfset sheetName = "Sheet#counter#">
         <cfif isDefined("ARGUMENTS.sheetNameArr")>
            <cfset sheetName = ARGUMENTS.sheetNameArr[counter]>
        </cfif>
        <cfspreadsheet action="update" filename="#tempPath#" query="i" sheetName="#sheetName#"/>
        <cfset counter += 1>
    </cfloop>
    <cfreturn SpreadsheetRead(tempPath)>
</cffunction>


<cfset xlsData = QueriesToXLS(
    [query1,query2],
    ["Details","Summary"]
)>

<cfheader name="content-disposition" value="attachment; filename=export.xls">
<cfcontent type="application/msexcel" variable="#spreadsheetReadBinary(xlsData)#" reset="true">
于 2014-10-03T14:58:14.823 に答える
1

Apache POIは、進むべき道のりです。http://poi.apache.org/

時間をかけてドキュメントを読み、いくつかのテストを実行してください。CSSを使用してHTMLテーブルをファッジするのではなく、完全に制御できます。

于 2012-11-20T00:04:26.140 に答える
0

この方法の使用を避けることができれば、それが最善でしょう。Excelは、「スプレッドシート」のような出力でHTMLを出力するのに十分スマートですが、それでもxls拡張子を持つHTMLドキュメントです。このように作成された、実際のExcelファイルを想定したスプレッドシートの使用でいくつかの問題が発生しました。ColdFusionでは、cfspreadsheetを使用してこのファイルを読み取ろうとすると、次のようなexpected binary input file(またはそれに近いもの)というエラーが発生する可能性が高くsave as、実際のExcelスプレッドシートにするにはExcelを使用する必要があります。言うまでもなく、これは静的な出力です。数式やiKnowKungFooのような楽しいものを含めることはできません。

それでは質問に答えられないため、POIツールに加えて、JasperSoft、Crystal Reportsなどの他のBIツールを調べることもできます。また、OracleまたはMS SQL Serverを使用している場合は、OracleのBIツールまたはSSRSを調べることもできます。 SQLServerの場合。サポートオプションなしで無料のBIツールがいくつかありますが、JasperSoftはその1つだと思います。

ColdFusionに戻ると、レポートビルダーでCFReportを使用してExcel形式のレポートを作成しようとしたことはありませんが、CF8ではExcel形式を使用できます。それを使って複数のシートを作成できるかどうかはわかりません。以下のスニピットは考慮しないと思いますが、検討する価値があるかもしれません。私は何も見つけることができませんでしたが、それは早く、私は病気で、私のgoogle-fooは今朝少し遅いです。

注: Excelレポートの出力形式タイプでは、ColdFusionReportingで使用できる形式オプションのサポートが制限されています。画像とグラフはサポートされておらず、書式設定(カンマ、パーセント、通貨など)を含む数値データはExcelではプレーンテキストとして表示されます。Excel出力形式は単純なレポートのみをサポートします。アドビでは、Excel出力用に設計されたレポートを慎重に設計およびレイアウトすることをお勧めします。

于 2012-11-20T11:36:03.737 に答える