我偶尔会收到固定宽度格式的文件。我需要将它们导入 Excel,但 Excel 无法完美地选择列。我每次都可以使用文本导入向导手动完成,但我想知道是否有办法创建“文本导入模板”或类似的东西 - 因为这些文件总是相同的格式。
答案1
如果您在打开文件时录制宏(工具 - 宏 - 录制新宏),您将获得使用 OpenText 方法所需的参数。以下是示例
Workbooks.OpenText Filename:= _
"C:\Documents and Settings\dick\My Documents\actsynclog.txt", Origin:=437, _
StartRow:=1, DataType:=xlFixedWidth, FieldInfo:=Array(Array(0, 1), Array(8, _
1), Array(31, 1), Array(41, 1), Array(57, 1), Array(77, 1), Array(80, 1), Array(82, 1), _
Array(84, 1), Array(86, 1)), TrailingMinusNumbers:=True
FieldInfo 参数是您关心的参数。它是一个二维数组。第一个元素是列,第二个元素是数据类型。此示例将文本文件拆分为以下列:0、8、31、41、57、77、80、82、84 和 86。
有了它,您就可以编写一个宏来打开文本文件。请参阅 Application 对象的 GetOpenFileName 方法以了解如何选择要打开的文件。
答案2
在 Excel 中,可以保存文本导入设置(作为“模板”),并在以后将其重新用于任何文本文件。Excel MVP Jan Karel Pieterse 的一篇博客文章对此进行了详细描述: http://blogs.office.com/2010/06/10/importing-text-files-in-an-excel-sheet/
完成“文本导入向导”后,将自动创建“文本导入模板”。请确保保存工作簿以保留“模板”。
要将其与另一个(或同一个)文本文件一起重复使用:
- 单击工作表内包含(用于包含)上次导入的数据的任意单元格。
-
- Excel 2007/2010:单击数据 -> 刷新全部下拉菜单 -> 刷新
- Excel 2003 及更早版本:单击数据 -> 刷新数据
如果您使用此“模板”始终导入相同名称和位置的文件,则可以自定义“模板”,以便 Excel 不会在您每次点击“刷新”按钮时提示您输入文件名。
在文本导入期间,单击“导入数据”对话框中的“属性...”,然后在“外部数据范围属性”对话框中取消勾选“刷新时提示文件名”。您也可以稍后在“连接属性”对话框中编辑该选项。
我会发布截图,但“需要至少 10 点声誉才能发布图片”。
答案3
如果你对编程很在行Perl
,
那么电子表格支持模块写入Excel。
我之前曾用过这个来做你想要的相反的事情——将 Excel 文件转换为 CSV 格式,
我曾经用过ReadExcel
这个。
看看WriteExcel
此处链接中的示例和有关该问题的 XLS 到 CSV 的其他参考资料,您可能会在两者之间找到适合您的方法。