Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 使用ColdFusion在Excel列中进行文本换行或自动宽度调整_Database_Excel_Coldfusion_Export_Word Wrap - Fatal编程技术网

Database 使用ColdFusion在Excel列中进行文本换行或自动宽度调整

Database 使用ColdFusion在Excel列中进行文本换行或自动宽度调整,database,excel,coldfusion,export,word-wrap,Database,Excel,Coldfusion,Export,Word Wrap,我从数据库中提取数据,并用Excel为客户演示。唯一的问题是一些数据对于列来说太大了,而且由于数据是动态的(当然),我基本上需要能够进行一些文本包装,或者根据需要扩展列的宽度 我的代码贴在下面 <!---Used for streaming to browser---> <cfset context = getPageContext()> <cfset context.setFlushOutput(false)> <cfset response = co

我从数据库中提取数据,并用Excel为客户演示。唯一的问题是一些数据对于列来说太大了,而且由于数据是动态的(当然),我基本上需要能够进行一些文本包装,或者根据需要扩展列的宽度

我的代码贴在下面

<!---Used for streaming to browser--->
<cfset context = getPageContext()>
<cfset context.setFlushOutput(false)>
<cfset response = context.getResponse().getResponse()>
<cfset out = response.getOutputStream()>
<cfset response.setContentType("application/vnd.ms-excel")>
<cfset response.setHeader("Content-Disposition", "attachment; filename=ERD_Report.xls" )>

<!---Create Workbook and Sheets in workbook--->
<cfset wb = createObject("java","org.apache.poi.hssf.usermodel.HSSFWorkbook").init()/>
<cfset sheet1 = wb.createSheet("ERD Report")/>

<!---Formatting--->
<cfset cellStyleStatic = createObject("java","org.apache.poi.hssf.usermodel.HSSFCellStyle")/>
<cfset cellHSSFFont = createObject("java","org.apache.poi.hssf.usermodel.HSSFFont")/>

<!---Title--->
<cfset fontTitle = wb.createFont()/>
<cfset fontTitle.setFontName("Calibri") />
<cfset fontTitle.setFontHeightInPoints(javacast("int",11))/> 
<cfset styleTitle = wb.createCellStyle()/>
<cfset styleTitle.setfont(fontTitle)/>
<cfset styleTitle.setFillPattern(styleTitle.SOLID_FOREGROUND)/>
<cfset styleTitle.setFillForegroundColor(createObject("java","org.apache.poi.hssf.util.HSSFColor$GREY_25_PERCENT").getIndex())/>
<cfset styleTitle.setBorderBottom(styleTitle.BORDER_THIN)/>
<cfset styleTitle.setBorderLeft(styleTitle.BORDER_THIN)/>
<cfset styleTitle.setBorderRight(styleTitle.BORDER_THIN)/>
<cfset styleTitle.setBorderTop(styleTitle.BORDER_THIN)/>

<!---Regular centered white cell with Borders--->
<cfset styleCenter = wb.createCellStyle()/>
<cfset styleCenter.setAlignment(cellStyleStatic.ALIGN_CENTER)/>

<!---Dates--->
<cfset styleDate = wb.createCellStyle()/>
<cfset styleDate.setDataFormat(createObject("java","org.apache.poi.hssf.usermodel.HSSFDataFormat").getBuiltinFormat("m/d/yy"))/>

<!--- Text Wrapping--->
<cfset sheet1.FormatColumn(6, {textwrap="true"})/>

    <!---Sheet 1 (Numbers)--->
