导入并添加到MS Access 2013

时间:2016-02-18 17:56:14

标签: access-vba ms-access-2013

我正在尝试使用以下VBA代码导入Excel电子表格。在提交之前,我也删除了表格的当前内容。

DoCmd.RunSQL ("DELETE * FROM REBATE_PROG")
DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, "REBATE_PROG", filepath, True

rebate_prog表已经将字段定义为长文本(根据我的理解,这是旧备忘录字段)应该能够存储> 255个字符。

Access是否会截断内容?

我尝试过的一些事情没有成功:

  • 按截断字段的长度降序对导入文件进行排序 - 如果excel只查看几个顶行,则会导入为长文本。
  • 尝试更新"文字格式"对于“设计视图”下的字段,表格属性为“纯文本”,但由于某些原因,“访问”不允许我进行更改。

有没有办法可以导入excel电子表格而无需访问截断字段?

4 个答案:

答案 0 :(得分:1)

这是我通常针对那种数据类型问题所做的快速伎俩。 (假设您的Excel文件不是怪物):

  1. 在Excel中,首先在开头添加一个空列(A),然后选择整个工作表(单击左上角),然后按CTRL-C

  2. 在Access中,使用" table"创建一个新表。按钮。单击左上角选择所有内容(应该只有一个单元格),然后单击CTRL-V 您的数据就在那里,您的列已创建。 检查长文本所在的列,它可能是短文本,并且您的数据被截断。在表格上进入设计模式并将字段更改为LongText / Memo,将格式更改为富文本格式(确保在254个字符后不会隐藏)并保存表格。

  3. 删除表格中的所有行

  4. 从Excel重复复制/粘贴操作到您的表

  5. 您的文字不应再被截断,您可以使用此表格或其结构副本在APPEND模式下进一步进行VBA导入

答案 1 :(得分:0)

找到解决此问题的方法。可能还有其他解决方案,但这个似乎最适合我。以下是我所做的一步一步:

  1. 手动创建访问表:我在Access 2013中手动创建表结构并为每个字段定义每种数据类型。在我希望导入的字段> 255个字符的情况下,我将此字段数据类型设置为"长文本"并选择格式为" Rich text"。
  2. 注意:我为此表创建的结构与我打算导入的文件完全相同。

    1. 按字符长度排序导入文件:接下来,我使用LEN()函数LEN(<Cell in the long text field>)在导入文件中添加了一个新字段。然后使用此字段按降序对所有记录进行排序并保存文件。我必须这样做,因为导入时访问会查看几个顶行以确定需要从列导入多少数据(我在通过几个论坛后了解到这一点)。
    2. 注意:您还可以创建一个VBA代码,在导入之前按降序排序,但我还没有执行。如果您这样做,请在此处分享代码!

      1. 导入!:最后,使用我在下面提供的代码截断我们手动创建的表格,并将excel中的内容插入到表格中。
      2. 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的记录进行更新,而保留包含“长文本”的记录。这将输入整个长文本。

稍后,当我第二次更新已更改的文本时,数据库将看到实际的更改,而不是由于追加截断而导致的错误更改。

更新是好的。追加错误