2013-04-18 3 views
0

Microsoft Windows Server 2008 R2 데이터 센터 - SQL Server 2012 데이터 소스가있는 SP 1에서 Coldfusion 10을 실행하고 있습니다. 내가 뭘하려는 것은 스프레드 시트에 쿼리를 출력에 추가됩니다cfspreadsheet 출력에 텍스트/추가 쿼리 추가

<cfinvoke component="assetdata" method="getAllNames" searchString ="#url.searchoption#" returnVariable="result"> 

<cfspreadsheet 
    action = "write" 
    query="result" 
    filename="#filename#" 
    overwrite="true"> 
<div>Your spreadsheet is ready. You may download it <a href="search_results.xls">here</a>.</div</div> 

바닥에이 같은 쿼리 결과를 추가 할 수 있습니다 :

나는 이런 식으로가는 페이지에 cfspreadsheet 태그가 그 :

사용 컴퓨터

총계 : 컴퓨터 110

갯수가 교체 할 : 컴퓨터 t 62

총계 모자가 교체되었습니다 : 8

각각은 정보를 그리는 페이지에서 자신의 select 문을 가지고 있습니다. cfspreadsheet를 사용하여이 작업을 수행 할 수 있습니까? 아니면 시트 당 하나의 쿼리 만 사용하면됩니까?

답변

4

cfspreadsheet를 사용하여이 작업을 수행 할 수 있습니까?

아니오 write 작업은 단일 쿼리 만 허용합니다. 그러나 시트를 항상 변수로 읽을 수 있습니다. 그런 다음 SpreadSheetAddRow을 사용하여 해당 시트에 추가 값을 추가하십시오.

별도로 변수에서 직접 스프레드 시트를 스트리밍 할 수도 있습니다. 리소스가 좀 더 많을 수 있습니다.

<cfheader name="Content-Disposition" value="attachment; filename=someFile.xls" /> 
<cfcontent type="application/vnd.msexcel" 
     variable="#spreadSheetReadBinary(yourSpreadSheetObject)#" /> 
+1

데이터에 따라 모든 것을 단일 쿼리로 병합하여 그 방식으로 처리 할 수 ​​있습니다. 그러나 그것은 조금 hackish하다. .. – Leigh

1

당신은 아무 것도 열거하지 않습니다. 데이터를 스프레드 시트에 넣는 방법에는 여러 가지가 있습니다. Leigh는 ColdFusion에서 제공하는 사용 가능한 기능 중 하나에 대한 링크를 제공했습니다.

대부분의 경우 웹 페이지에 데이터를 출력하는 데 사용할 수있는 모든 방법을 사용하지 않아도 스프레드 시트에 데이터를 출력 할 수 있습니다. 다음은 데이터가있는 워크 시트의 열 1을 채우는 샘플 코드입니다. 나중에 다른 쿼리에이 헤더 행을 채우고

<cfloop query="DrugsByCategory"> 
<cfscript> 
SpreadsheetAddRow(Workbook, "", RowNumber, 1); 
SpreadSheetSetCellValue(Workbook, 
DrugsByCategory.Item[DrugsByCategory.currentrow], RowNumber, 1); 

if (DrugsByCategory.type[DrugsByCategory.currentrow] == "Category"){ 
SpreadsheetFormatCell(Workbook, CategoryFormat, RowNumber, 1); 
StartOfDrugRange = RowNumber + 1; 
} 
else if (DrugsByCategory.type[DrugsByCategory.currentrow] == "Summary"){ 
SpreadsheetFormatCell(Workbook, SummaryFormat, RowNumber, 1); 
EndOfDrugRange = RowNumber - 1; 
} 
</cfscript> 
<!--- get data for each drug, and then the summary ---> 
<cfif DrugsByCategory.type[DrugsByCategory.currentrow] is "Category"> 
code for this condition 
<cfelseif DrugsByCategory.type[DrugsByCategory.currentrow] is "Drug"> 
Code for this condition 
<cfelseif DrugsByCategory.type[DrugsByCategory.currentrow] is "Summary"> 
code for this condition 
</cfif> 

<cfset RowNumber ++> 
</cfloop> 
<cfset SpreadSheetAddFreezePane(Workbook, 1, 3)> 

이 예제의 우미하지 않음에 집착하지 마십시오 사용 데이터. 요점은 자신을 제한하지 않으면 스프레드 시트 기능으로 많은 것을 할 수 있다는 것입니다.