我在SQL Server中有几个日期时间字段,可以输出为CSV文件,可以是.txt或.csv。在Excel 2010中自动打开.csv文件时,它会将日期时间格式化为mm:ss.0并完全删除日期部分。
我已阅读此内容:Opening a CSV file in excel changes my formats和此:Date format that is guaranteed to be recognized by Excel
以下是存储在CSV文件(.txt)中的原始文本片段。请注意,日期部分是ISO格式。时间部分确实有毫秒。
"EVENTSTARTDATE","EVENTTITLE","PURCHASEDATE"
"2013-04-17 00:00:00.0","Test Event","2013-04-17 15:06:27.56"
以下是Excel中的格式:
EVENTSTARTDATE EVENTTITLE PURCHASEDATE
00:00.0 Test Event 06:27.6
点击字段会显示以下值:
EVENTSTARTDATE PURCHASEDATE
4/17/2013 12:00:00 AM 4/17/2013 3:06:28 PM
当我转到“格式化单元格...”并查看字段格式时,它是“自定义”和“mm:ss.0”。我可以将其重新格式化为日期格式,它工作正常,所以显然数据本身是正确的。为什么Excel只格式化时间部分,为什么要删除小时?如果字段类型为“常规”,Excel不能解析日期时间数据吗?
其他可能相关的信息: 我正在使用ColdFusion 9并且具有使用CreateODBCDateTime()函数的代码。
<cfif isDate(raw)>
<cfset raw = CreateODBCDateTime(raw)>
</cfif>
答案 0 :(得分:1)
解决了这个问题。这个函数的代码中隐藏了一个函数调用:
<cffunction name="QueryToCSV" access="public" returntype="string" output="false" hint="Converts a query to a comma separated value string.">
<cfargument name="Query" type="query" required="true" hint="the query being converted to CSV">
<cfargument name="Headers" type="string" required="false" default="#arguments.query.columnList#" hint="the list of field headings to be used when creating the CSV value">
<cfargument name="Fields" type="string" required="false" default="#arguments.query.columnList#" hint="the list of query fields to be used when creating the CSV value">
<cfargument name="lstDateTimeFields" type="string" required="false" default="" hint="the list of fields that should be output in a date/time format">
<cfargument name="CreateHeaderRow" type="boolean" required="false" default="true" hint="flags whether or not to create a row of header values">
<cfargument name="Delimiter" type="string" required="false" default="," hint="the field delimiter in the CSV value">
<!---
Author:
Ben Nadel
Link:
http://www.bennadel.com/blog/1239-Updated-Converting-A-ColdFusion-Query-To-CSV-Using-QueryToCSV-.htm
--->
...
</cffunction>
这是将查询转换为CSV的原因。使用正确的字段名称设置lstDateTimeFields
参数会导致它们在Excel文件中正确格式化。