注意
Microsoft Access 不支持导入应用了敏感度标签的 Excel 数据。 作为解决方法,您可以在导入之前删除标签,然后在导入后重新应用标签。 有关详细信息,请参阅 在 Office 中将敏感度标签应用于文件和电子邮件。
本文介绍如何将数据从 Excel 移动到 Access,以及如何将数据转换为关系表,以便可以同时使用 Microsoft Excel 和 Access。 总之,Access 最适合用于捕获、存储、查询和共享数据,而 Excel 最适合用于计算、分析和可视化数据。
两篇文章“ 使用 Access 或 Excel 管理数据 ”和 将 Access 与 Excel 结合使用的 10 大理由讨论了哪个程序最适合特定任务,以及如何将 Excel 和 Access 结合使用来创建实用的解决方案。
将数据从 Excel 移动到 Access 时,该过程有三个基本步骤。
注意
有关 Access 中的数据建模和关系的信息,请参阅 数据库设计基础知识。
步骤 1:将数据从 Excel 导入 Access
如果您花一些时间准备和清理数据,导入数据的操作会更加顺利。 导入数据就像搬到新家一样。 如果您在搬家前清理和整理您的物品,那么在新家安顿下来会容易得多。
导入前清理数据
在将数据导入 Access 之前,在 Excel 中建议执行以下操作:
- 将包含非原子数据 ((即一个单元格) 中的多个值)的单元格转换为多个列。 例如,“技能”列中包含多个技能值(如“C# 编程”、“VBA 编程”和“Web 设计”)的单元格应分解为单独的列,每个列只包含一个技能值。
- 使用 TRIM 命令删除前导、尾随和多个嵌入空格。
- 删除非打印字符。
- 查找并修复拼写和标点错误。
- 删除重复行或重复字段。
- 确保数据列不包含混合格式,尤其是格式为文本的数字或格式为数字的日期。
有关详细信息,请参阅以下 Excel 帮助主题:
注意
如果您的数据清理需求很复杂,或者您没有时间或资源自行自动化该过程,您可以考虑使用第三方供应商。 有关更多信息,请在 Web 浏览器中通过您喜欢的搜索引擎搜索“数据清理软件”或“数据质量”。
导入时选择最佳数据类型
在 Access 中执行导入操作期间,你应做出正确的选择,以便很少收到需要手动干预的 () 转换错误。 下表总结了将数据从 Excel 导入 Access 时 Excel 数字格式和 Access 数据类型的转换方式,并提供了有关在导入电子表格向导中选择的最佳数据类型的一些提示。
| Excel 数字格式 | Access 数据类型 | 批注 | 最佳做法 |
|---|---|---|---|
| 文本 | 文本、备忘录 | Access 文本数据类型最多存储 255 个字符的字母数字数据。 Access Memo 数据类型最多可存储 65,535 个字符的字母数字数据。 | 选择“ 备忘录 ”以避免截断任何数据。 |
| 数字、百分比、分数、科学数 | 数字 | Access 有一种“数字”数据类型,该数据类型根据“字段大小”属性而变化, (字节、整数、长整数、单精度、双精度、十进制) 。 | 选择 双倍 以避免任何数据转换错误。 |
| 日期 | 日期 | Access 和 Excel 都使用相同的序列日期编号来存储日期。 在 Access 中,日期范围较大:从公元 100 年 1 月 1 日 (-657434 ) 到公元 9999 年 12 月 31 日 (2958465 ) 。 由于 Access 无法识别 Excel for the Macintosh) 中使用的 1904 年日期系统 (因此,您需要在 Excel 或 Access 中转换日期以避免混淆。 有关详细信息,请参阅 更改日期系统、格式或两位数年份解释 和 导入或链接 Excel 工作簿中的数据。 |
选择 “日期”。 |
| 时间 | 时间 | Access 和 Excel 都使用相同的数据类型存储时间值。 | 选择 “时间”,这通常是默认值。 |
| 货币,记帐 | 货币 | 在 Access 中,货币数据类型将数据存储为 8 字节数字,精度为小数点后四位,用于存储财务数据和防止对值进行舍入。 | 选择 货币,这通常是默认值。 |
| 布尔 | 是/否 | Access 将 -1 用于所有 Yes 值,将 0 用于所有 No 值,而 Excel 将 1 用于所有 TRUE 值,将 0 用于所有 FALSE 值。 | 选择 “是/否”,这将自动转换基础值。 |
| 超链接 | 超链接 | Excel 和 Access 中的超链接包含可单击并关注的 URL 或 Web 地址。 | 选择 “超链接”,否则默认情况下,Access 可能使用“文本”数据类型。 |
数据位于 Access 中后,可以删除 Excel 数据。 在删除原始 Excel 工作簿之前,请不要忘记先备份它。
有关详细信息,请参阅 Access 帮助主题 :导入或链接 Excel 工作簿中的数据。
以简单的方式自动追加数据
Excel 用户遇到的一个常见问题是将具有相同列的数据附加到一个大型工作表中。 例如,你可能有一个资产跟踪解决方案,该解决方案最初是在 Excel 中开始的,但现在已发展到包含来自多个工作组和部门的文件。 此数据可能位于不同的工作表和工作簿中,也可能位于作为来自其他系统的数据源的文本文件中。 Excel 中没有用户界面命令或追加类似数据的简单方法。
最佳解决方案是使用 Access,在这里,你可以使用导入电子表格向导轻松地将数据导入并追加到一个表中。 此外,您可以将大量数据附加到一个表中。 可以保存导入操作,将它们添加为计划的 Microsoft Outlook 任务,甚至可以使用宏自动执行该过程。
步骤 2:使用表分析器向导规范化数据
乍一看,逐步完成数据规范化过程似乎是一项艰巨的任务。 幸运的是,在 Access 中规范化表的过程要简单得多,这要归功于表分析器向导。
1. 将所选列拖动到新表并自动创建关系
2. 使用按钮命令重命名表、添加主键、将现有列设为主键以及撤消上一个操作
可以使用此向导执行下列操作:
- 将表转换为一组较小的表,并在表之间自动创建主键和外键关系。
- 向包含唯一值的现有字段添加主键,或创建使用“自动编号”数据类型的新 ID 字段。
- 自动创建关系,以通过级联更新实施参照完整性。 不会自动添加级联删除以防止意外删除数据,但您可以稍后轻松添加级联删除。
- 在新表中搜索冗余或重复的数据 (例如,同一客户) 两个不同的电话号码,并根据需要进行更新。
- 备份原始表,并通过在其名称后附加“_OLD”来重命名它。 然后,创建一个查询,使用原始表名称重建原始表,以便基于原始表的任何现有窗体或报表都可以使用新表结构。
有关详细信息,请参阅 使用表分析器规范化数据。
步骤 3:连接到 Access Excel 中的数据
在 Access 中规范化数据并创建重构原始数据的查询或表后,只需从 Excel 连接到 Access 数据即可。 数据现在作为外部数据源在 Access 中,因此可以通过数据连接连接到工作簿,数据连接是用于查找、登录和访问外部数据源的信息容器。 连接信息存储在工作簿中,也可以存储在连接文件中,例如 Office 数据连接 (ODC) 文件 (.odc 文件扩展名) 或数据源名称文件 (.dsn 扩展名) 。 连接到外部数据后,每当在 Access 中更新数据时,你还可以通过 Access 自动刷新 (或更新 Excel 工作簿) 。
有关详细信息,请参阅从外部数据源导入数据 (Power Query) 。
将数据导入 Access
本节介绍规范化数据的以下阶段:将 Salesperson 和 Address 列中的值分解为最原子的部分,将相关主题划分到各自的表中,将这些表从 Excel 复制并粘贴到 Access,在新创建的 Access 表之间创建键关系,以及在 Access 中创建和运行简单查询以返回信息。
非规范化形式的示例数据
以下工作表中的“销售人员”列和“地址”列包含非原子值。 这两列都应拆分为两列或多列。 此工作表还包含有关销售人员、产品、客户和订单的信息。 这些信息也应按主题进一步拆分为单独的表。
| 销售人员 | 订单 ID | 订单日期 | 产品 ID | 数量 | 价格 | Customer Name | 地址 | 手机 |
|---|---|---|---|---|---|---|---|---|
| 李,耶鲁 | 2349 | 3/4/09 | C-789 | 3 | $7.00 | Fourth Coffee | 7007 Cornell St Redmond, WA 98199 | 425-555-0201 |
| 李,耶鲁 | 2349 | 3/4/09 | C-795 | 6 | $9.75 | Fourth Coffee | 7007 Cornell St Redmond, WA 98199 | 425-555-0201 |
| Adams, Ellen | 2350 | 3/4/09 | A-2275 | 2 | $16.75 | 嘉元实业 | 1025 Columbia Circle 柯克兰, WA 98234 | 425-555-0185 |
| Adams, Ellen | 2350 | 3/4/09 | F-198 | 6 | $5.25 | 嘉元实业 | 1025 Columbia Circle 柯克兰, WA 98234 | 425-555-0185 |
| Adams, Ellen | 2350 | 3/4/09 | B-205 | 1 | $4.50 | 嘉元实业 | 1025 Columbia Circle 柯克兰, WA 98234 | 425-555-0185 |
| Hance, Jim | 2351 | 3/4/09 | C-795 | 6 | $9.75 | 康拓工程有限公司 | 2302 Harvard Ave Bellevue, WA 98227 | 425-555-0222 |
| Hance, Jim | 2352 | 3/5/09 | A-2275 | 2 | $16.75 | 嘉元实业 | 1025 Columbia Circle 柯克兰, WA 98234 | 425-555-0185 |
| Hance, Jim | 2352 | 3/5/09 | D-4420 | 3 | $7.25 | 嘉元实业 | 1025 Columbia Circle 柯克兰, WA 98234 | 425-555-0185 |
| Koch, Reed | 2353 | 3/7/09 | A-2275 | 6 | $16.75 | Fourth Coffee | 7007 Cornell St Redmond, WA 98199 | 425-555-0201 |
| Koch, Reed | 2353 | 3/7/09 | C-789 | 5 | $7.00 | Fourth Coffee | 7007 Cornell St Redmond, WA 98199 | 425-555-0201 |
最小部分的信息:原子数据
处理本示例中的数据,可以使用 Excel 中的 “文本到列 ”命令将单元格 (的“原子”部分(如街道地址、城市、州和邮政编码)) 分隔到离散的列中。
下表显示了同一工作表中的新列被拆分以使所有值都成为原子之后。 请注意,销售人员列中的信息已拆分为姓氏和名字列,地址列中的信息已拆分为街道地址、城市、州和邮政编码列。 此数据为“第一范式”。
| 姓氏 | 名字 | 街道地址 | 城市 | 状态 | 邮政编码 |
|---|---|---|---|---|---|
| Li | 耶鲁大学 | 2302 Harvard Ave | Bellevue | WA | 98227 |
| 亚当斯 | Ellen | 1025 Columbia Circle | 柯克兰 | WA | 98234 |
| 增强 | 米申 | 2302 Harvard Ave | Bellevue | WA | 98227 |
| Koch | Reed | 7007 Cornell St Redmond | 雷德蒙德 | WA | 98199 |
在 Excel 中将数据分解为有条理的主题
下面的几个示例数据表显示了 Excel 工作表中相同的信息,这些信息被拆分为销售人员、产品、客户和订单表。 表格设计不是最终的,但它已经走在正确的轨道上。
“销售人员”表仅包含有关销售人员的信息。 请注意,每个记录都有一个唯一的 ID (销售人员 ID) 。 “销售人员 ID”值将在“订单”表中使用,以将订单连接到销售人员。
| 销售人员 | ||
|---|---|---|
| 销售人员 ID | 姓氏 | 名字 |
| 101 | Li | 耶鲁大学 |
| 103 | 亚当斯 | Ellen |
| 105 | 增强 | 米申 |
| 107 | Koch | Reed |
“产品”表仅包含有关产品的信息。 请注意,每条记录都有一个唯一的 ID (产品 ID) 。 “产品 ID”值用于将产品信息连接到“订单详细信息”表。
| 产品 | |
|---|---|
| 产品 ID | 价格 |
| A-2275 | 16.75 |
| B-205 | 4.50 |
| C-789 | 7.00 |
| C-795 | 9.75 |
| D-4420 | 7.25 |
| F-198 | 5.25 |
“客户”表仅包含有关客户的信息。 请注意,每条记录都有一个唯一的 ID (客户 ID) 。 “客户 ID”值用于将客户信息连接到“订单”表。
| 客户 | ||||||
|---|---|---|---|---|---|---|
| 客户 ID | 名称 | 街道地址 | 城市 | 状态 | 邮政编码 | 手机 |
| 1001 | 康拓工程有限公司 | 2302 Harvard Ave | Bellevue | WA | 98227 | 425-555-0222 |
| 1003 | 嘉元实业 | 1025 Columbia Circle | 柯克兰 | WA | 98234 | 425-555-0185 |
| 1005 | Fourth Coffee | 7007 Cornell St | 雷德蒙德 | WA | 98199 | 425-555-0201 |
“订单”表包含有关订单、销售人员、客户和产品的信息。 请注意,每条记录都有一个唯一的 ID (订单 ID) 。 需要将此表中的一些信息拆分到一个包含订单详细信息的其他表中,以便“订单”表仅包含四列 — 唯一订单 ID、订单日期、销售人员 ID 和客户 ID。 此处显示的表尚未拆分为 Order Details 表。
| 订单 | |||||
|---|---|---|---|---|---|
| 订单 ID | 订单日期 | 销售人员 ID | 客户 ID | 产品 ID | 数量 |
| 2349 | 3/4/09 | 101 | 1005 | C-789 | 3 |
| 2349 | 3/4/09 | 101 | 1005 | C-795 | 6 |
| 2350 | 3/4/09 | 103 | 1003 | A-2275 | 2 |
| 2350 | 3/4/09 | 103 | 1003 | F-198 | 6 |
| 2350 | 3/4/09 | 103 | 1003 | B-205 | 1 |
| 2351 | 3/4/09 | 105 | 1001 | C-795 | 6 |
| 2352 | 3/5/09 | 105 | 1003 | A-2275 | 2 |
| 2352 | 3/5/09 | 105 | 1003 | D-4420 | 3 |
| 2353 | 3/7/09 | 107 | 1005 | A-2275 | 6 |
| 2353 | 3/7/09 | 107 | 1005 | C-789 | 5 |
订单详细信息(如产品 ID 和数量)将移出“订单”表并存储在名为“订单详细信息”的表中。 请记住,有 9 个订单,因此此表中有 9 条记录是有道理的。 请注意,“订单”表具有一个 (“订单 ID) ”的唯一 ID,它将在“订单详细信息”表中引用。
Orders 表的最终设计应如下所示:
| 订单 | |||
|---|---|---|---|
| 订单 ID | 订单日期 | 销售人员 ID | 客户 ID |
| 2349 | 3/4/09 | 101 | 1005 |
| 2350 | 3/4/09 | 103 | 1003 |
| 2351 | 3/4/09 | 105 | 1001 |
| 2352 | 3/5/09 | 105 | 1003 |
| 2353 | 3/7/09 | 107 | 1005 |
“订单详细信息”表不包含需要唯一值的列 (也就是说,没有主键) ,因此任何或所有列都可包含“冗余”数据。 但是,此表中不应有两条记录完全相同 (此规则适用于数据库) 中的任何表。 在此表中,应有 17 条记录 — 每条记录对应于单个订单中的产品。 例如,在订单 2349 中,三个 C-789 产品构成了整个订单的两个部分之一。
因此,“订单详细信息”表应如下所示:
| 订单详细信息 | ||
|---|---|---|
| 订单 ID | 产品 ID | 数量 |
| 2349 | C-789 | 3 |
| 2349 | C-795 | 6 |
| 2350 | A-2275 | 2 |
| 2350 | F-198 | 6 |
| 2350 | B-205 | 1 |
| 2351 | C-795 | 6 |
| 2352 | A-2275 | 2 |
| 2352 | D-4420 | 3 |
| 2353 | A-2275 | 6 |
| 2353 | C-789 | 5 |
将 Excel 中的数据复制并粘贴到 Access 中
现在,有关销售人员、客户、产品、订单和订单详细信息的信息已在 Excel 中划分为单独的主题,可以直接将这些数据复制到 Access 中,将其复制为表格。
在 Access 表之间创建关系并运行查询
将数据移动到 Access 后,可以在表之间创建关系,然后创建查询以返回与各种主题有关的信息。 例如,可以创建一个查询,返回在 09/3/05 到 09/3/8 之间输入的订单的订单 ID 和销售人员姓名。
此外,您还可以创建表单和报告,以使数据输入和销售分析更加容易。
需要更多帮助吗?
你随时可以在 Excel 技术社区 中咨询专家,或在 社区中获取支持。