如何打开保存文件对话框并通过在 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:打开文件与保存文件