Экспорт из ColdFusion в Excel, как изменить параметры страницы? - PullRequest
1 голос
/ 05 января 2012

Я экспортирую из ColdFusion 9 в Excel и хочу установить ориентацию и масштаб страницы, чтобы экспортированный документ Excel соответствовал странице и печатал альбомную ориентацию. Как это сделать?

Редактировать с решением:
Спасибо за помощь. Настройка ориентации страницы работала так, как рекламировалось.
Я использовал следующий хак, чтобы подогнать его под ширину страницы.

Эта страница содержит документацию по различным возможным настройкам:
http://msdn.microsoft.com/en-us/library/Aa155477%28office.10%29.aspx

<cfheader name="Content-disposition" value="attachment;filename=export.xls">
<cfcontent type="application/application/vnd.ms-excel">

<!--- 
mso-page-orientation:landscape causes the exported excel spreadsheet to be printed landscape.
Setting Scale=45 causes the printout to fit to page width for me.
Per the documentation, I should be able to set
<x:Print><x:FitWidth>1</x:FitWidth><x:FitHeight>32767</x:FitHeight><x:ValidPrinterInfo/></x:Print>
but it doesn't want to work.
The width and height appear correctly in the Page Setup dialog, but the 'Adjust to' scale size
radio button remains selected instead of the 'Fit to' one page wide by 32767 tall radio button.
--->

<HTML xmlns:x="urn:schemas-microsoft-com:office:excel">
<HEAD>
<STYLE>
  <!--table
  @page {mso-page-orientation:landscape;}
  -->
</STYLE>
  <!--[if gte mso 9]><xml>
   <x:ExcelWorkbook>
    <x:ExcelWorksheets>
     <x:ExcelWorksheet>
      <x:WorksheetOptions>
       <x:Print>
        <x:ValidPrinterInfo/>
        <x:Scale>45</x:Scale>
       </x:Print>
      </x:WorksheetOptions>
     </x:ExcelWorksheet>
    </x:ExcelWorksheets>
   </x:ExcelWorkbook>
  </xml><![endif]--> 
</HEAD>
<BODY>

<cfoutput>
  <cfloop from = "1" to = "#arrayLen(reportItems)#" index = "i">
    <table cellpadding="1" cellspacing="1" bgcolor="dcdcdc" width="100%" border="1">
      ... table contents ...
    </table>
  </cfloop>
</cfoutput>

</BODY>
</HTML>

Ответы [ 3 ]

3 голосов
/ 05 января 2012

IIRC там ничего не запекается. Но вы можете подключиться к базовой книге и использовать немного магии POI .(Обратите внимание, что эти параметры печати применяются для каждого листа)

<!--- get the underlying poi sheet --->
<cfset poiSheet = cfSheetObject.getWorkBook().getSheet("TheSheetName")>
<cfset ps = poiSheet.getPrintSetup()>
<cfset ps.setLandscape(true)>
<!--- fit to one page --->
<cfset ps.setFitHeight(1)>
<cfset ps.setFitWidth(1)>
1 голос
/ 05 января 2012

Вы можете использовать трюк, описанный на этой странице:

Как отформатировать книгу Excel при потоковой передаче содержимого MIME

По сути, вы выводите стандартную таблицу HTMLданные, которые вы хотели бы открыть в виде таблицы Excel.Вы также должны указать MIME-тип для Excel, и для хорошей цели я также хотел бы указать заголовок размещения содержимого, чтобы запросить лучшее имя файла для загрузки.

<cfcontent type="application/msexcel"/> 
<cfheader name="content-disposition" value="attachment; filename=myFile.xls">

Ключ к вашему конкретному форматированиюТаким образом, вопрос также находится в этой ссылке выше.Вам необходимо включить <style> блок с CSS-правилом MS Office mso-page-orientation:landscape;.По этой ссылке:

<style>
  <!--table
  @page
     {mso-header-data:"&CMultiplication Table\000ADate\: &D\000APage &P";
    mso-page-orientation:landscape;}
     br
     {mso-data-placement:same-cell;}

  -->
</style>

Это должно решить вопрос об ориентации страницы.Стоит отметить, что при открытии этого файла Office 2007 и новее будут предупреждать пользователей о различиях в типах контента.Это просто раздражение (это можно отключить с помощью обновления реестра);все будет работать и работать по мере необходимости.

0 голосов
/ 05 января 2012

Я не вижу никаких атрибутов для достижения этой цели в теге cfspreadsheet.С сайта Adobe:

  <cfspreadsheet  
   action="write" 
   filename = "filepath" 
   format = "csv" 
   name = "text" 
   overwrite = "true | false" 
   password = "password" 
   query = "queryname" 
   sheetname = "text" 
>

Возможно, вам придется сделать это после экспорта в Excel с использованием диапазонов печати или чего-то подобного.

Позвольте CF управлять экспортом правильных данных, пусть Excel обрабатывает форматирование/printing.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...