2013-02-21 2 views
5

Отказ от ответственности: Я новичок в coldfusion. Я пытаюсь создать документ Excel 2010 с изображениями и несколькими вкладками. Мне удалось получить это для вывода в XLS, но я не могу получить изображение в файл.Как создать xlsx-файлы с использованием coldfusion

Я не смог найти полный пример правильного создания файла XLSx. Я бы предпочел научиться правильному пути и развить свои собственные вредные привычки позже, а не просто иметь плохие привычки.

Вот пример:

<!--- Make CF export to Excel ---> 
<!--- This will create a XLS file ---> 
<!--- <cfheader name="Content-Disposition" value="attachment; filename=#URL.TRNo#_image.xls"> 
<cfcontent type="application/vnd.msexcel"> ---> 

<!--- This does not work to create an XLSX file ---> 
<cfheader name="Content-Disposition" value="inline; filename=#URL.TRNo#_image.xlsx"> 
<cfcontent type="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"> 

<cfparam name="URL.TRNo" default="AD0310"> 

<cfoutput> 
    <?xml version="1.0"?> 
    <Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"> 
     <ss:Styles> 
      <ss:Style ss:ID="Default" ss:Name="Normal"> 
       <ss:Font ss:Size="11" ss:FontName="Calibri"/> 
      </ss:Style> 
      <ss:Style ss:ID="Left"> 
       <ss:Alignment ss:Horizontal="Left"/> 
      </ss:Style> 
      <ss:Style ss:ID="Center"> 
       <ss:Alignment ss:Horizontal="Center"/> 
      </ss:Style> 
      <ss:Style ss:ID="Right"> 
       <ss:Alignment ss:Horizontal="Right"/> 
      </ss:Style> 
     </ss:Styles> 


     <Worksheet ss:Name="#URL.TRNo# page 1"> 
      <ss:Table ss:DefaultColumnWidth="15" ss:DefaultRowHeight="15"> 
       <Row ss:Height="51"><!--- Start Row 1 ---> 
        <Cell ss:Index="1" ss:MergeAcross="9"> 
         <Data ss:Type="String">Final Test Report</Data> 
        </Cell> 
        <Cell ss:Index="11" ss:MergeAcross="10" ss:StyleID="Center"> 
         <Data ss:Type="String"><!--- <img src="http://wwwdev.elmsweb.ford.com/elmsGEN3/SafetyLab/FMVSS/ReportWriter/img/fordLogo_transparent_small.png" height="68" width="181" alt="13"> ---></Data> 
        </Cell> 
        <Cell ss:Index="22" ss:MergeAcross="9" ss:StyleID="Right"> 
         <Data ss:Type="String">Confidential</Data> 
        </Cell> 
       </Row><!--- End Row 1 ---> 
       <Row/><!--- Row 2 Blank ---> 
       <Row><!--- Start Row 3 ---> 
        <Cell ss:Index="1" ss:MergeAcross="1" ss:StyleID="Right"> 
         <Data ss:Type="String">To:</Data> 
        </Cell> 
        <Cell ss:Index="3" ss:MergeAcross="12"> 
         <Data ss:Type="String"></Data> 
        </Cell> 
        <Cell ss:Index="16" ss:MergeAcross="10" ss:StyleID="Right"> 
         <Data ss:Type="String">Test Order:</Data> 
        </Cell> 
        <Cell ss:Index="27" ss:MergeAcross="4"> 
         <Data ss:Type="String">#URL.TRNo#</Data> 
        </Cell> 
       </Row><!--- End Row 3 ---> 
      </ss:Table> 
     </Worksheet> 
    </Workbook> 
</cfoutput> 
+4

Вы пробовали использовать ColdFusion встроенный в функции электронной таблицы? [Документация для электронной таблицыНовая функция] (http://help.adobe.com/en_US/ColdFusion/9.0/CFMLRef/WSc3ff6d0ea77859461172e0811cbec22c24-747b.html). Если вы установите для параметра 'xmlformat' значение 'true', он создаст файл .xlsx. _ Вам нужно, по крайней мере, ColdFusion 9 для этих функций. –

+1

Ни один из них не сделает файл XLS или XLSX технически, они создают XML-файл, который подается в Excel. Вы можете легко использовать 'cfheader/content' из первой строки и изменить расширение, чтобы оно« отображалось »как файл XLSX, но оно не будет в формате XLS/XLSX. – Busches

+0

@ Miguel-F Спасибо, я думаю, что это шаг в правильном урезании. но как пользователь может получить файл, я не хочу хранить их на сервере? – BTThomas

ответ

6

Я предложил бы использовать встроенные функции электронной таблицы ColdFusion (впервые введена в версии 9). Вот documentation for the SpreadsheetNew function. Если вы установите для параметра xmlformat значение «true», он создаст файл .xlsx.

Есть несколько примеров в Интернете (и здесь, на SO) о том, как использовать эти функции ColdFusion. Raymond Camden has a nice example here, как создать таблицу и доставить ее непосредственно пользователю с помощью тега cfcontent. Here is another example from Raymond, который основывается на первом примере.

3

Я работаю над этим всю неделю и хочу поделиться результатами. Этот код работает для меня с использованием CF 9 на Windows Server 2008 R2. Кстати, CFSpreadsheet, по-видимому, потребляет много памяти при увеличении экспорта. По этой причине мы увеличили физическую память сервера, а затем использовали CF Administrator, чтобы увеличить размер кучи jvm в настройках Administrator -> Java и JVM. Максимальный размер кучи java теперь составляет 3072 Gig. Нужна помощь? Я рекомендую вам связаться с Чарли Arehart по вопросам сервера: [email protected]

Код:

Пример запроса называется «Myquery» Spreadsheet называется «Myspreadsheet» экспортировать таблицу в подкаталоге «XLSX» Я используйте cflocation, чтобы направлять браузер в электронную таблицу. Браузер предлагает пользователю открыть, сохранить или отменить.

<cfset var_filenameis = "Myspreadsheet.xlsx"> 
<cfset SpreadsheetObj = spreadsheetNew("true")> 
<cfset SpreadsheetObj = spreadsheetNew("#var_filenameis#","yes")> 

<cfspreadsheet action="write" filename="./xlsx/#var_filenameis#" query="Myquery" overwrite="true"> 

<cflocation url = "./xlsx/#var_filenameis#"> 

Dave Kraft

+0

Сохраняет ли файл excel локально на сервере? Это необходимый шаг? (Это странный способ сделать это, но я еще не нашел альтернативы) –

Смежные вопросы