vba - 在 vba 中手动创建制表符分隔的文本文件
问题描述
我正在尝试在 Access 中使用 vba 创建制表符分隔的文本文件。这个文件本质上是从表中读取数据,并且在文件的开头有一些文本字符串。这样做的目的是创建一个可以在另一个软件 (Autodesk Revit) 中读取的共享参数文本文件
我遇到的问题是我导出的似乎不是制表符分隔的文件。我可以通过尝试将其导入 excel 来测试它,它不会将其识别为制表符分隔的文件。
下面的片段显示了我编写的代码。运行它然后尝试在 Excel 中导入,表明它不是作为制表符分隔的文件读取的。为方便起见,我已经注释掉了读取数据库的部分,因为它与实际问题无关。
Public Function ExportRevitSharedParameterFile()
Dim rst As DAO.Recordset
Dim header As String
Dim metaHeader As String
Dim groupHeader As String
Dim paramHeader As String
Dim metaData As String
Dim groupData As String
Dim paramData As String
header = "# This is a Revit shared parameter file." & vbCrLf & "# Do not edit manually."
metaHeader = "*META" & vbTab & "VERSION" & vbTab & "MINVERSION"
groupHeader = "*GROUP" & vbTab & "ID" & vbTab & "NAME"
paramHeader = "*PARAM" & vbTab & "GUID" & vbTab & "NAME" & vbTab & "DATATYPE" & vbTab & "DATACATEGORY" & vbTab & "GROUP" & vbTab & "VISIBLE" & vbTab & "DESCRIPTION" & vbTab & "USERMODIFIABLE"
Set fs = CreateObject("Scripting.FileSystemObject")
' This path may need to be changed to an appropriate location with permission access
Set a = fs.CreateTextFile("C:\sp.txt", True, True)
a.WriteLine (header)
a.WriteLine (metaHeader)
metaData = "META" & vbTab & "2" & vbTab & "1"
a.WriteLine (metaData)
a.WriteLine (groupHeader)
'Write some data from an access table
'Set rst = CurrentDb.OpenRecordset("SP File - Groups", dbOpenSnapshot)
'Do While Not rst.EOF
' groupData = "GROUP" & vbTab & rst![Group ID] & vbTab & rst![Group Name]
' a.WriteLine (groupData)
' rst.MoveNext
'Loop
'rst.Close
'Set rst = Nothing
a.WriteLine (paramHeader)
'Write some data from an access table
'Set rst = CurrentDb.OpenRecordset("SP File - Parameters", dbOpenSnapshot)
'Do While Not rst.EOF
' paramData = "PARAM" & vbTab & rst![Parameter GUID] & vbTab & rst!Name & vbTab & rst![Revit Type] & vbTab & "" & vbTab & rst![Group ID] & vbTab & "1" & vbTab & "" & vbTab & "1"
' a.WriteLine (paramData)
' rst.MoveNext
'Loop
'rst.Close
'Set rst = Nothing
a.Close
End Function
对此的任何帮助将不胜感激。我显然缺少一些关于如何创建制表符分隔文件的信息。
解决方案
“常规”制表符分隔值 (TSV) 文件如下所示,列数恒定:
+------+------+------+
| Col1 | Col2 | Col3 |
+------+------+------+
| Data | Data | Data |
| Data | Data | Data |
+------+------+------+
您的文件以其中没有 TAB 的两行开头:
header = "# This is a Revit shared parameter file." & vbCrLf & "# Do not edit manually."
在确定文本文件的结构时,Excel 会查看前几行(我认为是 5 或 10 行)和扩展名。在您的情况下,该文件被识别为“纯文本”。
为了使 Excel 将您的文件识别为 TSV,请尝试以下操作:
- 删除前两行
和/或
- 将其重命名
.txt
为.tsv
Excel 可能仍然不喜欢具有不同列数的不同块(META / GROUP / PARAM)的事实。
但真正的测试当然是:目标软件(Autodesk)是否可以使用该文件?
推荐阅读
- python - `matplotlib.patches.PathPatch` 以数据单位(不是点)给出的线宽
- android - 如何将地图列表作为初始值传递给flutter_form_builder包中的FormBuilderFilterChip?
- set - 无法刷新 nftable 元素的集合
- css - NativeScript:如何在不硬编码宽度和高度的情况下使用 css 制作方形按钮
- java - 如何在 jdk-14 和 Chrome 中运行小程序?
- python - 如何使用 tkinter 在列表中不显示重复项
- python - 增量创建非常大的图像?
- python - Selenium Webdriver 在 xblock 中找不到元素
- wordpress - 在 WooCommerce 结帐中设置计费公司时如何降低运费
- powershell - Get-CimInstance -ClassName Win32_bios, Win32_operatingsystem,?