有没有办法以编程方式(使用宏)在calc open office中附加文件(.txt)?

时间:2012-06-20 11:49:57

标签: macros openoffice.org openoffice-calc openoffice-basic

我有一个.txt文件,我需要在我的工作表的一列中附加,我有这个文件的路径。 所以我需要读取此路径并以编程方式将该文件附加到另一列中。有办法吗?

提前感谢。

1 个答案:

答案 0 :(得分:0)

确实有!通过使用宏来使用它很容易。

启用宏

转到工具>选项菜单,然后单击 OpenOffice.org 下的安全部分。在那里,单击宏安全性按钮。现在,在安全级别选项卡上,确保您的设置允许您运行宏。

我的设置很低,因为我是我运行的所有宏的作者,如果你不确定这是你的情况,你可能想要使用更高的设置。

注意:小心,如果你不幸或生活在90年代,邪恶的宏会造成严重的伤害!


制作新的广告

现在您可以运行它们,您必须创建一个新宏。 OpenOffice接受各种语言,包括Python,但由于你没有指定任何语言,我将在这里使用OO的基本版本。

转到工具>宏>组织宏> OpenOffice.org Basic ,并在文件树下添加一个新模块。给它一个有意义的名字。

New


实际的宏

创建新模块后,将弹出编辑器屏幕,请在下面编写以下代码:

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上并运行宏。您可以通过多种方式运行宏,出于测试目的,只需使用您用于创建模块的同一窗口上的“运行”按钮。这是预期的结果:

Expected results

注意:如果您不熟悉linux,请不要被该文件路径吓倒,这就是它们在linux上的方式。这与Windows及其文件路径结构的工作原理相同。


进一步改善宏

我编写了上面的代码,目的是让它尽可能容易理解,因此宏有很大的改进空间,例如:

  • 能够显示在多列/单列/其他内容上检索的数据

从文件中检索数据后,您几乎可以在任何方式将其显示在电子表格中。如果您最初的预期方式没有得到解决,请告诉我,我会编辑答案。

  • 每次要更新数据时都必须重新运行宏。

这很容易解决。有许多方法可以自动执行宏执行,我最熟悉的方法是让它在一个循环上运行,结合延迟,比如5秒,并在文件加载后立即启动。

Sub Main
    Do While True
        DataFromFile()
        Wait(5000)
    Loop
End Sub

从现在开始,你应该调用Main子而不是DataFromFile。

要在启动时运行宏,请转到工具>在事件选项卡上自定义,然后从列表中选择打开文档,然后单击按钮。在选择宏的对话框中,选择 Main 。现在关闭文档,重新打开它,瞧!

  • 使用单元格范围

如果您命名单元格范围并使用其名称而不是其绝对地址,则更容易保留代码并对其进行更改。要命名范围(或单个单元格),您必须先选择它,然后单击数据>定义范围为其命名,例如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