RODBC失败:“投射规范的字符值无效” - Excel 2007

时间:2011-10-15 18:35:27

标签: r rodbc

我正在尝试使用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代码,似乎正在做正确的事情。还有其他人遇到过这个问题吗?

4 个答案:

答案 0 :(得分:12)

对于任何绊脚石的人(5年后),在R中,您可以使用varTypes中的sqlSave()参数,例如sqlSave(..., varTypes = c(somecolname="datetime", anothercolname= "datetime",...))

答案 1 :(得分:3)

我今天也遇到过同样的问题。我想将R中的表更新为SQL-serve。它给了我完全相同的错误消息。然后我将所有“日期”类型字段更改为“字符”类型。我再次更新,它的工作原理。

似乎SQL服务器无法正确识别R中的“Date”类型变量。

答案 2 :(得分:1)

我之前听说过这个问题:

解决方法:

  • 使用“0”表示错误,
  • 将付费设置为文本字段
  • 将您的应用程序逻辑更改为使用!= 0表示True

我会尝试为您找到错误票#,以便跟踪

答案 3 :(得分:0)

关闭这个问题。除了转换为角色之外,似乎没有一个好的解决方案。我选择编写一个命令行程序,将数据写入临时CSV文件,打开Excel并导入CSV。