来自excel表的APPEND给出了奇怪的错误

时间:2014-08-29 15:05:49

标签: excel visual-foxpro

我在Visual FoxPro中的APPEND FROM语句有问题。如果没有收到此错误,我无法从Excel工作表中执行APPEND:

  

缺少函数名称(

我正在处理存储在FoxPro数据库中的一些遗留数据。我正在阅读它,在.NET中处理它,然后将它写回一个新的FoxPro数据库。但是,写作部分不起作用。不幸的是,使用其他数据库不是一种选择是的,我是FoxPro的新手。

我确实可以使用INSERT语句,但是如果我可以从外部文件中获取APPEND,那么它也很有用,并且能够保存备忘录字段。 Afaik你不能用FoxPro中的CSV文件,只有Excel和其他一些格式 - 但不是CSV。

为了演示我使用Visual Foxpro附带的通讯簿示例数据库的问题。

我在V.FP的查询窗口中运行此查询:

USE "ADDRESS BOOK!ADDRESSES"
APPEND FROM D:\tmp\excel_data2.xls FIELDS (addressid, firstname) DELIMITED XLS

.xls文件是Excel 97-2003工作簿,如下所示:

A   | B
------------------------
23  | Sample 1
------------------------
24  | Sample 2 

根据这个文档,我认为语法应该是正确的:http://msdn.microsoft.com/en-us/library/aa977271(v=vs.71).aspx

然而,运行此查询只会给我一个关于&#34的错误;函数名称丢失了("。我已经尝试过各种各样的重写和此查询的变体,但我能想到,但是我无法弄清问题是什么。感谢任何帮助,谢谢。

2 个答案:

答案 0 :(得分:2)

不要偷走节目,但这就是我的工作方式:

确保XLS文件以Excel 5.0 / 95格式存储(基本上是一种古老的Excel格式,但数据输入已足够)。

关闭Excel文件,否则您将收到有关在另一个应用中锁定/打开文件的错误。

我使用了以下修改过的APPEND FROM语句,它起作用了:

USE "ADDRESS BOOK!ADDRESSES"
APPEND FROM D:\tmp\excel_data2.xls FIELDS addressid, firstname XLS

答案 1 :(得分:1)

LAK是正确的,但我会澄清您的应用以及将来可能遇到的Excel导入。如果您的表与Excel中的列顺序不匹配,则可能会遇到问题。通常我导入到一个游标,我知道字段的顺序和格式。然后我会追加。一旦进入表的游标版本,我就可以附加到任何其他表,循环它,进行数据清理等。

说你的地址表有它的ID,LastName,FirstName,Address的结构......但是你的Excel文件有ID,FirstName + LastName作为单个字段,Address你知道你需要解析它到适当的第一个/最后一个字段这将是使用临时游标的一个很好的例子。如果光标的列数多于Excel,那么它们只会出现并且是空白的,但可以根据需要使用。

create cursor C_TmpFromExcel;
   ( IDCol     int,;
     FullName  c(40),;
     Address   c(35),;
     FirstName c(20),;
     LastName  c(20) )

append from D:\tmp\excel_data2.xls type xls

*/ VERY BASIC example to split the name
replace all lastname with left( fullname, at("," , FullName ) -1 )
replace all firstname with substr( fullname, at( ",", FullName ) +1 )

select LiveAddressTable
append from C_TmpFromExcel

当一个表(或游标)与另一个表一起附加时,VFP将处理相同列名的匹配,并忽略那些列是否额外且不需要的那些(例如样本" FullName&#34 ; column - vs FirstName提取为额外的。)