我正在尝试使用RODBC写入Excel2007文件并且我一直收到错误。我已经将问题简化为这个非常基本的情况,一个包含字符,数字,日期和逻辑数据类型的1行data.frame:
toWrite = data.frame( Name = "joe" , Date = as.Date("2011-01-01"), Value = 2 , Paid = FALSE )
xlFile = odbcConnectExcel2007( "REPLACE_WITH_XLSB_FILE_PATH" , readOnly = FALSE )
sqlSave( xlFile , toWrite , tablename = "worksheet1" , rownames = FALSE )
错误:
Error in sqlSave(xlFile, toWrite, tablename = "worksheet1", rownames = FALSE) :
[RODBC] Failed exec in Update
22018 39 [Microsoft][ODBC Excel Driver]Invalid character value for cast specification
In addition: Warning message:
In odbcUpdate(channel, query, mydata, coldata[m, ], test = test, :
character data 'FALSE' truncated to 1 bytes in column 'Paid'
如果我将日期和逻辑列都转换为字符,那么一切正常。问题是这些现在是Excel中的字符,不能在没有转换的情况下用作预期的数据类型。我挖掘了sqlSave代码,似乎正在做正确的事情。还有其他人遇到过这个问题吗?
答案 0 :(得分:12)
对于任何绊脚石的人(5年后),在R中,您可以使用varTypes
中的sqlSave()
参数,例如sqlSave(..., varTypes = c(somecolname="datetime", anothercolname= "datetime",...))
。
答案 1 :(得分:3)
我今天也遇到过同样的问题。我想将R中的表更新为SQL-serve。它给了我完全相同的错误消息。然后我将所有“日期”类型字段更改为“字符”类型。我再次更新,它的工作原理。
似乎SQL服务器无法正确识别R中的“Date”类型变量。
答案 2 :(得分:1)
我之前听说过这个问题:
解决方法:
我会尝试为您找到错误票#,以便跟踪
答案 3 :(得分:0)
关闭这个问题。除了转换为角色之外,似乎没有一个好的解决方案。我选择编写一个命令行程序,将数据写入临时CSV文件,打开Excel并导入CSV。