- サマリ: マクロを使ってファイルを保存したいのですが
- 環境: Calc
- 状態: 解決
- 投稿者: クロッピ?
- 投稿日: 2010-03-30 (火) 19:51:46
質問 
A1のセルの数値データをファイル名に使用して、csvファイルで保存したいのですが
マクロの記録で名前を付けて保存のダイアログからファイル名の所にペーストしてやるとうまく保存が出来ません。いい保存方法のマクロを教えてください。よろしくお願いします。
回答 
Sub StoreAsCSV
oDoc = ThisComponent
If oDoc.supportsService("com.sun.star.sheet.SpreadsheetDocument") Then
oSheet = oDoc.getSheets().getByIndex(0)
sDir = "/home/asuka/Desktop/"
sFileName = oSheet.getCellByPosition(0, 0).getString()
sFileURL = ConvertToURL(sDir & sFileName & ".csv")
Dim aArgs(1) As New com.sun.star.beans.PropertyValue
aArgs(0).Name = "FilterName"
aArgs(0).Value = "Text - txt - csv (StarCalc)"
aArgs(1).Name = "FilterOptions"
aArgs(1).Value = "44,34,76,1,2/1/1/1/1"
oDoc.storeToURL(sFileURL, aArgs)
End If
End Sub
- 早速のご回答ありがとうございます -- クロッピ
- oDoc.storeToURL(sFileURL, aArgs) この行でエラーが出るのとマクロを実行した際にJREのエラーが出てマクロが使えない状態になりました。自分が使用しているのがマクロの記録からの物で内容もかなり違っており正直全く分からない状態です。マクロの記録から出来たコードを書いたら見てもらえますか? -- クロッピ
- 利用している OOo のバージョンはいくつでしょうか?最近のバージョンでは JRE のエラーが出ないようになっているような気がします。記録されたマクロは API を利用しているというよりも GUI で操作しているときのメニューなどコマンドを記録したもので、上記のようなコードとかなり性質が異なります。マクロの記録だけでは記録される機能の制限以外でもあまり複雑なことはできません。記録されたマクロは見ても仕方ないのですが (記録に制限があるので)、長くなければ・・・。 -- はにゃ?
- すみません、何から何まで素人でこのページに添付ファイル付けてしまいました。最初のコピーまでは正しく実行されているようです。args4(0).Value = "file:///F:/%E5%80%A4%E6%9C%AD%E5%8D%B0%E5%88%B7/MANA.csv"この行にA1のデーターがは入ればいいのですが、ここからは無理かなと思っております。バージョンは3.2.0で最新のものだと思います。Basic覚えたいのですがその時間もなくて・・。よろしくお願い致します。
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| | dispatcher.executeDispatch(document, ".uno:Copy", "", 0, Array())
dim args4(2) as new com.sun.star.beans.PropertyValue
args4(0).Name = "URL"
args4(0).Value = "file:///F:/%E5%80%A4%E6%9C%AD%E5%8D%B0%E5%88%B7/MANA.csv"
args4(1).Name = "FilterName"
args4(1).Value = "Text - txt - csv (StarCalc)"
args4(2).Name = "FilterOptions"
args4(2).Value = "44,34,60,1"
dispatcher.executeDispatch(document, ".uno:SaveAs", "", 0, args4())
dispatcher.executeDispatch(document, ".uno:EditDoc", "", 0, Array())
|
oDoc = ThisComponent
oActiveSheet = oDoc.getCurrentController().getActiveSheet()
sFileName = oActiveSheet.getCellByPosition(0, 0).getString()
sFileURL = "file:///F:/%E5%80%A4%E6%9C%AD%E5%8D%B0%E5%88%B7/" & sFileName & ".csv"
' ...
args4(0).Value = sFileURL
OpenOffice.org の API を使えるようになるにはマクロの記録をさっさとあきらめるのが手です。言語は Basic でなくとも Python や Java なども利用できますし。 -- はにゃ?
- ご指導ありがとうございます。とりあえず組み合わせて・・は使えませんでした。当方の勉強不足です。PythonやJavaを一度勉強してみます。ありがとうございました。 -- クロッピ
- なんか余分なカッコが付いてましたが。元のコードのファイル URL がエンコードされた形になっているのでこうかな。
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
| | dispatcher.executeDispatch(document, ".uno:Copy", "", 0, Array())
oDoc = ThisComponent
oActiveSheet = oDoc.getCurrentController().getActiveSheet()
sFileName = oActiveSheet.getCellByPosition(0, 0).getString()
sFileURL = ConvertToURL(ConvertFromURL("file:///F:/%E5%80%A4%E6%9C%AD%E5%8D%B0%E5%88%B7/") & sFileName & ".csv")
dim args4(2) as new com.sun.star.beans.PropertyValue
args4(0).Name = "URL"
args4(0).Value = sFileURL
args4(1).Name = "FilterName"
args4(1).Value = "Text - txt - csv (StarCalc)"
args4(2).Name = "FilterOptions"
args4(2).Value = "44,34,60,1"
dispatcher.executeDispatch(document, ".uno:SaveAs", "", 0, args4())
dispatcher.executeDispatch(document, ".uno:EditDoc", "", 0, Array())
|
- 今回はばっちり解決しました!本当にありがとうございました。Pythonも調べたのですが蛇の絵が印象に残っただけで勉強するには時間が無い~状態でしたから、助かりました。今回の物で手を加えて他にも使えそうですから、後は何とかなりそうです!感謝しております! -- クロッピ
感想,コメント,メモ 