有没有办法以编程方式(使用宏)在 calc open office 中附加文件(.txt)?
Posted
技术标签:
【中文标题】有没有办法以编程方式(使用宏)在 calc open office 中附加文件(.txt)?【英文标题】:Is there a way to attach a file (.txt) in calc open office programmatically (using macro)? 【发布时间】:2012-06-20 11:49:56 【问题描述】:我有一个 .txt 文件,我需要将它附加到工作表的一列中,并且我有该文件的路径。 所以我需要读取这个路径并以编程方式将文件附加到另一列中。有办法吗?
提前致谢。
【问题讨论】:
【参考方案1】:确实有!并且通过使用宏很容易做到。
启用宏
转到工具>选项菜单并单击OpenOffice.org下的安全部分。在那里,单击 Macro Security 按钮。现在在安全级别选项卡上,确保您的设置允许您运行宏。
我的设置很低,因为我是我运行的所有宏的作者,如果您不确定这是否适合您的情况,您可能需要使用更高的设置。
注意:小心,如果你运气不好或生活在 90 年代,一个邪恶的宏可能会造成严重的伤害!
创建新宏
现在您可以运行它们,您必须创建一个新宏。 OpenOffice 接受包括 Python 在内的多种语言,但由于您没有指定任何语言,因此我将在此处使用 OO 的基本版本。
转到工具 > 宏 > 组织宏 > OpenOffice.org Basic,然后在文件树下添加一个新模块。给它一个有意义的名字。
实际的宏
创建新模块后,编辑器屏幕将弹出,在下面编写以下代码:
Sub DataFromFile
Dim FileNo As Integer
Dim CurrentLine As String
Dim File As String
Dim Msg as String
Dim I as Integer
' Get the filename from the cell, in this case B1.
currentSheet=ThisComponent.CurrentController.ActiveSheet
fileName = currentSheet.getCellRangeByName("B1").getString
' Create a new file handler and open it for reading
FileNo = FreeFile
Open fileName For Input As #FileNo
I = 0
' Read file until EOF is reached
Do While not eof(FileNo)
' Read line
Line Input #FileNo, CurrentLine
' Define the range to put the data in as A4:A999 '
curentCell = currentSheet.getCellRangeByName("A4:A999").getCellByPosition(0,I)
' Select the I-th cell on the defined range and put a line of the file there
curentCell.String = CurrentLine
'Increase I by one
I = I + 1
Loop
Close #FileNo
End Sub
要对其进行测试,只需创建一个文本文件并在其中放入一些内容,然后将其路径放在单元格 B1 上并运行宏。您可以通过多种方式运行宏,出于测试目的,只需使用用于创建模块的同一窗口上的“运行”按钮。这是预期的结果:
注意:如果您不熟悉 linux,请不要被那个文件路径吓倒,这就是它们在 linux 上的样子。这与 Windows 及其文件路径结构相同。
进一步改进宏
我写上面的代码的目的是让它尽可能容易理解,因此宏有很大的改进空间,例如:
能够在多列/单列/其他方面显示检索到的数据从文件中检索数据后,您几乎可以以任何您想要的方式将其显示在电子表格中。如果您最初想要的方式没有得到解决,请告诉我,我将编辑答案。
每次想要更新数据时都必须重新运行宏。这很容易解决。有很多方法可以自动执行宏,我最熟悉的一种方法是让它在循环中运行,同时延迟 5 秒,并在文件加载后立即启动。
Sub Main
Do While True
DataFromFile()
Wait(5000)
Loop
End Sub
从现在开始,您应该调用 Main sub 而不是 DataFromFile。
要让宏在启动时运行,请转到 Events 选项卡上的 Tools > Customize 并从列表中选择 Open Document 然后点击宏按钮。在选择宏的对话框中,选择 Main。现在关闭文档,重新打开它,瞧!
使用单元格范围如果您命名单元格区域并使用它们的名称而不是它们的绝对地址,则更容易保留您的代码并对其进行更改。要命名一个范围(或单个单元格),您必须先选择它,然后单击 Data > Define Range 为其命名,例如 B1 可以称为 'FilePath' 和 A4:A999 可以称为 'DataRange'。这样,如果您需要更改它们,您不必更改宏,只需更改定义的范围名称。
不要忘记更新代码以查找范围而不是地址,例如这段代码:
getCellRangeByName("A4:A999")
将被重写为
getCellRangeByName("DataRange")
错误检查
检查和处理错误或意外事件是个好主意。如果文件不存在怎么办?如果大于定义的范围怎么办?
进一步阅读
Official reference regarding files for OpenOffice Basic macros.
A guide on different ways to run a macro
A great introduction to macro programming
【讨论】:
以上是关于有没有办法以编程方式(使用宏)在 calc open office 中附加文件(.txt)?的主要内容,如果未能解决你的问题,请参考以下文章
以编程方式确定 Excel 文件 (.xls) 是不是包含宏
在 OpenOffice Calc 中以编程方式更改打印区域