CSV出力

本文介绍了一个用于将DataTable数据导出为CSV文件的VB.NET函数psSetCsv。该函数接收DataTable对象和文件名作为参数,并将数据转换为CSV格式保存到指定路径。此外,还实现了自动下载功能。
RT
"
'-----------------------------------------------------------------------
    '関数名 :psSetCsv
    '
    '[機 能]CSV出力処理
    '[引  数]dtCsvData       :CSV出力データ
    '        strFile         :ファイル名前
    '[戻り値]文字列
    '[作 成]2007/02/02
    '-----------------------------------------------------------------------
    Public Sub psSetCsv(ByVal frmPage As Page, ByVal dtCsvData As DataTable, ByVal strFile As String)
        Dim objTm As System.IO.StreamWriter
        'Dim objTm As System.IO.TextWriter
        Dim strPath As StringBuilder
        Dim strLine As String = String.Empty
        Dim strP As String

        strFile = strFile & Date.Now.ToString("yyyyMMddHHmmss") & ".csv"

        'CSVパスを取得
        strPath = New StringBuilder()
        strPath.Append(frmPage.Request.ApplicationPath)
        strPath.Append("/")
        strPath.Append(System.Configuration.ConfigurationManager.AppSettings("CSVPath"))
        strPath.Append("/")
        strPath.Append(strFile)

        objTm = My.Computer.FileSystem.OpenTextFileWriter(strPath.ToString(), False, System.Text.Encoding.GetEncoding("shift_jis"))

        'ヘッダー行を生成する
        For i As Integer = 0 To dtCsvData.Columns.Count - 1
            If i = 0 Then
                strLine = """" & dtCsvData.Columns(i).ColumnName & """"
            Else
                strLine += ",""" & dtCsvData.Columns(i).ColumnName & """"
            End If
        Next
        'ヘッダーを書き込む
        objTm.WriteLine(strLine)

        For i As Integer = 0 To dtCsvData.Rows.Count - 1
            'データ行を生成する
            For j As Integer = 0 To dtCsvData.Columns.Count - 1
                If j = 0 Then
                    strLine = """" & dtCsvData.Rows(i).Item(j).ToString & """"
                Else
                    strLine += ",""" & dtCsvData.Rows(i).Item(j).ToString & """"
                End If
            Next j
            'データ行を書き込む
            objTm.WriteLine(strLine)
        Next i

        objTm.Close()

        strP = frmPage.Request.ApplicationPath
        'ダウンロード
        frmPage.ClientScript.RegisterStartupScript(frmPage.GetType(), "", _
                             "<script>window.open('" & strP & "/page/DownFile.aspx?strFile=" & strPath.ToString() & "')</script>")

    End Sub
"
参考已有引用,虽未直接提及ABAP中输出CSV文件的方法,但能从相关信息得到一些思路。可以结合ABAP里文件操作的通用逻辑来推测输出CSV文件的方式。 对于ABAP里文件操作,可借助工具类`cl_abap_conv_in_ce`,它能将二进制数据转换成有效的ABAP数据对象,这在处理CSV文件数据时可能会用到,因为CSV文件数据在ABAP里处理时可能需要进行数据类型转换 [^2]。 关于CSV文件在ABAP中的操作,可参考以下可能的步骤: 1. 准备好要输出的数据,将其整理成合适的数据结构。 2. 把数据转换为CSV格式的字符串,这可能涉及到字段分隔符、换行符等的处理。 3. 利用ABAP的文件操作功能,将CSV格式的字符串写入到文件中。 虽然没有直接的代码示例,但推测可以参考一些类似的操作逻辑。例如,若要使用相关函数模块来实现,可能会像使用`KCD_CSV_FILE_TO_INTERN_CONVERT`读取文件那样,有对应的函数来进行输出操作,不过目前引用中未提及该函数。 也可通过函数模块`RSDS_CONVERT_CSV`结合RTTI和动态编程来实现,或许能将整理好的数据通过此函数模块进行转换后输出到CSV文件中,但具体实现还需进一步探索 [^1]。 另外,类`CL_RSDA_CSV_CONVERTER`也可能在输出CSV文件的过程中发挥作用,不过同样缺乏具体的使用示例 [^1]。 ```abap * 以下为伪代码示例,仅作思路展示 * 假设已经有一个内表 itab 存储了要输出的数据 DATA: lv_filename TYPE string VALUE 'output.csv', lv_filehandle TYPE i, lv_line TYPE string. OPEN DATASET lv_filename FOR OUTPUT IN TEXT MODE ENCODING DEFAULT INTO lv_filehandle. IF sy-subrc = 0. LOOP AT itab INTO DATA(wa). * 这里需要将内表行数据转换为CSV格式的字符串 CONCATENATE wa-field1 ',' wa-field2 INTO lv_line. TRANSFER lv_line TO lv_filehandle. IF sy-subrc <> 0. WRITE:/ '写入文件时出错'. ENDIF. ENDLOOP. CLOSE DATASET lv_filehandle. ELSE. WRITE:/ '打开文件时出错'. ENDIF. ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值