Types CF9中的QueryNew()数据类型
我接管了一个运行CF9.0.1的生产服务器上的系统,但在开发人员版本中找不到该系统的副本,因此我运行的是CF10 我正在将数据从数据库导出到Excel。由于数据来自多个数据源,因此将结果手动输入到查询中,然后用于输出到Excel。我首先要解决的一个问题是,因为Excel会自动键入数据,所以会发生一些事情,如删除尾随的零、将数字转换为日期等。经过大量研究,我尝试将进入查询的数据的数据类型指定为“varchar”,以便Excel将其作为文本读取。为此,我用以下代码行替换了原来的QueryNewTypes CF9中的QueryNew()数据类型,types,coldfusion,coldfusion-9,Types,Coldfusion,Coldfusion 9,我接管了一个运行CF9.0.1的生产服务器上的系统,但在开发人员版本中找不到该系统的副本,因此我运行的是CF10 我正在将数据从数据库导出到Excel。由于数据来自多个数据源,因此将结果手动输入到查询中,然后用于输出到Excel。我首先要解决的一个问题是,因为Excel会自动键入数据,所以会发生一些事情,如删除尾随的零、将数字转换为日期等。经过大量研究,我尝试将进入查询的数据的数据类型指定为“varchar”,以便Excel将其作为文本读取。为此,我用以下代码行替换了原来的QueryNew da
dataQuery = QueryNew("row_number,function,nomenclature,hw,crit,load,sw,media,svd,bds,ecp,install,notes", "VarChar, VarChar, VarChar, VarChar, VarChar, VarChar, VarChar, VarChar, VarChar, VarChar, VarChar, VarChar, VarChar");
这对CF10非常有效。然后,它用CF9发布到生产中,但没有解决任何问题。Excel仍然没有接收作为文本类型的数据,并且正在自动格式化数据。因此,我尝试了以下方法
dataQuery = QueryNew("row_number,function,nomenclature,hw,crit,load,sw,media,svd,bds,ecp,install,notes", "CF_SQL_VARCHAR, CF_SQL_VARCHAR, CF_SQL_VARCHAR, CF_SQL_VARCHAR, CF_SQL_VARCHAR, CF_SQL_VARCHAR, CF_SQL_VARCHAR, CF_SQL_VARCHAR, CF_SQL_VARCHAR, CF_SQL_VARCHAR, CF_SQL_VARCHAR, CF_SQL_VARCHAR, CF_SQL_VARCHAR");
同样,它在CF9上不起作用,但在CF10上很好
CF9中是否有我遗漏的东西使它无法工作?任何帮助都太好了
很抱歉没有早点这么做。这是一个示例代码,正好显示了我遇到的问题。这在CF10上完美地导出到Excel,但在CF9上存在问题
<cfscript>
dataQuery = QueryNew("row_number,function,nomenclature,hw,crit,load,sw,media,svd,bds,ecp,install,notes", "VarChar,VarChar,VarChar,VarChar,VarChar,VarChar,VarChar,VarChar,VarChar,VarChar,VarChar,VarChar,VarChar");
//Row #1
newRow = queryaddRow(dataQuery);
querySetCell(dataQuery,"row_number","1");
querySetCell(dataQuery,"function","Function 1");
querySetCell(dataQuery,"nomenclature","Nomen 1");
querySetCell(dataQuery,"hw","185019-001"); //Sometimes axports as an exponent
querySetCell(dataQuery,"crit","2");
querySetCell(dataQuery,"load","Load 12B RL");
querySetCell(dataQuery,"sw","0.0620"); //This one get the trailing 0 left off
querySetCell(dataQuery,"media","Media 1");
querySetCell(dataQuery,"svd","6529-02"); // Sometimes turned into a date
querySetCell(dataQuery,"bds","BDS 1");
querySetCell(dataQuery,"ecp","ECP1");
querySetCell(dataQuery,"install","Install 1");
querySetCell(dataQuery,"notes","Note1");
//Row #2
newRow = queryaddRow(dataQuery);
querySetCell(dataQuery,"row_number","2");
querySetCell(dataQuery,"function","Function 2");
querySetCell(dataQuery,"nomenclature","Nomen 2");
querySetCell(dataQuery,"hw","185019-005"); //Sometimes axports as an exponent
querySetCell(dataQuery,"crit","2");
querySetCell(dataQuery,"load","Load 12B RL");
querySetCell(dataQuery,"sw","0.06200"); //This one get the trailing 0 left off
querySetCell(dataQuery,"media","Media 2");
querySetCell(dataQuery,"svd","6529-03"); // Sometimes turned into a date
querySetCell(dataQuery,"bds","BDS 2");
querySetCell(dataQuery,"ecp","ECP 2");
querySetCell(dataQuery,"install","Install 2");
querySetCell(dataQuery,"notes","Note2");
sheet= spreadSheetNew("New", "true");
spreadsheetAddRows(sheet,dataQuery);
</cfscript>
<cfspreadsheet action="write" filename="c:/CF9ExcelTest.xlsx" name="sheet" overwrite="true" >
dataQuery=QueryNew(“行号、函数、术语、硬件、crit、加载、软件、媒体、svd、bds、ecp、安装、注释”、“VarChar、VarChar、VarChar、VarChar、VarChar、VarChar、VarChar、VarChar、VarChar、VarChar、VarChar、VarChar”);
//第1排
newRow=queryaddRow(数据查询);
querySetCell(数据查询,“行号”,“1”);
querySetCell(数据查询,“函数”,“函数1”);
querySetCell(数据查询,“命名法”、“命名1”);
querySetCell(数据查询,“hw”,“185019-001”)//有时以指数形式显示
querySetCell(数据查询,“crit”,“2”);
querySetCell(数据查询,“加载”,“加载12B RL”);
querySetCell(数据查询,“sw”,“0.0620”)//这一个去掉了尾随的0
querySetCell(数据查询,“媒体”、“媒体1”);
querySetCell(数据查询,“svd”,“6529-02”);//有时会变成约会
querySetCell(数据查询,“bds”、“bds 1”);
querySetCell(数据查询,“ecp”、“ECP1”);
querySetCell(数据查询,“安装”、“安装1”);
querySetCell(数据查询,“注释”,“注释1”);
//第2排
newRow=queryaddRow(数据查询);
querySetCell(数据查询,“行号”,“2”);
querySetCell(数据查询,“函数”,“函数2”);
querySetCell(数据查询,“命名法”、“命名2”);
querySetCell(数据查询,“hw”,“185019-005”)//有时以指数形式显示
querySetCell(数据查询,“crit”,“2”);
querySetCell(数据查询,“加载”,“加载12B RL”);
querySetCell(数据查询,“sw”,“0.06200”)//这一个去掉了尾随的0
querySetCell(数据查询,“媒体”、“媒体2”);
querySetCell(数据查询,“svd”,“6529-03”);//有时会变成约会
querySetCell(数据查询,“bds”、“bds 2”);
querySetCell(数据查询,“ecp”、“ECP2”);
querySetCell(数据查询,“安装”、“安装2”);
querySetCell(数据查询,“注释”,“注释2”);
表格=电子表格新建(“新建”、“真实”);
电子表格AddRows(表格、数据查询);
谢谢您的帮助。首先尝试将列/单元格格式化为文本。请参见文档中的格式示例,在下。即 不幸的是,CF9.x中的一些电子表格函数有点古怪,所以我不确定它是否能与
SpreadsheetAddRows
结合使用。如果不是,则可能需要采用循环和循环内的格式,并分别指定单元格值:
...
SpreadsheetFormatCell(sheet, {dataformat="@"}, rowNum, columnNum);
SpreadSheetSetCellValue(sheet, "some value", rowNum, columnNum);
...
如果Leigh的选项失败,您可以尝试以不同的方式生成Excel文件。您可以创建xml文件并将其保存为excel。通过这种方式,可以为每个单元格或列设置值和数据类型。下面只是一个非常简单的例子
<cfsavecontent variable="test">
<?xml version="1.0"?>
<ss:Workbook xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet">
<ss:Worksheet ss:Name="Sheet1">
<ss:Table>
<ss:Column ss:Width="80"/>
<ss:Column ss:Width="80"/>
<ss:Column ss:Width="80"/>
<ss:Row>
<ss:Cell>
<ss:Data ss:Type="String">185019-001</ss:Data>
</ss:Cell>
<ss:Cell>
<ss:Data ss:Type="String">0.06200</ss:Data>
</ss:Cell>
<ss:Cell>
<ss:Data ss:Type="String">6529-02</ss:Data>
</ss:Cell>
</ss:Row>
</ss:Table>
</ss:Worksheet>
</ss:Workbook>
</cfsavecontent>
<cffile action="write" file="c:/CF9ExcelTest.xls" output ="#test#">
185019-001
0.06200
6529-02
有关在CF9中适用的方法,请参见:
SpreadsheetSetCellValue()
重新插入有问题的值(它们现在的格式正确)更详细的信息和代码可以在I run cf9上找到。什么样的样本值会导致问题?是的,请提供一些样本值进行测试。请注意,AFAIK 9.0.1不再可用。他们与Verity的合同到期了。由于9.0.1仍包括Verity。(如果他们在旧的下载页面上提到了这一点,那就太好了,这样人们就不会在那些毫无用处的旧链接后面追尾了……(编辑)已经有一段时间了,我想不起来是CF还是Excel负责转换内容了。首先尝试将列/单元格格式化为文本。请参见文档中ie
{dataformat=“@”}
下的示例。不确定是否与电子表格AddRows
结合使用。如果没有,您可能需要求助于循环和spreadSheetSetCellValue
。我认为一些9.0.1下载仍然可用,例如,请看这里@Heather-我知道您说过对单元格进行预格式化对您有用。然而,如前所述,9.0->9.0.1-9.0.2之间的行为存在一些差异。因此,如果最终在您的prod环境中不起作用,那么应该使用这种方法。(这是我之前提到的创造性变通方法之一,可以绕过CF9.x中电子表格函数的怪癖)。
<cfsavecontent variable="test">
<?xml version="1.0"?>
<ss:Workbook xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet">
<ss:Worksheet ss:Name="Sheet1">
<ss:Table>
<ss:Column ss:Width="80"/>
<ss:Column ss:Width="80"/>
<ss:Column ss:Width="80"/>
<ss:Row>
<ss:Cell>
<ss:Data ss:Type="String">185019-001</ss:Data>
</ss:Cell>
<ss:Cell>
<ss:Data ss:Type="String">0.06200</ss:Data>
</ss:Cell>
<ss:Cell>
<ss:Data ss:Type="String">6529-02</ss:Data>
</ss:Cell>
</ss:Row>
</ss:Table>
</ss:Worksheet>
</ss:Workbook>
</cfsavecontent>
<cffile action="write" file="c:/CF9ExcelTest.xls" output ="#test#">