我正在尝试使用以下VBA代码导入Excel电子表格。在提交之前,我也删除了表格的当前内容。
DoCmd.RunSQL ("DELETE * FROM REBATE_PROG")
DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, "REBATE_PROG", filepath, True
rebate_prog表已经将字段定义为长文本(根据我的理解,这是旧备忘录字段)应该能够存储> 255个字符。
Access是否会截断内容?
我尝试过的一些事情没有成功:
有没有办法可以导入excel电子表格而无需访问截断字段?
答案 0 :(得分:1)
这是我通常针对那种数据类型问题所做的快速伎俩。 (假设您的Excel文件不是怪物):
在Excel中,首先在开头添加一个空列(A),然后选择整个工作表(单击左上角),然后按CTRL-C
在Access中,使用" table"创建一个新表。按钮。单击左上角选择所有内容(应该只有一个单元格),然后单击CTRL-V 您的数据就在那里,您的列已创建。 检查长文本所在的列,它可能是短文本,并且您的数据被截断。在表格上进入设计模式并将字段更改为LongText / Memo,将格式更改为富文本格式(确保在254个字符后不会隐藏)并保存表格。
删除表格中的所有行
从Excel重复复制/粘贴操作到您的表
您的文字不应再被截断,您可以使用此表格或其结构副本在APPEND模式下进一步进行VBA导入
答案 1 :(得分:0)
找到解决此问题的方法。可能还有其他解决方案,但这个似乎最适合我。以下是我所做的一步一步:
注意:我为此表创建的结构与我打算导入的文件完全相同。
LEN()
函数LEN(<Cell in the long text field>)
在导入文件中添加了一个新字段。然后使用此字段按降序对所有记录进行排序并保存文件。我必须这样做,因为导入时访问会查看几个顶行以确定需要从列导入多少数据(我在通过几个论坛后了解到这一点)。注意:您还可以创建一个VBA代码,在导入之前按降序排序,但我还没有执行。如果您这样做,请在此处分享代码!
DoCmd.RunSQL ("DELETE * FROM REBATE_PROG")
DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, "REBATE_PROG", filepath, True
答案 2 :(得分:0)
就我而言,长文本是从Excel导入到Access 2016中的,但无法完全看到。
只需从表的Format属性中删除“ @”,即可在表中看到完整的字段。
同样,删除显示长文本的表单文本框上的“ @”,可以在表单上看到完整字段。
答案 3 :(得分:0)
这就是我所做的。我隔离了“长文本”字段,以便可以使用“更新”而不是“追加”来添加它。
因此,在我最初的过程中,我将链接的Excel表中的数据附加到了我的访问表中。那没有用,因为它截断了长文本。所以我要做的是从Append查询中删除Long Text字段,然后为所有其他字段运行Append
现在,我的新记录的“长文本”字段为Null,而我现有的记录的“长文本”为Null。 (我需要这样做,因为长文本可能已更改,并且如果当前的长文本与现有的长文本不匹配,则需要在加载路由中稍后进行更新。(这就是我发现的方式)>
因此,现在我可以对“长文本”字段为Null的记录进行更新,而保留包含“长文本”的记录。这将输入整个长文本。
稍后,当我第二次更新已更改的文本时,数据库将看到实际的更改,而不是由于追加截断而导致的错误更改。
更新是好的。追加错误