LoadTextFileRangeメソッドでファイルパスを指定してファイルを開くと、そのファイルが開かれたままになる

文書番号 : 39205     文書種別 : 不具合     登録日 : 2015/12/04     最終更新日 : 2016/02/12
文書を印刷する
対象製品
SPREAD for Windows Forms 7.0J
状況
修正済み
詳細
LoadTextFileRangeメソッドでファイルパスを指定してファイルを開くと、そのファイルが開かれたままになります。
 
【手順】
1.新規フォームにSPREADとButtonを配置します
2.下記サンプルコードをコピーし、アプリケーションを実行します
3.Buttonをクリックします
4.再度Buttonをクリックします
  --例外(System.IO.IOException)が発生します

【サンプルコード】
  Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    For i As Integer = 0 To FpSpread1.ActiveSheet.ColumnCount - 1
      FpSpread1.ActiveSheet.Columns(i).Label = String.Format("列{0}", i + 1)
    Next
  End Sub

  Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    Dim strFileNm As String = "test.csv"
    Dim strRec As String = String.Empty
    Dim strComma As String = ","
    Dim iFno As Integer
    iFno = FreeFile()
    FileOpen(iFno, strFileNm, OpenMode.Output)

    For i As Integer = 0 To 10
      strRec = strRec + "aaaa"
      strRec = strRec + strComma
      strRec = strRec + "bbbb"
      strRec = strRec + strComma
      strRec = strRec + "cccc"
      strRec = strRec + strComma
      strRec = strRec + "dddd"
      strRec = strRec + strComma
      strRec = strRec + "eeee"
      strRec = strRec + strComma
      strRec = strRec + "ffff"
      strRec = strRec + strComma
      strRec = strRec + vbCrLf
      Print(iFno, strRec)
      strRec = String.Empty
    Next

    FileClose(iFno)

    Dim range As New FarPoint.Win.Spread.Model.CellRange(0, 0, FpSpread1.ActiveSheet.RowCount, FpSpread1.ActiveSheet.ColumnCount)
    FpSpread1.ActiveSheet.LoadTextFileRange("test.csv", range, FarPoint.Win.Spread.TextFileFlags.Unformatted, vbCrLf, ",", Chr(34))
  End Sub
回避方法
Service Pack 6(v7.0.2019.2008)で修正済み。
Service Pack 6(v7.0.2019.2008)より前のバージョンでは次の回避方法が有効です。
------------------------------------------

LoadTextFileRangeのオーバーロードで、ファイルパスを指定するものから、Streamを読み込む形式に変更します。

【サンプルコード】
  Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    Dim strFileNm As String = "test.csv"
    Dim strRec As String = String.Empty
    Dim strComma As String = ","
    Dim iFno As Integer
    iFno = FreeFile()
    FileOpen(iFno, strFileNm, OpenMode.Output)

    For i As Integer = 0 To 10
      strRec = strRec + "aaaa"
      strRec = strRec + strComma
      strRec = strRec + "bbbb"
      strRec = strRec + strComma
      strRec = strRec + "cccc"
      strRec = strRec + strComma
      strRec = strRec + "dddd"
      strRec = strRec + strComma
      strRec = strRec + "eeee"
      strRec = strRec + strComma
      strRec = strRec + "ffff"
      strRec = strRec + strComma
      strRec = strRec + vbCrLf
      Print(iFno, strRec)
      strRec = String.Empty
    Next

    FileClose(iFno)

    ' 回避策
    Dim range As New FarPoint.Win.Spread.Model.CellRange(0, 0, FpSpread1.ActiveSheet.RowCount, FpSpread1.ActiveSheet.ColumnCount)
    'FpSpread1.ActiveSheet.LoadTextFileRange("test.csv", range, FarPoint.Win.Spread.TextFileFlags.Unformatted, vbCrLf, ",", Chr(34))
    Using fs As New System.IO.FileStream("test.csv", IO.FileMode.Open)
      FpSpread1.ActiveSheet.LoadTextFileRange(fs, range, FarPoint.Win.Spread.TextFileFlags.Unformatted, vbCrLf, ",", Chr(34))
    End Using
  End Sub