OOobbs3/36
質問
こちらで勉強させて頂いている初心者です。 現在、ダイアログ形式でのファイル指定可能な CSV読込みタイプの帳票作成に挑んでおります。 少しずつ進めて、新規フレームに内容を吐く事には成功したのですが、 そこで手詰まりしてしまいました。。。 狙っている結果としましては、 イベントをキックしたメインのシートの帳票レイアウトに沿って、 開始位置指定で値を埋め込んでいきたいのですが、 うまくいかず手詰まり状態になってしまています。 方法についてご助言頂けたら非常に助かります。 宜しくお願いします。 <以下 作成中のコード> Sub CsvInputButton_Click Dim oFilePicker As Object Dim nDlgResult As Integer Dim sFiles() As String Dim sFilename As String Dim sFilepath As String Dim aFileProperties(1) As New com.sun.star.beans.PropertyValue Dim csvLine As String 'dialogs.FilePicker でダイアログが使える oFilePicker = createUnoService("com.sun.star.ui.dialogs.FilePicker") ' 保存するダイアログの場合、このように設定 'oFilePicker.initialize(Array(com.sun.star.ui.dialogs.TemplateDescription.FILESAVE_SIMPLE)) ' ダイアログの初期化 oFilePicker.appendFilter( "CSVファイル (*.csv)", "*.csv" ) oFilePicker.setCurrentFilter( "CSVファイル (*.csv)" ) 'If(G_OptionID = 1) Then ' oFilePicker.setDefaultName("SearchResultList.csv") 'End If oFilePicker.setTitle("取込みファイルの指定") 'ダイアログ表示 nDlgResult = oFilePicker.execute() ' 開く(OK)が押された場合は、1が返される IF nDlgResult <> 1 Then 'キャンセル押下 Exit Sub END IF sFiles() = oFilePicker.getFiles() sFilename = sFiles(0) msgbox sFilename sFilepath = ConvertFromURL( sFilename) msgbox sFilepath aFileProperties(0).Name = "FilterName" aFileProperties(0).Value = "Text - txt - csv (StarCalc)" aFileProperties(1).Name = "FilterOptions" '【①区切り文字】カンマ:44、タブ:9、セミコロン:59、スペース:32 '【②引用符】ダブルクォート:34、シングルクォート:39、無し:省略 '【③文字コード】OS標準:0、Unicode(UTF-16):65535、UTF-7:75、 ' UTF-8:76、EUC-JP:69、ISO-2022-JP:72、Shift_JIS:64 '【④データ開始行】 '【⑤以降、列ごとの書式】標準は1、文字列は2、MDY形式の日付は3、 ' DMY形式の日付は4、YMD形式の日付は5、無視する(読み込まない)列は9 aFileProperties(1).Value = _ "44,34,0,29,1/9/2/9/3/9/4/9/5/9/6/9/7/9/8/9/9/9/10/9/" StarDesktop.loadComponentFromURL(ConvertToUrl(sFilepath), "_blank", 0, aFileProperties()) 回答
Sub insertAtCsv oDoc = ThisComponent oAreaLInks = oDoc.AreaLinks aCellAddr = CreateUnoStruct("com.sun.star.table.CellAddress") With aCellAddr .Sheet = 0 .Column = 1 .Row = 2 End With sURL = "file:///home/asuka/Desktop/out.csv" ' リンクを作成 oAreaLInks.insertAtPosition(aCellAddr, sURL, "A1:G10", _ "Text - txt - csv (StarCalc)", "44,34,0,1,1") ' 作成したリンクを削除 nIndex = oAreaLInks.getCount() - 1 oAreaLInks.removeByIndex(nIndex) End Sub insertAtPosition メソッドの引数は次のとおりです。
挿入 - 外部へリンクで CSV ファイルを選択すると範囲が選択できずに挿入できませんが、API から行う場合には上記のように適当にセル範囲を指定してやると挿入できます。 リンク先が CSV ファイルの場合には名前付き範囲やデータベース範囲がありません。一方で、セル範囲アドレスでの指定は行えます。このときに指定するアドレスは CSV ファイル内のデータ範囲より大きくても構いません。CSV ファイルのデータに無い範囲のセルは空に上書きされます。
早速のご回答、ありがとうございます。 ファイルのリンクを行う事に関してはばっちりでした。 ありがとうございます。 しかし、設定の仕方が悪いのか、全角文字の項目が文字化けしてしまいます。 oAreaLInks.insertAtPosition(aCellAddr, sURL, "A1:G10", _ "Text - txt - csv (StarCalc)", "44,34,0,1,1") 頂いたサンプルコードでは"44,34,0,1,1"部分でいう”0”部分が文字コードかと思い、 いろいろと変更して試してみたのですがダメでした。 フィルタオプション設定値は、loadComponentFromURL()とは別物なのでしょうか。。。 あと、ド素人質問で申し訳ないのですが、リンクしたデータを貼付時点で開始位置だけではなく、 指定セル埋め込みにする事は、出来ないですよね・・・?(汗) 一旦、一時シート的な所にご教授頂いたリンク形式で貼り付けたものを取得しなおし、 貼り付けるような方法でいけるのか?と仮定して調べてみようと思っておるところです。 重ね重ねで申し訳ありませんが、宜しくお願いしますm(__)m
感想,コメント,メモ
|