Coldfusion Cold Fusion 2018:如何将.xlsx文件保存为.csv

Coldfusion Cold Fusion 2018:如何将.xlsx文件保存为.csv,coldfusion,cfspreadsheet,Coldfusion,Cfspreadsheet,2019年冬季奥运会上的CF2018 正在尝试将用户上载的.xlsx文件保存为.csv文件,以便处理到Oracle数据库中。 运行此代码,完成时没有错误,但结果不清晰: <cfspreadsheet action = "read" format="csv" src="c:\bin\Nov_sales.xlsx" name="f

2019年冬季奥运会上的CF2018 正在尝试将用户上载的.xlsx文件保存为.csv文件,以便处理到Oracle数据库中。 运行此代码,完成时没有错误,但结果不清晰:

<cfspreadsheet action = "read"
                format="csv"
                src="c:\bin\Nov_sales.xlsx"
                name="foo"
                > 

<cfspreadsheet action="write" 
                filename='c:\bin\Nov_sales.csv' 
                format="csv" 
                name="foo"  
                overwrite=true>
我遗漏了什么?

cfspreadsheet标签总是将电子表格数据作为XLS文件写入。要将HTML变量或CSV变量写入HTML或CSV文件,请使用cffile标记

或者换句话说,当使用cfspreadsheet action=write时,format属性不指定输出格式,而是指定输入格式-因为它可以是CF电子表格对象、查询、CSV字符串或HTML字符串中的任何一个


您在.csv文件中看到了原始字节,因为它实际上是一个Excel文件,与.csv文件扩展名无关。

假设您的Excel文件有一个头记录,您应该首先将Excel文件读入查询对象。然后,通过使用循环写入文件,可以将查询对象导出到csv中

阅读后:

cfspreadsheet标记始终将电子表格数据作为XLS文件写入。要将HTML变量或CSV变量写入HTML或CSV文件,请使用cffile标记

我让它工作起来,像这样:

504b 0304 1400 0808 0800 d260 8f51 0000
0000 0000 0000 0000 0000 0b00 0000 5f72
656c 732f 2e72 656c 73ad 92c1 4a03 3110
865f 25cc bd9b 6d05 1169 da8b 08bd 89d4
.....
<cfquery name="ExportData" datasource="yourdatasource">

    /* Only specify the columns you need to display in the query */

    SELECT *    
    FROM instructor_student_session 

    </cfquery>
<cfset doc_nm = "instructor_student">
<cfscript>
        //Use an absolute path for the files.
        theDir="c:\bin\";
        theXLSXFile="#doc_nm#.xlsx";
        //Create two empty ColdFusion spreadsheet objects.
        theSheet = SpreadsheetNew(true); // creates as xlsx
        //Populate each object with a query.
        //SpreadsheetAddRows(theSheet,ExportData); //no headers
        SpreadsheetAddrows(theSheet,ExportData,1,1,true,[""],true); // add headers
    </cfscript>

<cfset theCSVFile = "#doc_nm#.csv">

<cfspreadsheet action="write" filename="#theDir##theXLSXFile#" name="theSheet" sheetname="Students" overwrite="true">

<cfspreadsheet action = "read" src="#theDir##theXLSXFile#" format="csv" name="csvdata" sheet="1">

<cffile action="write" file="#theDir##theCSVFile#" output="#csvdata#">

<cfheader name="Content-disposition" value="attachment;filename=#theCSVFile#">

<cfcontent type="application/vnd.ms-excel" file="#theDir##theCSVFile#" deletefile="yes">

cfspreadsheet不能用于创建csv文件,就像您在这里打算的那样。您可能需要这样做您的excel文件是否有头记录?如果是这样,您应该做的是读取excel文件并将其放置到查询对象中。从那里,您可以轻松地将查询导出到csv。
<cfquery name="ExportData" datasource="yourdatasource">

    /* Only specify the columns you need to display in the query */

    SELECT *    
    FROM instructor_student_session 

    </cfquery>
<cfset doc_nm = "instructor_student">
<cfscript>
        //Use an absolute path for the files.
        theDir="c:\bin\";
        theXLSXFile="#doc_nm#.xlsx";
        //Create two empty ColdFusion spreadsheet objects.
        theSheet = SpreadsheetNew(true); // creates as xlsx
        //Populate each object with a query.
        //SpreadsheetAddRows(theSheet,ExportData); //no headers
        SpreadsheetAddrows(theSheet,ExportData,1,1,true,[""],true); // add headers
    </cfscript>

<cfset theCSVFile = "#doc_nm#.csv">

<cfspreadsheet action="write" filename="#theDir##theXLSXFile#" name="theSheet" sheetname="Students" overwrite="true">

<cfspreadsheet action = "read" src="#theDir##theXLSXFile#" format="csv" name="csvdata" sheet="1">

<cffile action="write" file="#theDir##theCSVFile#" output="#csvdata#">

<cfheader name="Content-disposition" value="attachment;filename=#theCSVFile#">

<cfcontent type="application/vnd.ms-excel" file="#theDir##theCSVFile#" deletefile="yes">