导入或链接 Excel 工作簿中的数据
Applies ToMicrosoft 365 专属 Access Access 2024 Access 2021 Access 2019 Access 2016

注意: Microsoft Access 不支持使用应用的敏感度标签导入 Excel 数据。 解决方法是,可以在导入之前删除标签,然后在导入后重新应用标签。 有关详细信息,请参阅 在 Office 中将敏感度标签应用于文件和电子邮件

可以用多种方法将 Excel 工作簿中的数据添加到 Access 数据库中。 将数据从打开的工作表复制并粘贴到 Access 数据表中;将工作表导入新表或现有的表中;或者从 Access 数据库链接到工作表。

本主题详细说明了如何从 Access 桌面版数据库导入或链接 Excel 数据。

您要做什么?

了解导入来自 Excel 的数据

如果您要将一个或多个 Excel 工作表中的某些或全部数据存储在 Access 中,应将工作表的内容导入一个新建的或现有的 Access 数据库。 在导入数据时,Access 会在新表或现有的表中创建数据副本,而不更改源 Excel 工作表。

需要将 Excel 数据导入 Access 的常见情况

  • 您是 Excel 的长期用户,但是以后想要使用 Access 来处理这些数据。 您希望将 Excel 工作表中的数据移到一个或多个新的 Access 数据库中。

  • 您所在的部门或工作组使用 Access,但您偶尔会接收到 Excel 格式的数据,这些数据必须与 Access 数据库合并。 您希望在收到这些 Excel 工作表时将它们导入到您的数据库中。

  • 您使用 Access 管理数据,但您从团队其他人那里接收的周报表是 Excel 工作簿。 您希望简化导入过程,以便确保这些数据在每周特定的时间导入到您的数据库中。

如果您是第一次导入来自 Excel 的数据

  • 无法将 Excel 工作簿另存为 Access 数据库。 Excel 没有提供利用 Excel 数据创建 Access 数据库的功能。

  • 当您在 Access 中打开 Excel 工作簿(在“文件”->“打开”对话框中,将“文件类型”列表框更改为“Microsoft Office Excel 文件”,然后选择所需文件)时,Access 会创建一个指向该工作簿的链接,而不导入该工作簿的数据。 链接工作簿与在数据库中导入工作表从根本上说是不同的。 有关链接的详细信息,请参阅下文中的链接 Excel 中的数据一节。

导入来自 Excel 的数据

本部分中的步骤说明如何准备和运行导入操作,以及如何将导入设置保存为规范以供以后重复使用。 继续操作时,请记住,一次只能从一个工作表导入数据。 不能同时从整个工作簿导入所有数据。

