- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在运行 SQL 查询来获取一些数据。然后使用 CF 的电子表格功能将其导出为 Excel 文件。问题是查询中为空的单元格在其中得到了一个非空字符。当您打开电子表格时,它们看起来是空白的,但事实并非如此。它特别干扰了使用 Excel 的 ctrl-arrow 功能来查找下一个非空白单元格。
Field looks null but actually isn't
在数据库中,如果没有值,则颜色列为空。在 Excel 中,ctrl-downarrow 应该将您带到单元格 D9 或“蓝色”,但它不会。它将带您一直到列的底部。
如果在 Excel 中,我转到每个“空白”单元格,然后按删除键,则功能返回。很明显,Coldfusion 没有正确处理它。
我将其缩小到 Coldfusion,因为如果我在 SSMS 中运行相同的查询,并将数据从那里剪切并粘贴到 Excel 中,它会保留空值,并且 ctrl-downarrow 可以正常工作。
<cfquery datasource="test" name="qdata">
select ID,Name,Email,Color from TestTable
</cfquery>
<cfscript>
columns = qdata.getMetaData().getColumnLabels();
sheet=spreadsheetNew("Sheet1",true);
spreadsheetAddrows(sheet,qdata,1,1,true,[""],true);
sheetAsBinary = SpreadSheetReadBinary( sheet );
</cfscript>
<cfset filename = "TestFile.xlsx">
<cfheader name="Content-Disposition" value="attachment; filename=#filename#">
<cfcontent type="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" variable="#sheetAsBinary#" reset="true">
最佳答案
我最终使用了多种方法来实现它。循环查询并为每一列使用 SpeadSheetSetCellValue,并使用 if 语句检查该列是否为空。如果它为空,我根本没有填充该列。现在,这行得通。
感谢大家的评论,感谢@Ageax 引导我走向最终解决方案。
这是我改编自 this post 的最终代码(不包括查询,这无关紧要) :
<cfsilent>
<cfscript>
variables.cont = false;
/*variables.qdata is the name of my query object*/
switch(IsQuery(variables.qdata)){
case true:
variables.cont = true;
variables.rqCols = ArrayToList(variables.qdata.getColumnNames(),',');
variables.rqLen = ListLen(variables.rqCols,',');
variables.thisFileName = "JSM2020ProgramExport-" & DateTimeFormat(now(),'yyyymmdd_HHnnss') & ".xlsx";
variables.ssObj = SpreadsheetNew(left(trim(variables.thisFileName),30),'true');/* Setting last argument to 'true' makes this an xlsx, not xls. */
variables.format = StructNew();
variables.format.font = "Arial";
variables.format.textwrap = "true";
variables.format.verticalalignment = "VERTICAL_TOP";
variables.format.dataformat = "text";
SpreadsheetFormatColumns(variables.ssObj,variables.format,"1-#val(variables.rqLen)#");
SpreadsheetFormatRows(variables.ssObj,variables.format,"1,2");
SpreadsheetSetCellValue(variables.ssObj,variables.thisFileName, 1, 1); /* This is the name of the report, top row */
SpreadsheetAddFreezePane(variables.ssObj,0,2); /* Freeze top two rows */
for(x = 1; x lte val(variables.rqLen); x++){ /* This inserts the column names as row headers */
variables.colName = ListGetAt(variables.rqCols,x);
SpreadsheetSetCellValue(variables.ssObj,variables.colName,2,x);
}
for(y = 1; y lte val(variables.qdata.recordCount); y++){ /* This loops the query records */
for(x = 1; x lte val(variables.rqLen); x++){ /* This loops each column per recordset */
variables.colName = ListGetAt(variables.rqCols,x);
variables.thisValue = REreplaceNoCase(variables.qdata[variables.colName][y],"&##59;",";","all"); /* These make sure that no HTML entities are in the data */
variables.thisValue = REreplaceNoCase(variables.thisValue,"&apos(&##59)?;","'","all");
variables.thisValue = REreplaceNoCase(variables.thisValue,""(&##59)?;",'"',"all");
variables.thisValue = REreplaceNoCase(variables.thisValue,"<(&##59)?;",'<',"all");
variables.thisValue = REreplaceNoCase(variables.thisValue,">(&##59)?;",'>',"all");
variables.thisValue = REreplaceNoCase(variables.thisValue,"&##40(&##59|;)","(","all");
variables.thisValue = REreplaceNoCase(variables.thisValue,"&##41(&##59|;)",")","all");
if (variables.thisValue is not 'NULL'){SpreadsheetSetCellValue(variables.ssObj,variables.thisValue,val(y + 2),x);}
}
}
SpreadsheetFormatColumns(variables.ssObj,variables.format,"1-#val(variables.rqLen)#");
SpreadsheetFormatRows(variables.ssObj,variables.format,"1,2");
break;
default: /* Do nothing if the query object doesn't exist */
break;
}
</cfscript>
</cfsilent>
关于excel - cfspreadsheet 能否在不将它们更改为空白的情况下从查询中输出空值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61238543/
我正在运行 SQL 查询来获取一些数据。然后使用 CF 的电子表格功能将其导出为 Excel 文件。问题是查询中为空的单元格在其中得到了一个非空字符。当您打开电子表格时,它们看起来是空白的,但事实并非
给定一个有 N 个逻辑行的电子表格 其中一行完全空白* cfspreadsheet action="read"将返回一个带有 RecordCount 的查询N - 1。 *完全空白行是每个单元格实际上
我们有一个 Coldfusion 应用程序,它正在运行一个大型查询(最多 10 万行),然后以 HTML 格式显示它。然后 UI 提供一个导出按钮,触发使用 cfspreadsheet 标签和电子表格
我正在将大约 20,000 行加载到 中.它抛出一个错误: 当我将行数限制为 15,000 时,我没有收到错误。 行数有没有硬性限制支持? 最佳答案 这听起来和我给她的问题很相似:How do I
我正在尝试使用 cfspreadsheet 获取一个基本示例。但这是我收到的错误: Parameter validation error for the SPREADSHEETSETCELLVALUE
向coldfusion电子表格添加一行的函数是SpreadsheetAddrow,它接受数据为“以逗号分隔的单元格条目列表,每列一个。” 我的一些数据中有逗号。如何在不转义列表中的逗号的情况下转义数据
如何保护两张床单?目前该代码仅保护第一张纸。 var plan = spreadsheetNew("TEST", true); SpreadsheetCreateSheet(plan , "TEST2
当您使用 cfspreadsheet 阅读电子表格时,是否可以获取电子表格中列或单元格的数据类型或格式? ? 我正在将电子表格数据从 Excel 电子表格转换为数据库表格。到目前为止,我只是将所有内容
作为上一个线程的延续,我已经非常接近我想要的地方并且学到了很多东西。我在 MSSQL Server 2008 环境中使用 CF10。我有一个报告,我使用 cfspreadsheet 生成,然后根据用户
我正在学习 ColdFusion,我正在尝试使用 spreadsheetFormatRows(spreadsheetObject, dataFormat, rangeOfRowsFormated) 处
我的问题与this one基本相同,但我无法更改 Excel 文件中的日期格式: If I format the cell as date english (NZ), ie Date Type "*1
在 ColdFusion 11 中,我使用 cfSpreadsheet 将 .xls 文件转换为查询对象。这是我的演示电子表格的屏幕截图: 我使用此代码在创建查询对象后立即查看它: ...我得到这
我搜索了一段时间,如果已经有答案,请原谅我。我在使用 CFSpreadsheet 将边框应用于合并的单元格时遇到问题。下面是一些示例代码。 newSS = SpreadsheetNew('Testi
我想将电子表格格式化如下,但找不到合适的函数来使用 cfspreadsheet 或独立的电子表格()函数。 将页面方向设置为纵向或横向 设置页边距 请指教! 最佳答案 Last I checked ,
我正在使用 cfspreadsheet 创建电子表格对象。想要将某些单个单元格设为 protected (只读)。请让我知道是否有人以前尝试过这个。 我确实尝试将单元格格式设置为锁定,但似乎不起作用。
我正在尝试使用 ColdFusion 10 和 CFSpreadSheet 自动处理电子表格。到目前为止,我可以毫无问题地读入文件并转储查询对象。 当我尝试处理数据时出现问题。如果我做类似的事情
Workbook = Spreadsheetnew("Workbook"); SpreadSheetSetCellValue(WorkBook, "4D", 1, 1); // displayed
这更像是一个操作方法,而不是一个实际问题。 (我搜索并没有找到解决方案,所以我想出了这个) 我需要创建一个 Excel 文件导出,允许用户: 使用表单从原始表中过滤数据 将结果从原始表导出到 Exce
我是一名优秀的程序员,十分优秀!