用于 CSV 保存的 openoffice calc 宏

Posted

技术标签:

【中文标题】用于 CSV 保存的 openoffice calc 宏【英文标题】:openoffice calc macro for CSV saving 【发布时间】:2009-08-23 17:52:59 【问题描述】:

鉴于:我在 Openoffice 中录制了一个简单的宏,以将我的工作表保存为 CSV 文件。这里是。

sub toCSV
dim document   as object
dim dispatcher as object
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
dim args1(2) as new com.sun.star.beans.PropertyValue
args1(0).Name = "URL"
args1(0).Value = "file:///path/csv/filename.csv"
args1(1).Name = "FilterName"
args1(1).Value = "Text - txt - csv (StarCalc)"
args1(2).Name = "FilterOptions"
args1(2).Value = "59,34,76,1"
dispatcher.executeDispatch(document, ".uno:SaveAs", "", 0, args1())
end sub

问题:我想为这个函数添加一些特性。 1. 我需要获取当前的 XLS 文件名,以便将其放在静态路径的末尾。所以 file:///path/csv/ 将始终保持不变,而 filename.csv 将来自 filename.xls。 2. 好吧,我需要对该 filename-revision01.xls 进行一些正则表达式替换,以最终获得 filename.csv

我可以很好地进行正则表达式匹配,我只是在寻找关于字符串连接、如何获取当前文件名以及如何在宏中编写正则表达式的提示。

顺便说一句,这种语言叫什么!?

【问题讨论】:

该语言称为 VBA - Visual Basic for Applications。 【参考方案1】:

这是我想出的帮助一键导出 CSV(带有我的导出选项、文件名调整和文件位置)的解决方案。 我在 Mac 上,所以文件路径将用于这样的操作系统。帮助我做到这一点的信息是here。

REM  *****  BASIC  *****
sub toCSV
dim document   as object
dim dispatcher as object
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
FileURL = ThisComponent.URL
oMasterScriptProviderFactory = createUnoService("com.sun.star.script.provider.MasterScriptProviderFactory")
oMasterScriptProvider = oMasterScriptProviderFactory.createScriptProvider("")
oScriptReplace = oMasterScriptProvider.getScript("vnd.sun.star.script:Tools.Regex.js?language=javascript&location=user")
sReturn = RegExpReplace(oScriptReplace, FileURL, "(.*)/(\w*-\w*)(-revision\d*)+\.xls", "i", "$2.csv")
dim args1(2) as new com.sun.star.beans.PropertyValue
args1(0).Name = "URL"
args1(0).Value = "file:///Users/joe/Documents/mydocuments/trunk/my%20projects/dictionary/verbsXLS/proofed/csv/" + sReturn
args1(1).Name = "FilterName"
args1(1).Value = "Text - txt - csv (StarCalc)"
args1(2).Name = "FilterOptions"
args1(2).Value = "59,34,76,1"
dispatcher.executeDispatch(document, ".uno:SaveAs", "", 0, args1())
end sub

function RegExpReplace(oScriptReplace as Object, sSource as String, sRegExp as String, sGlobUpcase as String, sReplace as String) as String
RegExpReplace = oScriptReplace.invoke(Array(sSource, sRegExp, sGlobUpcase, sReplace ), Array(), Array())
end function

这是上述宏所依赖的一些 javascript。此文件名为 ~/Library/Application\ Support/OpenOffice.org/3/user/Scripts/javascript/Tools/Regex.js 并在上面进行了硬编码和引用。

sSource     = String(ARGUMENTS[0])
sRegExp     = String(ARGUMENTS[1])
sGlobUpcase = (ARGUMENTS[2])
sReplace    = String(ARGUMENTS[3])
myRe   = new RegExp(sRegExp, sGlobUpcase)
ret = sSource.replace(myRe, sReplace)

最后,this post 详细介绍了如何添加工具栏按钮以一键运行宏。

【讨论】:

以上是关于用于 CSV 保存的 openoffice calc 宏的主要内容,如果未能解决你的问题,请参考以下文章

Openoffice-calc 无法更改列的日期格式

在 Linux 中编写 Openoffice 脚本

FasterCSV 格式错误

如何从命令行对 OpenOffice/LibreOffice 电子表格运行 sql 查询?

使用 OpenOffice Calc 打开 Excel 文件并转换为 CSV 或制表符分隔

Openoffice 中是不是可以实现单词自动化