如何打开保存文件对话框并通过在 libreoffice 中写入字符串来保存文件。下面的代码是在 VBA 中

Posted

技术标签:

【中文标题】如何打开保存文件对话框并通过在 libreoffice 中写入字符串来保存文件。下面的代码是在 VBA 中【英文标题】:How to open a save file dialogue box and save the file by writing a string into it in libreoffice.Below code is in VBA 【发布时间】:2014-09-24 16:04:24 【问题描述】:

当我在 libreoffice 中运行以下 vba 代码时出现以下错误

BASIC 运行时错误。 '423' 获取保存文件名

' Comment Code starts from here    

Sub Buildyaml()   
     Dim yaml as string          
      yaml = "Hello World"  
  Dim vFile As Variant  

'opening the save as box

        vFile = Application.GetSaveAsFilename(InitialFileName:=Sheets("SIMPLE").Cells(2, 2) & "_config.yaml", _
        FileFilter:="YAML Config File (*.yaml), *.xlsb, All files (*.*), *.*", _
        Title:="Save Config File As:")
        If vFile <> False Then
            Call saveFile(vFile, yaml)
            MsgBox ("File Saved")
        End If
    End Sub

保存到文件

Sub saveFile(fileName As Variant, content As String)
    Dim fso As Object
    Set fso = CreateObject("Scripting.FileSystemObject")   
    Dim oFile As Object       
    Set oFile = fso.CreateTextFile(fileName)            
    oFile.WriteLine content
    oFile.Close            
    Set fso = Nothing
    Set oFile = Nothing
End Sub

【问题讨论】:

【参考方案1】:

这应该是与您的 VBA 宏等效的 libreoffice calc。

sub Buildyaml()

 dim yaml as string
 yaml = "Hello World"

 dim aDialogTyp(0)
 aDialogTyp(0) = com.sun.star.ui.dialogs.TemplateDescription.FILESAVE_AUTOEXTENSION

 oDialog=createunoservice("com.sun.star.ui.dialogs.FilePicker")
 oDialog.initialize(aDialogTyp())
 oDialog.appendFilter("YAML Config File (*.yaml)","*.yaml")
 oDialog.appendFilter("All files (*.*)","*.*")
 oDialog.setTitle("Save Config File As:")

 oDialog.execute
 if ubound(oDialog.Files) < 0 then 
  sFileName =""
 else 
  sFileName=oDialog.Files(0)
 end if
 sFiltername=oDialog.CurrentFilter
 if sFilename <> "" then
  call saveFile(sFilename, yaml)
  MsgBox "File Saved"
 end if
end sub

sub saveFile(sfileName as string, sContent as string)
 oSimpleFileAccess = createUNOService ("com.sun.star.ucb.SimpleFileAccess")
 oOutputStream = createUNOService ("com.sun.star.io.TextOutputStream")
 oOutputStream.setOutputStream(oSimpleFileAccess.openFileWrite(sFileName))
 oOutputStream.writeString(sContent)
end sub

将文件以固定文件名保存在计算文档所在的路径中:

sub Buildyaml2()

 dim yaml as string
 yaml = "Hello World"

 GlobalScope.BasicLibraries.loadLibrary("Tools")
 sPath=DirectoryNameoutofPath(ThisComponent.getURL(), "/")
 sFileName = "test.yaml"

 call saveFile(sPath & "/" & sFilename, yaml)
 MsgBox "File Saved"

end sub

问候

阿克塞尔

【讨论】:

你是一个救生员。非常感谢 嗨 Axel,我如何修改上述代码以将此文件保存到 excel 所在的当前目录和硬编码名称。我不想要提示。只想将文件保存在当前目录并具有特定名称。我在 VBA 中知道 thisworkbook.path,它为您提供了工作簿路径,很想知道如何编写上面的代码来做到这一点。任何帮助是极大的赞赏。谢谢 请参阅我的答案中的示例。 运行您提供的代码时出现以下错误。 BASIC 运行时错误。 '35' 保存文件 那么sub saveFile(sfileName as string, sContent as string) 不存在。这个子是必需的,和以前一样。

以上是关于如何打开保存文件对话框并通过在 libreoffice 中写入字符串来保存文件。下面的代码是在 VBA 中的主要内容,如果未能解决你的问题,请参考以下文章

C# OpenFileDialog和SaveFileDialog:打开文件与保存文件

纯文本文档如何转换成excel工作表

如何制作excel模板并保存使用?

如何在没有保存/打开对话框的情况下将文件从服务器下载到客户端机器到浏览器中设置的默认文件夹中?

怎么把dll文件导入注册表

在没有提示的情况下保存当前打开的文件