从Excel导入到Access Memo字段时截断的数据

时间:2013-03-06 14:20:39

标签: excel ms-access truncate truncation

当我附加Excel文件时,Access会截断几个备注字段中的数据。 Access表中的字段已设置为“备注”类型。我认为问题是我在某些备注字段的前几行中没有任何条目。 Access假设数据是文本字段,即使我已将其设置为备注类型。

我尝试将其作为CSV添加。没用。

我在第一行放置了超过255个字符限制的虚拟数据,如果我这样做,数据不会被截断。

每次我必须导入Excel文件时,我都不想放置虚拟数据。这个过程至少每两周完成一次,也许更频繁。我想建立一种简单的方法来为将来使用同一数据库的员工导入数据。有什么想法吗?

更新:即使在前几行中使用虚拟数据,Access也会在导入Excel文件时截断10个Memo数据库中的3个数据(虚拟数据的字符长度为785) )。现在我真的不知所措。

8 个答案:

答案 0 :(得分:10)

已经有一段时间了,但我和你有同样的问题。

经过多次挖掘,我发现了wonderful world of microsoft explains

  

为避免导入期间出错,请确保每个源列   每行包含相同类型的数据。 Access扫描第一个   八个源行来确定中的字段的数据类型   表。我们强烈建议您确保前八个来源   行不会在任何列中混合使用不同数据类型的值。   否则,Access可能无法为其分配正确的数据类型   列。

显然,这意味着当附加 excel文件添加到现有表时,即使列格式化并保存为备注字段,如果excel文件中的所有8个第一行都小于256个字符,Access假定您实际意味着指定文本,从而截断255个字符后的剩余行。我已经进行了几次测试,在前8行中放置了“虚拟”行,每次都触发了超过255个字符的导入。

现在,如果导入到新表,则向导允许您选择所有格式选项。

如果您可以覆盖表中已有的所有数据,则可以方便地导入到新表。但是,如果你真的需要追加,我会建议导入一个临时表,然后从那里追加。一种简单的方法是保存导入,然后从VBA执行,如Elliot_et_al wanted to do。然后,您也可以在VBA中运行追加查询。如果您正确设置了表格,您可以使用

INSERT INTO [MyTable]
SELECT [MyTable_temp].*
FROM [MyTable_temp];

答案 1 :(得分:3)

它的价值......我在Access 2013中遇到了类似的问题 - 它在从XLS导入时将字段截断为255个字符,即使导入向导选择了LONG TEXT作为字段,并且即使我有>的字段前几行中有255个字符。

一位同事建议我链接电子表格而不是导入新表,问题就消失了。我还创建了一个基于链接的新表,一切都很好。

已编辑添加:在Access 2013中,如果您已将XLS文件导入Access并且无法返回尝试首先尝试链接,请尝试以下操作:

转到表格的设计视图,转到该屏幕底部的字段属性并设置长文本"文本格式"到#34;富文本"。就在今天,我发现这让我不必重新创建一张几个月前我从excel导入的表,并发现即使我有#34; Notes"列设置为长文本,它仍然截断我手动输入的文本,无论如何。切换到富文本使此文本可见。

答案 2 :(得分:1)

我使用excel与外部合作伙伴进行通信,并将报告从他们捕获到访问数据库中。我发现最好的方法是插入一个"虚拟"第一行进入工作表,在任何给定列中包含超过255个字符,其中用户填充的数据可能超过255个字符。

这样当我导入数据时,它总是导入所有文本,然后我可以简单地删除" dummy"数据库表中的行。

我经常使用"导入模板"我从访问数据库链接到的工作簿。我将模板页面设置为在链接之前格式化为表格(以便导入包含所有数据而不必每次都指定范围),并使第一个"虚拟"隐藏在那里的行。

通过这种方式,我可以简单地将数据复制并粘贴到导入模板中,然后运行数据库查询以将数据导入(如果需要,转换)到数据库中,并使用第二个查询来删除"虚设"之后记录。

希望这有帮助..?

答案 3 :(得分:1)

我在MS Access 2013中遇到了同样的问题。当我导入一个包含大于255个字符的列文本的Excel工作表时,它正在截断。我做了很多研究,最后我找到了一个解决方法。实际上,有些MS Access数据库如何根据第一个记录列文本长度确定文本的大小,并为后续记录修复该长度。如果它的长度< 255,访问自动将进一步记录长度限制为255大小或者是第一个记录列长度。我确保第一条记录具有所有记录文本列的最大长度(已排序),然后导入,它对我来说效果很好。

答案 4 :(得分:0)

我在Access 2010中遇到了同样的问题。我找到了两个不同的解决方法,在找到Access后查看前25条记录,以确定导入时每列上的数据类型。

  1. 按列长度按降序对记录进行排序。这意味着某些列中大于255个字符的记录将位于前25个记录中。然后,Access能够导入这些记录而不会截断。
  2. 创建链接表,将列数据类型指定为备忘录,然后附加到表。

答案 5 :(得分:0)

我上面提供的Rich Text解决方案以及使用"虚拟行"作为第一个导入的记录。谢谢你们!但是,今天我想我已经为您进行了多次有效的/一致的进口解决方案。我在Access 2007中试过这个。

使用导入向导,就像您将数据导入新表一样。浏览设置规格的所有屏幕。最重要的是,在繁琐的“字段选项/数据类型”区域中检查或指定每个字段的数据类型(对于我最近的文本文件,这是“导入文本向导”的第3个屏幕) - 请务必在此处指定备注字段。 (别担心,你只需要这样做一次!)

当你到达决赛时,那就是向导需要的所有信息......"屏幕,寻找"高级..."左下角的按钮。这会打开一个屏幕,总结您刚才所做的一切。寻找"另存为..."在右边。使用有用的名称保存这些规范。 (您可以点击"规格......"直接在下面确认您保存了规格。)点击"好的"离开高级屏幕。

如果您实际上不需要创建新表,现在可以取消向导。接下来 - 这是你从现在开始每次都可以做的事情,以避免截断 - 转到正常的导入向导,使用"将记录的副本附加到表格中..."在向导中,您应该看到相同的"高级..."按钮。打开它,单击"规格...",然后双击已保存的规格。说"好的"退出"高级,"并完成向导。这应该告诉Access将备忘录字段保存为备忘录字段!

将CSV导入现有表时,我发现在进入"高级"之前,我需要通过几个常规向导屏幕(例如指定文本限定符)。屏幕。不知道为什么这会让它变得快乐,只是我们。

我希望这可以帮助那些一直困扰Field Truncation导入错误的人,比如我!

答案 6 :(得分:0)

在许多情况下,您只需将备注字段的文本格式从普通文本更改为RTF,现在如果您打开表格数据,则可以看到所有导入的文本

答案 7 :(得分:0)

Excel和Access很古怪。显然,将Excel或CSV附加到具有相同Long Text属性的现有Access表的末尾是一个问题。附加数据将默认所有长文本到短文本。解决方法是将数据输出到Excel,将数据附加到一个表中,然后将其作为Access中的新表导入。无论您做什么,Access都会将附加数据视为短文本而不是长文本。

确保在使用导入向导将列的属性更改为长文本时。

我希望这会有所帮助。