Openoffice Calc макрос для сохранения CSV - PullRequest
1 голос
/ 23 августа 2009

Дано: я записал простой макрос в 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 .

Я хорошо умею сопоставлять регулярные выражения, я просто ищу подсказки о конкатенации строк, как получить текущее имя файла и как написать выражение регулярного выражения в макросе.

Кстати, как называется этот язык!?

1 Ответ

1 голос
/ 24 августа 2009

Это решение, которое я предложил, чтобы помочь в экспорте CSV (с моими параметрами экспорта, настройкой имени файла и местоположением файла) одним щелчком мыши.
Я на Mac, поэтому пути к файлам будут для такой операционной системы. Информация, которая помогла мне сделать это, здесь .

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)

Наконец, в этом посте подробно рассказывается, как добавить кнопку панели инструментов для запуска макроса одним щелчком мыши.

...