2016-04-08 35 views
7

Questa è più una semplice guida che una domanda reale. (Ho cercato e non sono riuscito a trovare una soluzione, così sono arrivato fino a questo)Creare un'esportazione di file excel con nomi di colonne non standard (con spazi) utilizzando cfwheels, coldfusion e cfspreadsheet

avevo bisogno di creare un file di esportazione excel che permetterebbe agli utenti di:

  1. filtrare i dati utilizzando un modulo, da la tabella originale
  2. Esportare i risultati in un file excel, dalla tabella originale.
  3. Consenti nomi di colonne non standard con spazi e alcuni caratteri speciali.
  4. Formattare i dati esportati in alcune colonne, mantenendo i valori della tabella originale (per il filtro).
+2

(Modifica) Grazie per aver postato. In linea con il formato Q & A di SO, potresti suddividerlo in una "Domanda" separata, quindi postare separatamente la soluzione come "Risposta"? (So ​​che è un po 'strano dal momento che entrambi chiedi e rispondi, ma questo sembra essere il metodo preferito per [rispondere alla tua domanda] (http://stackoverflow.com/help/self-answer)/creare un come per :-) – Leigh

+0

Questo è davvero fantastico! Sicuramente fare ciò che @Leigh ha suggerito però. –

+0

Grazie mille! Sarà utile per me. – Thorsten

risposta

3

ho cercato e non riusciva a trovare una soluzione, così mi si avvicinò con questo:

Utilizzando tabella di esempio "Salary"

CREATE TABLE [dbo].[Salary](
    [id] [int] IDENTITY(1,1) NOT NULL, 
    [employee_id] [varchar](36) NULL, 
    [salary] [decimal](18, 0) NULL, 
    [createdat] [datetime] NULL, 
    [updatedat] [datetime] NULL, 
    [updated_by] [varchar](36) NULL, 
    [created_by] [varchar](36) NULL) 

Innanzitutto creare un modello speciale per tirare i dati di Excel . Esempio "export.cfc"

modelli \ export.cfc

<cfcomponent extends="Model" output="false"> 
    <cffunction name="init"> 
     <cfset table("Salary")/> 
     <!--- defined properties to allow spaces in column names via [] alias.---> 
     <cfset property(sql="employee_id", name="[Employee ID]")> 
     <cfset property(sql="dbo.getName(employee_id)", name="[The Employee Name]")> 
     <cfset property(sql="salary", name="[He gets paid what?]")> 
     <cfset property(sql="CONVERT(VARCHAR, createdAt, 101)", name="[Date Created]")> 
    </cffunction> 
</cfcomponent> 

Poi basta tirare le colonne specifici necessari per l'esportazione excel. ([] sono obbligatori)

<cfset columns = "id,[employee id],[The Employee Name],[He gets paid what?],[Date Created]"/> 

<cfset excelData = model("export").findAll( 
             select=columns, 
             parameterize=false 
             ) /> 
<cfspreadsheet 
     action = "write" 
     filename="#expandpath('files')#\export.xls" 
     query="excelData" 
     overwrite="true"> 
+0

Questo è super intelligente. Sto pensando di cambiare alcune delle nostre funzionalità di Excel per usarlo invece di un'altra stupida hack che stiamo usando. –

+0

Sembra fantastico. –