准备工作表

  1. 找到源文件并选择要导入 Access 中的数据所在的工作表。 如果只想导入工作表的部分数据,可以定义一个命名区域,其中只包含要导入的单元格。定义一个命名区域(可选)   

    1. 切换到 Excel 并打开包含要导入的数据的工作表。

    2. 选择要导入的数据所在的单元格区域。

    3. 右键单击选定的区域,然后单击“命名单元格区域”或“定义名称”。

    4. 在“新名称”对话框的“名称”框中,为该区域指定一个名称,然后单击“确定”。

      请记住,导入操作一次只能导入一个工作表。 要导入来自多个工作表中的数据,请为每个工作表重复导入操作。

  2. 查看源数据,并按下表中的说明执行操作。

    元素

    说明

    列数

    要导入的源列数量不能超过 255,原因是 Access 在一个表中支持的最大字段数为 255。

    忽略行和列

    在源工作表或命名区域中只包含要导入的行和列是一个好的做法。

        您不能在导入操作过程中筛选或忽略行。

        如果选择将数据添加到现有的表中,则不能在导入操作过程中忽略列。

    表格形式

    确保单元格采用表格形式。 如果工作表和命名区域中包含合并单元格,单元格的内容将放在与最左列对应的字段中,其他字段留空。

    空白行、列和单元格

    删除工作表或区域中所有不必要的空白行列。 如果工作表或区域包含空白单元格,请尝试在这些单元格中添加丢失的数据。 如果准备将记录追加到现有的表中,请确保表中的对应字段可接受空(丢失或未知)值。 如果一个字段的“必填”字段属性设置为“”,并且它的“有效性规则”属性设置允许空值,则该字段将接受空值。

    错误值

    如果工作表或区域中的一个或多个单元格包含错误值(如 #NUM#DIV),请先更正这些错误值,再开始导入操作。 如果源工作表或区域包含错误值,Access 将在表中的对应字段内放置空值。 有关改正这些错误的方法的详细信息,请参阅本文后面的丢失值或错误值的疑难解答一节。

    数据类型

    为了避免在导入过程中出现错误,请确保各个源列中每一行所包含的数据类型都是相同的。 Access 会扫描前八个源行,以确定表中字段的数据类型。 我们极力建议您确保前八个源行的任何列内都没有混合不同数据类型的值。 否则,Access 可能无法向该列分配正确的数据类型。

    此外,最好在开始导入操作前,先为 Excel 中的每个源列设置格式并为每一列指定特定的数据格式,这不失为一个好做法。 如果列中存在数据类型不同的值,我们极力建议您设置格式。 例如,工作表中的 FlightNo 列可能同时包含数字值和文本值(如 871、AA90 和 171)。 为了避免丢失值或错误值,请执行以下操作:

    1. 右键单击该列标题,然后单击“设置单元格格式”。

    2. 在“数字”选项卡的“类别”下,选择一种格式。 对于 FlightNo 列,您可能需要选择“文本”。

    3. 单击“确定”。

    如果为源列设置了格式,但源列中第八行以后的行中仍包含不同数据类型的值,则导入操作还是可能会跳过值或错误地转换值。 有关疑难解答的信息,请参阅丢失值或错误值的疑难解答一节。

    第一行

    如果工作表或命名区域的第一行包含列名,则可指定 Access 在导入操作中将第一行的数据视为字段名称。 如果源工作表或区域不包含列名,最好在开始导入操作前将它们添加到源中。

    注意: 如果准备将数据追加到现有的表中,请确保每一列的名称与对应字段的名称完全匹配。 如果列名与表中对应字段的名称不同,导入操作将失败。 要查看字段的名称,请在 Access 的设计视图中打开表。

  3. 关闭源工作簿(如果它是打开的)。 源文件保持打开状态可能会导致在导入操作过程中出现数据转换错误。

准备目标数据库

  1. 打开要在其中存储所导入数据的 Access 数据库。 确保该数据库不是只读的,并且您具有更改该数据库的权限。

    -或-

    如果您不想在任何现有的数据库中存储数据,请创建一个空数据库。 为此,请执行以下操作:

    依次单击“文件”选项卡、“新建”、“空数据库”。

  2. 在开始导入操作之前,请先决定是要将数据存储在新表中还是现有的表中。

    创建新表    如果选择在新表中存储数据,Access 就会创建一个表,并将导入的数据添加到该表。 如果已经存在使用指定名称的表,Access 就会用导入的数据覆盖该表的内容。

    追加到现有的表中    如果选择将数据添加到现有表中,Excel 工作表中的各行将追加到指定的表中。

    请记住,追加操作过程中的大多数失败都是因为源数据与目标表的结构及字段设置不匹配。 要避免这一问题,请在设计视图中打开目标表并查看以下各项:

    • 第一行    如果源工作表或命名区域的第一行不包含列标题,请确保源工作表中的每一列的位置和数据类型与表中对应字段的位置和数据类型匹配。 如果第一行包含列标题,列顺序与字段顺序不必匹配,但每一列的名称及数据类型必须与其对应字段的名称及数据类型完全匹配。

    • 丢失的字段或多余的字段    如果源工作表中一个或多个字段不在目标表中,请在开始导入操作之前添加它们。 不过,如果表中包含了源工作表中不存在的字段,而这些字段接受的是空值,则不需要从表中删除这些字段。

      提示: 如果一个字段的“必填”属性设置为“”,并且它的“有效性规则”属性设置允许空值,则该字段将接受空值。

    • 主键    如果表中包含主键字段,那么源工作表或区域中必须有一列包含与主键字段兼容的值,并且导入的键值必须是唯一的。 如果目标表中现已存在所导入记录中包含的主键值,导入操作将显示错误消息。

    • 索引字段    如果表中字段的“索引”属性设为“是(不允许重复)”,那么源工作表或区域中的对应列必须包含唯一值。

      转至下面的步骤以运行导入操作。

开始导入操作

  1. Access 版本不同,导入/链接向导的位置会略有不同。 选择与你的 Access 版本相匹配的步骤:

    • 如果使用最新版本的 Microsoft 365 、 Access 2021 或 Access 2019,请在“外部数据”选项卡上的“导入 & 链接”组中,单击“从文件 > 新建数据源 > Excel”。

    • 如果使用 Access 2016 ,请在“ 外部数据 ”选项卡上的“ 导入 & 链接 ”组中,单击“ Excel”。

    注意: 除非打开了数据库,否则“外部数据”选项卡不可用。

  2. 在“获取外部数据 - Excel 电子表格”对话框的“文件名”框中,指定要导入的数据所在的 Excel 文件的文件名。

    -或-

    单击“浏览”并使用“文件打开”对话框以找到想要导入的文件。

  3. 指定所导入数据的存储方式。

    要将数据存储在新表中,请选择“将源数据导入当前数据库的新表中”。 稍后会提示您命名该表。

    要将数据追加到现有表中,请选择“向表中追加一份记录的副本”,然后从下拉列表中选择表。 如果数据库不包含任何表,则此选项不可用。

    若要通过创建链接表来链接数据源,请参阅下文中的链接 Excel 中的数据一节。

  4. 单击“确定”。

    “导入电子表格向导”将会启动,并引导您完成整个导入过程。 继续执行下一组步骤。

使用导入电子表格向导

  1. 在向导的第一页上,选择要导入的数据所在的工作表,然后单击“下一步”。

  2. 在向导的第二页,单击“显示工作表”或“显示命名区域”,选择要导入的工作表或命名区域,然后单击“下一步”。

  3. 如果源工作表或区域的第一行包含字段名称,则选择“第一行包含列标题”,然后单击“下一步”。

    如果将数据导入新表中,Access 将使用这些列标题为表中的字段命名。 您可在导入操作过程中或导入操作完成后更改这些名称。 如果将数据追加到现有的表中,请确保源工作表中的列标题完全与目标表中的字段名称相匹配。

    如果将数据追加到现有的表中,请直接转到第 6 步。 如果将数据添加到新表中,请执行其余步骤。

  4. 该向导会提示您查看字段属性。 单击该页下半部分中的某一列即可显示对应字段的属性。 或者,执行下列任一操作:

    • 如果需要,请检查并更改目标字段的名称和数据类型。

      Access 会检查每一列的前八行,以建议对应字段的数据类型。 如果工作表中某一列的前八行包含不同类型的值(如文本和数字),向导会建议使用与列中所有值都兼容的数据类型(最常用的是文本数据类型)。 虽然您可以选择其他数据类型,但请记住,导入过程中将忽略或错误地转换与所选数据类型不兼容的值。 有关如何更正丢失值或错误值的详细信息,请参阅下文中的丢失值或错误值的疑难解答一节。

    • 要在字段上创建索引,请将“索引”设置为“”。

    • 要完全跳过某个源列,请选中“不导入字段(跳过)”复选框。

      选择完选项后,单击“下一步”。

  5. 在向导的下一个屏幕中,指定表的主键。 如果选择“让 Access 添加主键”,则 Access 会将“自动编号”字段添加为目标表中的第一个字段,并且用从 1 开始的唯一 ID 值自动填充它。 单击“下一步”

  6. 在向导的最后一个屏幕中,指定目标表的名称。 在“导入到表”框中,键入表的名称。 如果该表已存在,Access 会显示一条提示信息,询问您是否要覆盖表中现有的内容。 单击“”可继续操作,单击“”可为目标表指定其他名称,然后单击“完成”以导入数据。

    如果 Access 能够导入部分或所有数据,向导将显示一个页面,显示导入操作的状态。 此外,还可以保存操作的详细信息,以供将来作为 规范使用。 相反,如果操作完全失败,Access 将显示消息 :尝试导入文件时出错

  7. 单击“”保存操作的详细信息以供将来使用。 保存详细信息有助于您在以后重复执行该操作,而不必每次都逐步完成向导。

请参阅将导入或导出操作的详细信息另存为规范以了解如何保存规范详细信息。

请参阅运行保存的导入或导出规范,了解如何运行已保存的导入或链接规范。

请参阅计划导入或导出规范,了解如何计划导入和链在特定时间运行接任务。

丢失值或错误值的疑难解答

如果 收到消息 “尝试导入文件时出错”,则导入操作完全失败。 相反,如果导入操作显示一个对话框,提示你保存操作的详细信息,则操作能够导入全部或部分数据。 状态消息还会提到错误日志表的名称,在导入操作过程中发生的所有错误的说明都包含在这个错误日志表中。

重要: 即使状态消息指明操作完全成功,您也应该查看表的内容和结构,确保它们看起来是正确的,之后才能使用该表。

  • 在数据表视图中打开目标表,查看所有数据是否都已添加到表中。

  • 在设计视图中打开该表,查看字段的数据类型及其他属性设置。

下表说明了更正丢失值或错误值时可以采取的步骤。

提示: 在解决结果中出现的问题时,如果发现只是丢失几个值,则可将它们手动添加到表中。 反过来,如果发现整列或大量的值都丢失或未正确导入,则应在源文件中更正问题。 在更正完所有已知问题后,再重新执行导入操作。

问题

解决方法

图形元素

图形元素(如徽标、图表和图片)无法导入。 请在完成导入操作后将它们手动添加到数据库中。

计算值

导入计算列或单元格的结果,但不导入基础公式。 在导入操作过程中,您可以指定与公式结果兼容的数据类型,如“数字值”。

TRUE 或 FALSE 及 -1 或 0 值

如果源工作表或区域中的某一列只包含 TRUE 或 FALSE 值,Access 将为该列创建“是/否”字段并在该字段中插入 -1 或 0 值。 不过,如果源工作表或区域中的某一列只包含 -1 或 0 值,Access 默认为该列创建数字字段。 为避免这一问题,您可在导入操作过程中将该字段的数据类型更改为“是/否”。

多值字段

在将数据导入新表或将数据追加到现有表时,Access 不支持一个字段中包含多个值,即使源列包含由分号 (;) 分隔的值列表时也是如此。 值列表将被视为单个值并放在文本字段中。

截断数据

如果 Access 表中某一列的数据被截断,请尝试在数据表视图中增大该列的宽度。 如果这样不能解决问题,说明 Excel 数字列中的数据过长,超出了 Access 中目标字段的字段大小。 例如,Access 数据库中目标字段的“字段大小”属性可能设为“字节”,但源数据包含大于 255 的值。 请更正源文件中的值,然后重试导入操作。

显示格式

您可能需要在设计视图中设置某些字段的“格式”属性,以确保值能在数据表视图中正确显示。 例如:

  • “是/否”字段在导入操作完成后显示 -1 和 0。 要解决这一问题,请在导入操作完成后,将该字段的“格式”属性设为“是/否”以显示复选框。

  • 长日期和中日期在 Access 中可能显示为短日期。 要解决这一问题,请在 Access 的设计视图中打开目标表,然后将日期字段的“格式”属性设为“长日期”或“中日期”。

注意: 如果源工作表包含 RTF 格式设置(如加粗、下划线、倾斜),则仅导入文本,而所有格式都将丢失。

重复值(键值冲突错误)

您要导入的记录可能会包含重复的值,它们不能存储在目标表的主键字段中,也不能存储在其“索引”属性设置为“是(不允许重复)”的字段中。 请删除源文件中的重复值,然后重试导入操作。

日期值相差 4 年

从 Excel 工作表中导入的日期字段可能与正确值相差 4 年。 Excel for Windows 可以使用两个日期系统:

  • 1904 年日期系统 (,序列号范围为 0 到 63,918) ,对应于 1904 年 1 月 1 日至 2078 年 12 月 31 日的日期。

  • 1900 年日期系统 (,序列号范围为 1 到 65,380) ,对应于 1900 年 1 月 1 日至 2078 年 12 月 31 日的日期。

可以在 Excel 选项中设置日期系统: 文件 > 选项 > 高级 > 使用 1904 日期系统

备注    如果从 .xlsb 工作簿导入,则无论日期系统设置如何,它始终使用 1900 日期系统。

在导入数据之前,请更改 Excel 工作簿的日期系统;或在追加数据后,执行一个使用表达式 [date field name] + 1462 的更新查询,以更正日期。

Excel for the Macintosh 仅使用 1904 日期系统。

空值

导入操作结束时可能出现一条错误消息,指明操作过程中删除或丢失了哪些数据;或者,在数据表视图中打开表时,您可能看到某些字段值为空。 如果没有为 Excel 中的源列设置格式,或者前八个源行包含数据类型不同的值,则打开源工作表并执行以下操作:

  • 为源列设置格式。

  • 移动行,以使每一列的前八行包含数据类型相同的值。

  • 在执行导入操作的过程中,为每个字段选择适当的数据类型。 如果数据类型不正确,那么在导入操作完成后,整列中可能都是空值或错误值。

上述步骤有助于尽量减少出现空值的可能性。 下表列出了仍会出现空值的情况:

所丢失值的类型...

导入的目标位置...

而目标字段类型是...

要解决...

文本

新表

日期

将所有文本值替换为日期值,然后重试导入操作。

文本

现有的表

数字或日期

将所有文本值替换为与目标字段的数据类型匹配的值,然后重试导入操作。

日期值被替换为数字值

在以下情况下,您会看到似乎是随机出现的 5 位数数字而看不到实际日期值:

  • 工作表中源列的前八行只包含数字值,但后面一些行包含日期值。 这些日期值将被错误地转换。

  • 源列前八行的某些行包含日期值,而您尝试将它们导入数字字段。 这些日期值将被错误地转换。

    要避免这一问题,请将源列中的日期值替换为数字值,然后重试导入操作。

    有时,如果所含大部分值均为日期值的列也包含一些文本值,所有日期值似乎看起来都是 5 位数的随机数字。 若要避免这一问题,请将文本值替换为日期值,然后重试导入操作。

数字值被替换为日期值

在以下情况下,您会看到似乎是随机出现的日期值而看不到实际数字值:

  • 源列的前八行只包含日期值,但后面一些行包含数字值。 这些数字值将被错误地转换。

  • 源列前八行的某些行包含数字值,而您尝试将它们导入到日期字段中。 这些数字值将被错误地转换。

要避免这一问题,请将源列中的数字值替换为日期值,然后重试导入操作。

另外,您可能需要在数据表视图中查看向导最后一页中提到的错误日志表。 该表有三个字段:“错误”、“字段”和“行”。 每一行都包含有关一个特定错误的信息,“错误”字段的内容应该有助于您解决问题。

错误字符串和疑难解答提示

错误

说明

字段截断

文件中的值对于该字段的“字段大小”属性设置而言太大。

类型转换失败

工作表中的值不是适合该字段的正确数据类型。 该值在目标字段中可能已丢失或看起来不正确。 有关如何解决此问题的详细信息,请参阅上一个表。

键值冲突

该记录的主键值是一个重复值,它在表中已经存在。 

有效性规则失败

一个值违背了通过使用“有效性规则”属性为该字段或该表设置的规则。

必填字段中的空值

由于本字段的“必填”属性被设置为“”,因此字段值不允许为 null。

“自动编号”字段中的空值

要导入的数据包含一个用户试图追加到“自动编号”字段的值。

不能正确识别的记录

文本值包含文本分隔符(通常为双引号)。 当值中含有分隔字符时,该字符在文本文件中必须重复两次,例如:

4 1/2"" 直径

返回页首

有关链接表中 #Num! 及其他错误值的疑难解答

即使显示消息“完成链接表”,您也应该在数据表视图中打开表,确保所有行列显示的数据都是正确的。

如果在表中任何地方发现错误或不正确的数据,则按下表中的说明采取纠正措施,然后重试链接操作。 请记住,因为链接表是只读的,所以不能直接在表中添加值。

问题

解决方法

图形元素

无法在 Access 中链接到 Excel 工作表内的图形元素,如徽标、图表和图片。

显示格式

您可能需要在设计视图中设置某些字段的“格式”属性,以确保值能在数据表视图中正确显示。

计算值

计算列或单元格的结果能在对应字段中显示,但您不能在 Access 中查看公式(或表达式)。

截断文本值

在数据表视图中增大列的宽度。 如果仍然不能看到整个值,原因可能是值的长度超过了 255 个字符。 Access 只能链接前 255 个字符,因此应该导入数据,而不应链接数据。

错误消息“数字字段溢出”

链接表可能看起来是正确的,但稍后当您对该表运行查询时,将出现错误消息“数字字段溢出”。 这是由于链接表中某字段的数据类型与该字段中存储的数据类型发生冲突造成的。

TRUE 或 FALSE 及 -1 或 0 值

如果源工作表或区域中的某一列只包含 TRUE 或 FALSE 值,Access 将在链接表中为该列创建“是/否”字段。 不过,如果源工作表或区域中的某一列只包含 -1 或 0 值,Access 默认为该列创建数字字段,并且您不能更改链接表中对应字段的数据类型。 如果需要链接表中存在“是/否”字段,应确保源列包含 TRUE 和 FALSE 值。

多值字段

Access 不提供对一个字段中包含多个值的支持,即使源列包含由分号 (;) 分隔的值列表时也如此。 值列表将被视为单个值并放在文本字段中。

#Num!

在以下情况中, Access 会显示 #Num! 错误值而不显示实际数据:

  • 如果源列中的大部分值均为文本值,其余小部分值为数字值或日期值,则不导入数字值和日期值。

  • 如果源列中的大部分值均为数字值,其余小部分值为文本值,则不导入文本值。

  • 如果源列中的大部分值均为日期值,其余小部分值为文本值,则不导入文本值。

请执行以下操作,以尽量减少表中出现空值的地方:

  1. 确保源列中所有值的数据类型完全相同。

  2. 为 Excel 工作表中的列设置格式。

  3. 在链接操作过程中,为每个字段选择正确的数据类型。 如果数据类型不正确,对于所有的数据行, 结果列中可能都只包含 #Num! 值。

日期值被替换为数字值

如果在字段中看到似乎是随机出现的 5 位数数字,请检查源列中的大部分值是否均为数字值,但同时也包含少量日期值。 出现在数字值列中的日期值不能正确地转换为数字。 请将日期值替换为数字值,然后重试链接操作。

数字值被替换为日期值

如果在字段中看到似乎是随机出现的日期值,请检查源列中的大部分值是否都为日期值,但同时也包含少量数字值。 出现在日期列中的数字值不能正确地转换为日期。 请将数字值替换为日期值,然后重试链接操作。

返回页首

需要更多帮助?

需要更多选项?

了解订阅权益、浏览培训课程、了解如何保护设备等。

社区可帮助你提出和回答问题、提供反馈,并听取经验丰富专家的意见。