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

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

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

提前致谢。

最佳答案

确实有!并且通过使用宏很容易做到。

启用宏

转到“工具”>“选项”菜单,然后单击 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 sub 而不是 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

    关于macros - 有没有办法以编程方式(使用宏)在 calc open office 中附加文件(.txt)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11118893/

    相关文章:

    c - 使用scanf设置宏

    c - linux内核宏如何用作函数?

    excel - 如何使 vba 代码与 libre office 兼容

    excel - 在 OpenOffice Calc/Excel 中格式化 #N/A

    regex - 正则表达式提取括号中的数据

    c++ - 宏和多行注释

    python - 将 pyuno 与我现有的 python 安装一起使用

    java - 如何从 Open Office 电子表格中获取值?

    openoffice-calc - 开放式办公室排序 - 月份和年份

    c++ - 从宏函数中获取错误值