Hi Marco,

Sure, let me clarify. In general I believe all you need is something like
your example. I just wanted to point out that I did things a little bit
differently, mostly so that if I needed to run some search/replaces in the
output content I could do so with a variable. The following is code verbatim
for what I use.

    <cfset oFormtoolUtil = createObject("component",
"farcry.core.packages.farcry.formtools") />
    <cfset sqlColumns="objectid,formid,datetimecreated" />
    <cfset stRecordset = oFormtoolUtil.getRecordset(sqlColumns=sqlColumns,
sqlWhere="formID IN '#form.formSelect#'", typename="idlFormLog",
bCheckVersions=true) />

    <cfset bRunOnce="0">
    <cfset TabChar = Chr(9)>
    <cfset NewLine = Chr(13) & Chr(10)>
    <cfset myHTML = createObject("java","java.lang.StringBuffer")>

        <cfloop query="stRecordset.q">
            <cfset myHTML.append("<tr>")>
            <cfset oFormtoolLogUtil = createObject("component",
"farcry.core.packages.farcry.formtools") />
            <cfset sqlColumns="title,value" />
            <cfset stLogRecordset =
oFormtoolLogUtil.getRecordset(sqlColumns=sqlColumns, sqlWhere="formLogID IN
'#objectID#'", typename="idlFormLogItem", bCheckVersions=true) />
            <cfloop query="stLogRecordset.q">
                <cfset shortTitle = lcase(replace(title," ","","all")) />
                <cfif StructKeyExists(form,"#shorttitle#")>
                    <cfif NOT bRunOnce><cfset lTitles=  lTitles & "<th>" &
title & "</th>" ></cfif>
                    <cfset myHTML.append("<td>" & value & "</td>")>
                </cfif>
            </cfloop>
            <cfif NOT bRunOnce>
                <cfset lTitles = "<tr>" & lTitles & "</tr>">
                <cfset bRunOnce="1">
            </cfif>
            <cfset myHTML.append("</tr>")>
        </cfloop>
    <cfsavecontent variable="totalHTML"><cfoutput><html><head><title>Excel
Data Preview</title></head>
        <body><table
border=1>#lTitles##myHTML.toString()#</table></body></html></cfoutput></cfsavecontent>

    <cfheader name="Content-Disposition" value="attachment;
filename=FormData.xls" />
    <cfcontent type="application/msexcel" variable="#ToBinary( ToBase64(
totalHTML.Trim() ) )#" />
    <cfexit />

So there I am using <cfset ... > for a variable to save the content instead
of <cfsavecontent ...>. I don't remember now if I ran into the same issue
you are having with invalid variable type and that's why I switched to
cfset. As you can see, I use a variable of
createObject("java","java.lang.StringBuffer"). As I read from a blog post,
it is better at allocating memory for an expanding string than multiple
<cfset myHTML = myHTML & "bla">. That said, I don't know if there any
downsides etc.

The method you have I don't see why it wouldn't work, but I had problems for
whatever reason with different browsers I think, which is why I switched to
the above method.

Best,

Tomek

On Mon, Nov 3, 2008 at 1:51 PM, Marco van den Oever <
[EMAIL PROTECTED]> wrote:

>
> I can't set the table etc between a <cfsavecontent
> variable="pollingstats">, as it states that it's not a valid supported
> variable type.
> How would you set that table and looping from my example to a
> variable? Put it in a structure or something?
>
> You give me different ways of doing it, bit confused about what
> belongs to what or what need to be in place together or not, can you
> clarify?
>
> Thanks
>
> On Nov 3, 3:23 pm, "Tomek Kott" <[EMAIL PROTECTED]> wrote:
> > Marco,
> >
> > Basically all you need is a table structure like your example. I actually
> > found that your method wouldn't automatically pop up a "save as Excel"
> > dialog box in all browsers. What I ended up doing was simply did a save
> > content to a variable (<cfset ...>) and
> >
> >     <cfheader name="Content-Disposition" value="attachment;
> > filename=FormData.xls" />
> >     <cfcontent type="application/msexcel" variable="#myHTML#" />
> >
> > If you go this route though, be aware that for larger files where you
> might
> > be running cfset often, you might want to switch to a Java class object:
> >
> >     <cfset myHTML = createObject("java","java.lang.StringBuffer")>
> >
> > And then you would do
> >
> >     <cfset myHTML.append("<tr>")>
> >
> > And your final cfcontent tag would look like:
> >
> >     <cfcontent type="application/msexcel" variable="#ToBinary( ToBase64(
> > totalHTML.Trim() ) )#" />
> > To get it back to a normal string type. I found the above hint on some
> blog
> > about coldfusion after I found that things were going very slowly for a
> 20
> > row excel output. Doing things with the stringbuffer was much faster
> > (although I don't know about the 'safety' of working with a more
> primitive,
> > as I understand, class)
> >
> > Best,
> >
> > Tomek
> >
> > On Sun, Nov 2, 2008 at 9:34 PM, Marco van den Oever <
> >
> > [EMAIL PROTECTED]> wrote:
> >
> > > Hereby a simple method:
> >
> > > <cfcontent type="application/vnd.ms-excel">
> > >    <h2>Polling statistics: #stprops_pollingdata.question#</h2>
> > >    <table border="1" cellpadding="1" cellspacing="2">
> > >      <tr>
> > >        <th>Date / Time created</th>
> > >        <th>Question</th>
> > >        <cfloop index="i" from="1" to="#application['wsoFarcryPolling'
> > > & pollingid]#">
> > >          <cfif stprops_pollingdata['answer' & i] GT 0>
> > >            <th>#stprops_pollingdata['answer' & i]#</th>
> > >          </cfif>
> > >        </cfloop>
> > >        <th>Total votes</th>
> > >      </tr>
> > >      <tr>
> > >        <td>#stprops_pollingdata.datetimecreated#</td>
> > >        <td>#stprops_pollingdata.question#</td>
> > >        <cfloop index="i" from="1" to="#application['wsoFarcryPolling'
> > > & pollingid]#">
> > >          <cfif stprops_pollingdata['answer' & i] GT 0>
> > >            <td>#sums[i].recordcount#</td>
> > >          </cfif>
> > >        </cfloop>
> > >        <td>#answers_sum#</td>
> > >      </tr>
> > >    </table>
> >
> > > On Nov 3, 12:57 am, Marco van den Oever <[EMAIL PROTECTED]>
> > > wrote:
> > > > Is there a function to put db data in Excel???
> >
>

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"farcry-dev" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/farcry-dev?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to