Top > OOobbs > 110

OOobbs/110 Edit

  • サマリ: ThisComponent のメソッド storeToURL() について
  • 環境: Calc
  • 状態: 解決
  • 投稿者: まつ?
  • 投稿日: 2006-09-04 (月) 20:42:26

質問 Edit

Calc Basic で、UnicodeのCSVファイルを吐き出すマクロを作成しようと思いました。 調べてみたところ、ThisComponentにstoreToURL()という、エクスポート関数があったのでこれを使ってみました。 サンプルなどを発見し、以下のようなコードを書きました。

Dim args(1) As New com.sun.star.beans.PropertyValue
args(0).Name = "FilterName"
args(0).Value = "Text - txt - csv (StarCalc)"
args(1).Name = "FilterFlags"
args(1).Value = "UTF8"
ThisComponent.storeToURL("file:///c:\temp\test.txt", args())

実行してみると、storeToURL()の処理で

BASIC ランタイムエラー
例外が発生しました
Type : com.sun.star.task.ErrorCodeIOExeption Message.

というエラーが発生してしまいます。 原因が分からないので、何か情報がありましたらよろしくお願いします。 ちなみに、最終的にはUTF-16で出力する予定です。 名称の文字列が分からないので、現在はUTF8にしてあるだけです。

回答 Edit

  • エラーは最後の行の保存場所の指定のせいで発生しているようです。

パスの区切りは "\" ではなく "/" を使用してください。

"\" を利用したい場合には,

ConvertToUrl("c:\temp\test.txt")

で変換してやると

file:///c:/temp/test.txt

このような方法もあります。

  • はにゃ?? 2006-09-05 (火) 00:03:03
  • UTF-16 で保存するには,
args(1).Name = "FilterFlags"
args(1).Value = "44,34,655535"

とすることで保存メニューから文字コードとして Unicode を選択して CSV ファイルに保存した場合と同じになります。保存したファイルを UTF-16 を見ることが出来るエディタでは utf16le-bom:crlf となっていました。

FilterFlags は古いらしいので,代わりに FilterOptions を使ってください。今のところは動作に問題はありません。

args(1).Value = "44,34,655535"

は,順にコンマで区切って

  1. セパレータ,区切り文字を ASCII 値で指定します。44: comma
  2. テキストのかこみ文字を ASCII 値で指定。34: double quote
  3. 文字列の文字コード。
  4. 変換する開始行
  5. 変換の際のフィールドのフォーマット指定

文字コードの指定は三番目に行っていますが,ここは以前から不明だった点でしたが,655535 を指定することで Unicode として保存できることが分かりました。そのほか,

Unicode: 65535
UTF-8: 76
UTF-7: 75
EUC-JP: 69
Shift_JIS: 64
ISO-2022-JP: 72

5番目に指定する部分に関しては必要であれば Developer's Guide 8.2.2 を参照してください。

最終的に,

Sub Main
Dim oDoc As Object
  oDoc = ThisComponent
  Dim args(1) As New com.sun.star.beans.PropertyValue
  args(0).Name = "FilterName"
  args(0).Value = "Text - txt - csv (StarCalc)"
  args(1).Name = "FilterOptions"
  args(1).Value = "44,34,65535"

  oDoc.storeToURL(ConvertToUrl("c:\temp\text.txt"),args())
End Sub
  • はにゃ?? 2006-09-05 (火) 02:03:56
  • 目的のファイルが出力できるようになりました。丁寧なご回答、どうもありがとうございました。 -- まつ? 2006-09-05 (火) 10:06:29


Reload   New Lower page making Edit Freeze Diff Upload Copy Rename   Front page List of pages Search Recent changes Backup   Help   RSS of recent changes