<!---Rows and columns--->
    <cfset row = sheet1.createRow(0)/>
    <cfset sheet1.setColumnWidth(0,6000)/>
    <cfset sheet1.setColumnWidth(1,6000)/>
    <cfset sheet1.setColumnWidth(2,6000)/>
    <cfset sheet1.setColumnWidth(3,6000)/>
    <cfset sheet1.setColumnWidth(4,6000)/>
    <cfset sheet1.setColumnWidth(5,6000)/>
    <cfset sheet1.setColumnWidth(6,6000)/>
    <cfset sheet1.setColumnWidth(7,6000)/>
    <cfset sheet1.setColumnWidth(8,6000)/>
    <cfset sheet1.setColumnWidth(9,6000)/>
    <cfset sheet1.setColumnWidth(10,6000)/>
    <cfset sheet1.setColumnWidth(11,6000)/>
    <cfset sheet1.setColumnWidth(12,6000)/>
    <cfset sheet1.setColumnWidth(13,6000)/>
    <cfset sheet1.setColumnWidth(14,6000)/>
    <cfset sheet1.setColumnWidth(15,6000)/>
    <cfset sheet1.setColumnWidth(16,6000)/>
    <cfset sheet1.setColumnWidth(17,6000)/>
    <cfset sheet1.setColumnWidth(18,6000)/>
    <cfset cell = row.createCell(0)/>
        <cfset cell.setCellValue('Header1')/>
        <cfset cell.setCellStyle(styleTitle)/>
    <cfset cell = row.createCell(1)/>
        <cfset cell.setCellValue('Header2')/>
        <cfset cell.setCellStyle(styleTitle)/>
    <cfset cell = row.createCell(2)/>
        <cfset cell.setCellValue('Header3')/>
        <cfset cell.setCellStyle(styleTitle)/>
    <cfset cell = row.createCell(3)/>
        <cfset cell.setCellValue('Header4')/>
        <cfset cell.setCellStyle(styleTitle)/>
    <cfset cell = row.createCell(4)/>
        <cfset cell.setCellValue('Header5')/>
        <cfset cell.setCellStyle(styleTitle)/>
    <cfset cell = row.createCell(5)/>
        <cfset cell.setCellValue('Header6')/>
        <cfset cell.setCellStyle(styleTitle)/>
    <cfset cell = row.createCell(6)/>
        <cfset cell.setCellValue('Header7')/>
        <cfset cell.setCellStyle(styleTitle)/>
    <!---<cfset cell = row.createCell(7)/>
        <cfset cell.setCellValue('Header8')/>
        <cfset cell.setCellStyle(styleTitle)/>--->
    <cfset cell = row.createCell(7)/>
        <cfset cell.setCellValue('Header9')/>
        <cfset cell.setCellStyle(styleTitle)/>
    <cfset cell = row.createCell(8)/>
        <cfset cell.setCellValue('Header10')/>
        <cfset cell.setCellStyle(styleTitle)/>  
    <cfset cell = row.createCell(9)/>
        <cfset cell.setCellValue('Header11')/>
        <cfset cell.setCellStyle(styleTitle)/>
    <cfset cell = row.createCell(10)/>
        <cfset cell.setCellValue('Header12')/>
        <cfset cell.setCellStyle(styleTitle)/>
    <cfset cell = row.createCell(11)/>
        <cfset cell.setCellValue('Header13')/>
        <cfset cell.setCellStyle(styleTitle)/>
    <cfset cell = row.createCell(12)/>
        <cfset cell.setCellValue('Header14')/>
        <cfset cell.setCellStyle(styleTitle)/>
    <cfset cell = row.createCell(13)/>
        <cfset cell.setCellValue('Header15')/>
        <cfset cell.setCellStyle(styleTitle)/>
    <cfset cell = row.createCell(14)/>
        <cfset cell.setCellValue('Header16')/>
        <cfset cell.setCellStyle(styleTitle)/>
    <cfset cell = row.createCell(15)/>
        <cfset cell.setCellValue('Header17')/>
        <cfset cell.setCellStyle(styleTitle)/>
    <cfset cell = row.createCell(16)/>
        <cfset cell.setCellValue('Header18)/>
        <cfset cell.setCellStyle(styleTitle)/>
    <cfset cell = row.createCell(17)/>
        <cfset cell.setCellValue('Header19')/>
        <cfset cell.setCellStyle(styleTitle)/>
    <cfset cell = row.createCell(18)/>
        <cfset cell.setCellValue('Header20')/>
        <cfset cell.setCellStyle(styleTitle)/>  



<cfloop query="getall">

    <!--- Query Engineer Notes for this Tracking Number --->

    <cfquery name="Eng_Notes" datasource="#request.dsn#">
        SELECT Eng_Notes AS Note
        FROM tbl_ERD_Eng_NOTES
        WHERE ERD_ID = <cfqueryparam cfsqltype="cf_sql_varchar" value="#getAll.ID#" />
    </cfquery>

    <cfset variables.lstNotes = valueList(Eng_Notes.Note, " *** ") />

    <cfset row = sheet1.createRow(javacast("int",#getall.currentrow#))/>   
    <cfset cell = row.createCell(0)/>
        <cfset cell.setCellValue('#getall.info1#')/>
    <cfset cell = row.createCell(1)/>
        <cfset cell.setCellValue('#getall.info2#')/>
    <cfset cell = row.createCell(2)/>
        <cfset cell.setCellValue('#getall.info3#')/>
    <cfset cell = row.createCell(3)/>
        <cfset cell.setCellValue('#getall.info4#')/>
    <cfset cell = row.createCell(4)/>
        <cfset cell.setCellValue('#getall.info5#')/>   
    <cfset cell = row.createCell(5)/>
        <cfset cell.setCellValue('#getall.info6#')/>
              <cfset cell = row.createCell(6)/>
        <cfset cell.setCellValue('#variables.info7#')/>
    <!---<cfset cell = row.createCell(7)/>
        <cfset cell.setCellValue('#getall.info8#')/>--->
    <cfset cell = row.createCell(7)/>
        <cfset cell.setCellValue('#getall.info9#')/>
    <cfset cell = row.createCell(8)/>
        <cfset cell.setCellValue('#getall.info10#')/>
    <cfset cell = row.createCell(9)/>
        <cfset cell.setCellValue('#getall.info11#')/>   
    <cfset cell = row.createCell(10)/>
        <cfset cell.setCellValue('#getall.info12#')/>
    <cfset cell = row.createCell(11)/>
        <cfset cell.setCellValue('#getall.info13#')/>
    <cfset cell = row.createCell(12)/>
        <cfset cell.setCellValue('#getall.info14#')/>
    <cfset cell = row.createCell(13)/>
        <cfset cell.setCellValue('#getall.info13#')/>
    <cfset cell = row.createCell(14)/>
        <cfset cell.setCellValue('#getall.info14#')/>
    <cfset cell = row.createCell(15)/>
        <cfset cell.setCellValue('#getall.info15#')/>
    <cfset cell = row.createCell(16)/>
        <cfset cell.setCellValue('#getall.info16#')/>
    <cfset cell = row.createCell(17)/>
        <cfset cell.setCellValue('#getall.info17#')/>
    <cfset cell = row.createCell(18)/>
        <cfset cell.setCellValue('#getall.info18#')/>            
</cfloop>


使用ColdFusion 9,对吗?这是令人沮丧的,因为ColdFusion 9文档声明它可以工作,但是它被严重破坏了。我认为这可能在最近的ColdFusion 11中得到了修复,但它仍然使用多个旧版本的ApachePOI库

尝试使用spreadsheetWrite()。我发现使用标记和脚本保存时存在差异:


注意:如果可以使用CFLive.net或TryCF.com进行此类测试,那就太好了,但出于安全原因,它们不允许生成文件。

更新:

在不知道更多的情况下,我猜这条线会导致错误。变量
#sheet1#
是POI类的一个实例:。该类不包含名为
FormatColumn(..)
的方法,因此它肯定会导致某种错误。但是,如果没有实际的错误消息,甚至没有屏幕截图,就很难排除错误

(如果您由于某种原因无法访问必要的工具,我建议您在本地(免费)安装CF Developer版本。然后您将拥有对CF管理员、日志等的完全访问权限,并可以根据需要配置调试设置。)

也就是说,我不知道为什么您首先要使用所有这些低级java代码。通常,如果您正在寻找CF不提供的一些额外功能,或者可能是为了解决一个bug,那么您只需要深入java。坦白地说,我还不相信这两种方法都适用于这里您是否尝试过下面的“按原样”示例?它在9.0.1中运行良好。YMMV


我尝试使用电子表格格式单元格。。。诸如此类 我的Excel页面将显示HTTP 500页面

您能否发布您尝试的实际代码和日志中的错误消息(以及完整版本)?CF9中的电子表格函数肯定存在一些bug,但是使用CF9.0.1对“textwrap”进行快速测试对我来说效果很好

<cfset sheet = spreadSheetNew()>

<!--- enabled wrapping for single cell --->
<cfset SpreadsheetFormatCell(sheet, {textwrap="true"}, 2, 1)>

<!---
   enable wrapping for entire column
<cfset SpreadsheetFormatColumn(sheet, {textwrap="true"}, 2)>
--->

<!--- add text --->
<cfset SpreadSheetSetCellValue(sheet, "Short text", 1, 1)>
<cfset SpreadSheetSetCellValue(sheet, RepeatString("aaa ", 50), 2, 1)>
<cfset SpreadSheetSetCellValue(sheet, "More text", 3, 1)>
<cfset SpreadSheetSetCellValue(sheet, "Short text", 1, 2)>
<cfset SpreadSheetSetCellValue(sheet, "More text", 2, 2)>

<!--- resize column --->
<cfset SpreadSheetSetColumnWidth(sheet, 1, 35)>

<!--- display results --->
<cfheader name="Content-Disposition" value="attachment; filename=test.xls">
<cfcontent type="application/vnd.ms-excel" 
          variable="#SpreadSheetReadBinary(sheet)#">


您使用SpreadsheetFormatColumn做了哪些尝试?出现了哪些错误?我第一次尝试时一定缺少了一个逗号。我现在正在使用它并获得一个HTTP500。我使用的是CF 9。您是否先尝试了上面的“按原样”示例?首先验证它是否满足您的需要,然后将其应用到您的代码中。至于错误-服务器500错误?查看CF日志以获取实际的错误消息。然后用完整的错误更新您的问题。请原谅我的无知,但是我如何找到CF日志?我一周前开始使用ColdFusion,但从未使用过。它们通常位于
{cf_root}\logs
。例如,在windows中:
c:\coldfusion9\logs
。有几个日志文件。此错误最有可能出现在
异常.log
中。请记住,日志目录的位置可能因安装CF的位置而异。顺便说一句,它通常在开发环境中启用,所以您可以在开发过程中轻松地在屏幕上查看错误消息。显然,它在生产中会被禁用。您是否尝试过上面的独立示例?结果如何?旁注-为了不忽略显而易见的问题,如果您正在使用IE,请确保您已关闭了它,否则您将不会看到服务器端错误,即使在CF Admin.愚蠢的问题中启用了健壮的异常,但是。。你们到底用什么代码来包装文本(以及9.x版本)?问这个问题的原因是我在OP中没有看到任何可以包装单元格文本的代码,在我的简短测试中,“textwrap”与9.0.1一起使用。如果可以使用CFLive.net或TryCF.com FWIW来完成这种类型的测试,那就太好了——你可以。使用
代替将工作表写入文件。spreadsheetWrite()将电子表格对象直接保存到文件系统。没有办法捕获数据(使用cfcontent)以将其与创建的输出进行比较。是的,我刚刚意识到您谈论的是一个不同的目标。我是说他可以用
cfcontent
来。如果目标只是比较将电子表格保存到磁盘的结果,则是-不支持。顺便说一句,你正在运行9.0.2吗?如果是,您从链接的示例中得到了什么结果?我很好奇,因为它工作得很好,带有CF9.0.1+10。