2012-01-04 5 views
1

Я экспортирую из ColdFusion 9 в Excel, и я хочу установить ориентацию страницы и масштабирование, чтобы экспортированный документ excel соответствовал странице и печатал пейзаж. Как это сделать?Экспорт из ColdFusion в 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> 
+0

Не могли бы вы предоставить образец кода, показывающий, что у вас есть до сих пор? – Micah

ответ

1

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

How to format an Excel workbook while streaming MIME content

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

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

Ключ к вашему конкретному вопросу форматирования также содержится в этой ссылке. Вам необходимо включить блок <style> с правилом CSS 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

Я не вижу никаких признаков для достижения этой цели в CFSPREADSHEET тега. С сайта adobe:

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

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

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

3

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)> 
+0

Не обращайте внимания;) Я вижу из ваших обновлений, что вы фактически создаете файл faux-excel (т.е. html). Поэтому такой подход не сработает. – Leigh

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