none
CSVファイルをEXCELへのインポートをVBでの制御 RRS feed

  • 質問

  • CSVファイルをEXCELへインポートする作業をVBで制御したいのですが
    TextFileColumnDataTypes に何を指定してよいかわかりません
    VBAでは
    TextFileColumnDataTypes =Array(1,2,・・・)
    と記述するようですが、VBではArrayは型なので式での使用ができません
    そこで
    TextFileColumnDataTypes =(1,2,・・・)と記述すると
    当然エラーになります。
    VBから当マクロを制御するには右辺には何を記述するのでしょうか?
    2009年7月19日 11:04

回答

  • こんなかんじ

    ''' <summary>CSVファイルをExcelで開く</summary>
    ''' <param name="csvPath">CSVファイルのパス</param>
    ''' <returns>開いたファイルのパス</returns>
    Private Function OpenCsvExcel(ByVal csvPath As String) As String
        Dim xla As Object
        Dim wbs As Object
        xla = CreateObject("Excel.Application")
        xla.Visible = True
        wbs = xla.Workbooks
    
        Dim arrays As Object
        Dim arrayItems(1) As Object
    
        arrayItems(0) = New Object() {1, 9} 'Microsoft.Office.Interop.Excel.XlColumnDataType.xlSkipColumn = 9
        arrayItems(1) = New Object() {2, 1} 'Microsoft.Office.Interop.Excel.XlColumnDataType.xlGeneralFormat = 1
        arrays = arrayItems
    
        'array = New Object() {New Object() {1, 9}, New Object() {2, 1}} 'これでもいい
    
        Dim filePath As String = csvPath
        If (String.Equals(System.IO.Path.GetExtension(csvPath), ".csv", StringComparison.OrdinalIgnoreCase)) Then
            '拡張子がCSVだとFieldInfoが使えないので一時ファイルにコピーして開く
            filePath = System.IO.Path.GetTempFileName()
            System.IO.File.Copy(csvPath, filePath, True)
        End If
    
        Try
            wbs.OpenText(filePath, FieldInfo:=arrays, Comma:=True, DataType:=1) 'Excel.XlTextParsingType.xlDelimited = 1
        Finally
            System.Runtime.InteropServices.Marshal.ReleaseComObject(wbs)
            System.Runtime.InteropServices.Marshal.ReleaseComObject(xla)
        End Try
    
        Return filePath
    End Function
    2009年7月21日 9:58
  • gekkaさん
    いつもお世話になってます。
    サンプルコードのご投稿、ありがとうございました。

    小耳朗さん
    初めまして。MSDNフォーラムのご利用ありがとうございます。
    gekkaさんからアドバイスを頂いたのですが、如何でしょうか?
    実現したい機能はできましたか?(^-^)

    今回、gekkaさんから頂いた情報が、有用なものだと思いましたので、
    回答マークを付けさせて頂きました。
    まだ解決していない、もしくは不適切と思いましたら
    回答マークを削除することも可能です。

    今後ともMSDNフォーラムをよろしくお願いします。


    マイクロソフト株式会社 フォーラム オペレータ 高橋春樹
    • 回答としてマーク 小耳朗 2009年9月25日 10:45
    2009年7月31日 9:17

すべての返信

  • こんなかんじ

    ''' <summary>CSVファイルをExcelで開く</summary>
    ''' <param name="csvPath">CSVファイルのパス</param>
    ''' <returns>開いたファイルのパス</returns>
    Private Function OpenCsvExcel(ByVal csvPath As String) As String
        Dim xla As Object
        Dim wbs As Object
        xla = CreateObject("Excel.Application")
        xla.Visible = True
        wbs = xla.Workbooks
    
        Dim arrays As Object
        Dim arrayItems(1) As Object
    
        arrayItems(0) = New Object() {1, 9} 'Microsoft.Office.Interop.Excel.XlColumnDataType.xlSkipColumn = 9
        arrayItems(1) = New Object() {2, 1} 'Microsoft.Office.Interop.Excel.XlColumnDataType.xlGeneralFormat = 1
        arrays = arrayItems
    
        'array = New Object() {New Object() {1, 9}, New Object() {2, 1}} 'これでもいい
    
        Dim filePath As String = csvPath
        If (String.Equals(System.IO.Path.GetExtension(csvPath), ".csv", StringComparison.OrdinalIgnoreCase)) Then
            '拡張子がCSVだとFieldInfoが使えないので一時ファイルにコピーして開く
            filePath = System.IO.Path.GetTempFileName()
            System.IO.File.Copy(csvPath, filePath, True)
        End If
    
        Try
            wbs.OpenText(filePath, FieldInfo:=arrays, Comma:=True, DataType:=1) 'Excel.XlTextParsingType.xlDelimited = 1
        Finally
            System.Runtime.InteropServices.Marshal.ReleaseComObject(wbs)
            System.Runtime.InteropServices.Marshal.ReleaseComObject(xla)
        End Try
    
        Return filePath
    End Function
    2009年7月21日 9:58
  • gekkaさん
    いつもお世話になってます。
    サンプルコードのご投稿、ありがとうございました。

    小耳朗さん
    初めまして。MSDNフォーラムのご利用ありがとうございます。
    gekkaさんからアドバイスを頂いたのですが、如何でしょうか?
    実現したい機能はできましたか?(^-^)

    今回、gekkaさんから頂いた情報が、有用なものだと思いましたので、
    回答マークを付けさせて頂きました。
    まだ解決していない、もしくは不適切と思いましたら
    回答マークを削除することも可能です。

    今後ともMSDNフォーラムをよろしくお願いします。


    マイクロソフト株式会社 フォーラム オペレータ 高橋春樹
    • 回答としてマーク 小耳朗 2009年9月25日 10:45
    2009年7月31日 9:17