我试图将Excel工作表导入Access表,并且工作表具有特定日期(例如12/4/2017)作为列的标题。
当我尝试导入Access时,Access不允许我将该工作表导入到表中,因为" 12/4/2017不是有效的字段名称"
是否有其他方法可以导入工作表或解决此问题?
谢谢
答案 0 :(得分:2)
字段名称,控件和& Access中的对象:
最长可达64个字符。
可以包含字母,数字,空格和特殊字符的任意组合 除 期间(
.
),感叹号 (!
),重音坟墓(``
)或括号([ ]
)。不能以前导空格开头。
不能包含控制字符(ASCII值0到31)。
在Microsoft Access项目中的表,视图或存储过程名称中不能包含双引号(&#34;)。 <子>(Source)子>
Excel中的日期和时间值在内部存储为64位浮点数。小数点 左 的值表示 自 1899年12月30日以来的天数。小数点的 右 的值表示自午夜以来的一天的分数。
例如:
12:00 Noon
存储为0.5
。
1.0
代表 1900年1月1日午夜。
2.25
代表 1900年1月2日上午6:00 。
您的示例日期12/4/2017
将存储为43073
。
对datetime的解释取决于Microsoft的区域设置的自定义(不是必然是国家/地区government standard date format)。例如,我居住在北美,因此默认情况下,Excel会将12/4/2017
解释为日期。
但是,出于各种原因,我更喜欢YYYY-MM-DD
的日期格式(技术上命名为&#34; ISO 8601
&#34;),因此我changed我的Windows中的格式设置。因此,当我输入12/4/2017
时,Excel无法将其识别为日期,因此将 存储为文本 ,但是当我输入2017-12-4
时,Excel知道将 存储为日期 。
除了区域设置,我怀疑您的字段名称可能附加了次(即使它们没有被格式化以显示为这样)。
如果您要用作字段名称的单元格实际包含:
April 12, 2017 6:00 AM
,如果格式为M/D/YYYY
,&#34;隐藏&#34;时间,显示为:
12/4/2017
即使它实际上存储在内部:
43073.25
鉴于Access字段名称不能包含句点(见上文),Access变得困惑&#34;只有一天的一小部分(.25
)。
你可以:
将字段名称为 text 的行格式化。
Format Cells
。Number
标签下,选择Text
使用函数删除时间:
如果B1
包含您希望在A1
中用作字段名称的日期时间,则可以使用单元格A1
中的Int function(以舍入值向下到一个整数):
=Int(B1)
除去分数(时间),但该值仍然存储为数字/日期。
使用函数将日期时间转换为文本:
如果B1
包含您要在A1
中用作字段名称的日期,则可以使用单元格A1
中的Text function:
=Text(B1, "M/D/YYYY HH:MM")
正如您在图片中看到的那样,如果格式正确,Access允许我将日期用作字段名称:
TechRepublic:Techniques for successfully importing Excel data into Access
Office.com:Guidelines for naming fields, controls, and objects
ExcelTactics:The Definitive Guide to Using Dates and Times in Excel
Microsoft:How to use dates and times in Excel
Stack Overflow:MS Access - Date as Table Field Name
仅仅因为你 可以 使用日期作为字段名称,这并不意味着你 。通常认为数据库设计不佳,因此字段名称如此具体。
也许您打算将结构不良的数据导入 fix 这个问题,但如果没有,您应该考虑以更有条理的方式存储数据,这有利于数据库扩展和正常化。
如果您的数据具有特定于日期的字段名称:
...然后日期应作为记录的一部分添加,而不是作为字段名称添加:
......虽然这还没有正常化。规范化是关于优化效率和允许扩展,因此数据库可能设置得更像:
使用这种方法可以实现数据库扩展,数据分析更合乎逻辑(也许可以更容易地找到简的令人不安的饮食习惯)。
唉,我离题了。网上有很多关于数据库规范化的信息,以适应任何经验水平。
ThoughtCo:Database Normalization Basics
Stack Overflow:Database normalization - who's right?
您没有提及您使用哪种方法将数据从Excel导入Access,这可能是相关的(因为有几种可能的组合)。如果您的Excel数据保存在XLSM
vs XLS
vs CSV
等,Access可能会以不同方式处理源数据。可以使用New Source Data
导入数据... {{1接口,vs编程与VBA,甚至其他语言。因此,如果您无法使用一种方法(日期格式化为特定方式),请尝试使用其他组合之一。
为简单起见,我将内置界面from File
用于XLSM
。结果如下所示:
请注意,即使 我在标题中包含了一些时间(并且可以无时间地工作),因为它们已正确格式化为文本和 { {1}} 已被选中。