Types CF9中的QueryNew()数据类型

Types CF9中的QueryNew()数据类型,types,coldfusion,coldfusion-9,Types,Coldfusion,Coldfusion 9,我接管了一个运行CF9.0.1的生产服务器上的系统,但在开发人员版本中找不到该系统的副本,因此我运行的是CF10 我正在将数据从数据库导出到Excel。由于数据来自多个数据源,因此将结果手动输入到查询中,然后用于输出到Excel。我首先要解决的一个问题是,因为Excel会自动键入数据,所以会发生一些事情,如删除尾随的零、将数字转换为日期等。经过大量研究,我尝试将进入查询的数据的数据类型指定为“varchar”,以便Excel将其作为文本读取。为此,我用以下代码行替换了原来的QueryNew da

我接管了一个运行CF9.0.1的生产服务器上的系统,但在开发人员版本中找不到该系统的副本,因此我运行的是CF10

我正在将数据从数据库导出到Excel。由于数据来自多个数据源,因此将结果手动输入到查询中,然后用于输出到Excel。我首先要解决的一个问题是,因为Excel会自动键入数据,所以会发生一些事情,如删除尾随的零、将数字转换为日期等。经过大量研究,我尝试将进入查询的数据的数据类型指定为“varchar”,以便Excel将其作为文本读取。为此,我用以下代码行替换了原来的QueryNew

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#">