TransferText 错误地将 "FS###" 之类的字符串导入为货币
TransferText incorrectly imports strings like "FS###" as Currency
我正在使用 VBA DoCmd.TransferText
命令将数据从 CSV 文本文件导入到我的 Access 数据库中的新 table。我遇到 运行 一个问题,其中某些文件的前三列中的文本数据被导入为货币。我不知道发生了什么。
Here 是一个测试数据库以及一个正确导入的 CSV (VollintineLines.csv) ...
PipeID,UpstreamMH,DownstreamMH,Diameter,GISLength,Status
WS010353S,WS010353,WS010163,36,227.1984614,Fully Surveyed as Phase Work
WS011155S,WS011155,WS011154,8,418.5435318,Not Surveyed
WS011154S,WS011154,WS011153,8,303.9618911,Fully Surveyed as Phase Work
... 还有一个没有 (CourtLines.csv)。
PipeID,UpstreamMH,DownstreamMH,Diameter,GISLength,Status
FS020628S,FS020628,FS020462,10,278.72,Not Surveyed
FS020463S-1,FS020463,FS020462,12,248.39,Not Surveyed
FS020216S,FS020216,FS020215,12,227.53,Fully Surveyed as Phase Work
(请忽略数据库中未命名的对象,只是想弄清楚这里发生了什么,我没有费心去命名。)
这是导入代码,您必须启用 Microsoft Office 16.0 Object Library Reference。
Private Sub Command0_Click()
Dim Path As FileDialog
Dim FileName As Variant
DoCmd.SetWarnings False
DoCmd.Hourglass True
Set Path = Application.FileDialog(msoFileDialogFilePicker)
With Path
.AllowMultiSelect = False
.Title = "Select your File"
.Filters.Add "All Files", "*.*"
If .Show = -1 Then
For Each FileName In .SelectedItems
DoCmd.TransferText acImportDelim, , "TempPipeData", FileName, True
Next FileName
Else
MsgBox "No File Selected to Import."
End If
End With
DoCmd.SetWarnings True
DoCmd.Hourglass False
End Sub
您显然遇到了一个影响 TransferText
不使用导入规范的调用的相当模糊的错误。 (在另一个网站上也有讨论 here。)
解决方法包括:
- 使用 this answer 中所述的导入规范。
- 首先创建 table,指定所需的列类型(在本例中为
Text
),然后从 CSV 文件导入现有(空)table。
- 如果以上两个选项都不理想,那么您可以使用 COM 自动化来
- 启动 Excel、
的实例
- Excel 打开 CSV 文件,
- 将其保存为 XLS 或 XLSX,
- 在Access VBA中使用
TransferSpreadsheet
导入Excel数据,然后
- 删除临时 XLS[X] 文件。
我正在使用 VBA DoCmd.TransferText
命令将数据从 CSV 文本文件导入到我的 Access 数据库中的新 table。我遇到 运行 一个问题,其中某些文件的前三列中的文本数据被导入为货币。我不知道发生了什么。
Here 是一个测试数据库以及一个正确导入的 CSV (VollintineLines.csv) ...
PipeID,UpstreamMH,DownstreamMH,Diameter,GISLength,Status
WS010353S,WS010353,WS010163,36,227.1984614,Fully Surveyed as Phase Work
WS011155S,WS011155,WS011154,8,418.5435318,Not Surveyed
WS011154S,WS011154,WS011153,8,303.9618911,Fully Surveyed as Phase Work
... 还有一个没有 (CourtLines.csv)。
PipeID,UpstreamMH,DownstreamMH,Diameter,GISLength,Status
FS020628S,FS020628,FS020462,10,278.72,Not Surveyed
FS020463S-1,FS020463,FS020462,12,248.39,Not Surveyed
FS020216S,FS020216,FS020215,12,227.53,Fully Surveyed as Phase Work
(请忽略数据库中未命名的对象,只是想弄清楚这里发生了什么,我没有费心去命名。)
这是导入代码,您必须启用 Microsoft Office 16.0 Object Library Reference。
Private Sub Command0_Click()
Dim Path As FileDialog
Dim FileName As Variant
DoCmd.SetWarnings False
DoCmd.Hourglass True
Set Path = Application.FileDialog(msoFileDialogFilePicker)
With Path
.AllowMultiSelect = False
.Title = "Select your File"
.Filters.Add "All Files", "*.*"
If .Show = -1 Then
For Each FileName In .SelectedItems
DoCmd.TransferText acImportDelim, , "TempPipeData", FileName, True
Next FileName
Else
MsgBox "No File Selected to Import."
End If
End With
DoCmd.SetWarnings True
DoCmd.Hourglass False
End Sub
您显然遇到了一个影响 TransferText
不使用导入规范的调用的相当模糊的错误。 (在另一个网站上也有讨论 here。)
解决方法包括:
- 使用 this answer 中所述的导入规范。
- 首先创建 table,指定所需的列类型(在本例中为
Text
),然后从 CSV 文件导入现有(空)table。 - 如果以上两个选项都不理想,那么您可以使用 COM 自动化来
- 启动 Excel、 的实例
- Excel 打开 CSV 文件,
- 将其保存为 XLS 或 XLSX,
- 在Access VBA中使用
TransferSpreadsheet
导入Excel数据,然后 - 删除临时 XLS[X] 文件。