none
CSVのダウンロード後のEXCEL表示について RRS feed

  • 質問

  • 大変お世話になっています。

    今回はCSVでのダウンロード/アップロードについて教えて下さい。

    このフォーラムでいいのか分りませんが宜しくお願いします。

    テーブルの内容をCSV形式でダウンロードし、EXCEL表示した時に以下のような状態になってしまい苦慮しております。
    1.全角で"1"と入っている項目が半角の"1"になる
    2.前ゼロがあった場合、ゼロがなくなってしまう。
         "0001" → "1"になる

    このようになるのを防ぐ為、ダウンロード項目の先頭に’(アポストロフィ)を付与した上でダウンロードした結果、EXCEL表示上は"’1"となってしまいます。

    又、CSV内に'(アポストロフィ)が入った状態でアップロードをするとパイプエラーが出てしまいます。

    以下コード記載
      ○ダウンロード
        Protected Sub btn_DL_Click(ByVal sender As Object, ByVal e As System.EventArgs)
            Dim dv As DataView = CType(SqlDataSource5.Select(DataSourceSelectArguments.Empty), DataView)
            Dim dt As DataTable = dv.ToTable("XXXXXX")
            Dim sb As StringBuilder = New StringBuilder()
           
            ' rows
            For Each row As DataRow In dt.Rows
                Dim arr As ArrayList = New ArrayList(row.ItemArray)
                For i As Integer = 0 To arr.Count - 1
                    Dim val As String = arr(i).ToString
                    If (val.IndexOf(",") <> -1) OrElse (val.IndexOf(vbLf) <> -1) Then
                        val = """" & val.Replace("""", """""") & """"
                    End If
                    If val = "" Then
                        arr(i) = val
                    Else
                        arr(i) = """" & val & """"
                    End If
                Next
                Dim line As String = String.Join(",", CType(arr.ToArray(GetType(String)), String()))
                sb.Append(line & vbCrLf)
            Next
           
            ResponseEncoding = "shift-jis"
            Response.ContentType = "text/csv"
            Response.AddHeader("Content-Disposition", "attachment; filename=Test.csv")
            Response.Write(sb.ToString())
            Response.End()
        End Sub

     ○アップロード
        Protected Sub btn_upFile_Click(ByVal sender As Object, ByVal e As System.EventArgs)
           
            Dim postfile As HttpPostedFile = FileUpload1.PostedFile
            Dim uppath As String = Server.MapPath("~/App_data/data/" & Path.GetFileName(postfile.FileName))

            postfile.SaveAs(uppath)

            Dim parser As New TextFieldParser(uppath, System.Text.Encoding.GetEncoding("SHIFT_JIS"))
            parser.TextFieldType = FieldType.Delimited
            parser.SetDelimiters(",")

            While Not parser.EndOfData
                Dim row As String() = parser.ReadFields() ' 1行読み込み

                'エラーチェック、xxxxx存在チェック
                        .
                        .
                        .
                if エラー無し then
                    'xxxxx追加処理
                    add_xxxxx_master(row(0), row(1), row(2), row(3), row(4), row(5), row(6), row(7))
                end if

            End While

            Call parser.Close()
           
        End Sub

    この状況の打開策等ありましたらご教授下さい。WIN XP SP2;EXCEL2002です。
    宜しくお願いします。

    2007年3月27日 7:36

回答

すべての返信

  • CSVをExcelで表示した際の問題であり、要はExcelの仕様ですね。
    目的がExcelで正しく表示することであれば、以下のリンクのようにHTML形式で書き出すか、


    CSV for Excel - Problem with Leading Zeros
    http://forums.asp.net/thread/257100.aspx


    以下のようにxlsファイルをサーバー側で作成する方法があります。ただし、この方法ですと、サーバーにExcelがインストールされている必要があります。


     ASP.NETでのEXCEL出力
    https://www.microsoft.com/japan/msdn/community/gdn/ShowPost-18614.htm

    2007年3月28日 2:19
    モデレータ
  • trapemiyaさん いつもありがとうございます。

    >CSVをExcelで表示した際の問題であり、要はExcelの仕様ですね。

    そうですか。やっぱり...

    >目的がExcelで正しく表示することであれば、以下のリンクのようにHTML形式で書き出す

    仕様上CSVとなっていますので無理っぽいです。

    >以下のようにxlsファイルをサーバー側で作成する方法があります。

    やはりEXCELファイルのテンプレートを作成しなければならないのですね。

    https://www.microsoft.com/japan/msdn/community/gdn/ShowPost-18614.htmを参考に修正します。

    ありがとうございました。

    2007年3月28日 3:47
  •  

    1.全角で"1"と入っている項目が半角の"1"になる
    2.前ゼロがあった場合、ゼロがなくなってしまう。
         "0001" → "1"になる

    このようになるのを防ぐ為、ダウンロード項目の先頭に’(アポストロフィ)を付与した上でダウンロードした結果、EXCEL表示上は"’1"となってしまいます。

     

     

     

    EXCELのバージョンが2003の場合は、頭にchr(9)を付与することで解決できます。

    (2002は未検証)

    2007年12月12日 5:18