8

我正在尝试使用 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

4 回答 4

19

对于任何偶然发现此问题的人(5 年后),在 R 中,您可以使用like中的varTypes参数。sqlSave()sqlSave(..., varTypes = c(somecolname="datetime", anothercolname= "datetime",...))

于 2017-06-12T18:11:08.000 回答
4

我今天也遇到了同样的问题。我想将 R 中的表更新为 SQL 服务。它给了我完全相同的错误信息。然后我将所有“日期”类型字段更改为“字符”类型。我又更新了,成功了。

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

于 2017-01-11T00:18:13.380 回答
1

我以前听说过这个问题:

解决方法:

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

我会尝试为您找到错误票#供您跟踪

于 2011-10-24T22:06:07.490 回答
0

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

于 2011-11-01T21:28:59.673 回答