0

名前、ID、ステータスなど、多くの要因によってデータベースがフィルター処理されているページがあります。「このクエリを Excel で開く」というボタンを押すと、結果が Excel にダウンロードされるようにしたいと考えています。これはどのように可能ですか?私はこのようなものを見てきました:

"SELECT * INTO OUTFILE 'query.csv' FROM RMS WHERE 1 = '1'";

しかし、これは私にとってはうまくいきません。私はすでにデータベースのクエリ権限を持っています。完全なクエリを Excel ファイルにダウンロードするボタンを押して、そのクエリを Excel にエクスポートする機能が必要なだけです。誰かが助けてくれたら、本当に感謝します!

ページはこんな感じ

ここに画像の説明を入力

4

1 に答える 1

0

それはそれがどのように機能するかではありません。そのようにすると、ファイルはSQLサーバーに保存されます。

あなたがする必要があります

select * from your_table 

データテーブルに。次に、FileHelpers ライブラリを使用して csv ファイルを作成します。

FileHelpers.CsvEngine.DataTableToCsv(dataTable, filename);

次に、この csv ファイルを HttpContext.Response に書き込み、添付ヘッダーを設定します。

Public Class TextHandler
    Implements System.Web.IHttpHandler

    Sub ProcessRequest(ByVal context As HttpContext) Implements IHttpHandler.ProcessRequest

        'context.Response.ContentType = "text/plain"
        'context.Response.Write("Hello World!")


        Dim memoryStream As New System.IO.MemoryStream()
        Dim textWriter As System.IO.TextWriter = New System.IO.StreamWriter(memoryStream)
        textWriter.WriteLine("YOUR CSV CONTENT")
        textWriter.Flush()

        memoryStream.Position = 0
        Dim bytesInStream As Byte() = New Byte(memoryStream.Length - 1) {}
        'memoryStream.Write(bytesInStream, 0, bytesInStream.Length)
        memoryStream.Read(bytesInStream, 0, CInt(memoryStream.Length))

        memoryStream.Close()
        context.Response.Clear()
        context.Response.ContentType = "application/octet-stream"
        context.Response.AddHeader("Content-Disposition", GetContentDisposition(strFileName))
        context.Response.BinaryWrite(bytesInStream)
        context.Response.End()
    End Sub

    ReadOnly Property IsReusable() As Boolean Implements IHttpHandler.IsReusable
        Get
            Return False
        End Get
    End Property

End Class




Public Shared Function StripInvalidPathChars(str As String) As String
    If str Is Nothing Then
        Return Nothing
    End If

    Dim strReturnValue As String = ""

    Dim strInvalidPathChars As New String(System.IO.Path.GetInvalidPathChars())

    Dim bIsValid As Boolean = True
    For Each cThisChar As Char In str
        bIsValid = True

        For Each cInvalid As Char In strInvalidPathChars
            If cThisChar = cInvalid Then
                bIsValid = False
                Exit For
            End If
        Next cInvalid

        If bIsValid Then
            strReturnValue += cThisChar
        End If
    Next cThisChar

    Return strReturnValue
End Function ' StripInvalidPathChars


Public Shared Function GetContentDisposition(ByVal strFileName As String) As String
    ' http://stackoverflow.com/questions/93551/how-to-encode-the-filename-parameter-of-content-disposition-header-in-http
    Dim contentDisposition As String
    strFileName = StripInvalidPathChars(strFileName)

    If System.Web.HttpContext.Current IsNot Nothing AndAlso System.Web.HttpContext.Current.Request.Browser IsNot Nothing Then
        If (System.Web.HttpContext.Current.Request.Browser.Browser = "IE" And (System.Web.HttpContext.Current.Request.Browser.Version = "7.0" Or System.Web.HttpContext.Current.Request.Browser.Version = "8.0")) Then
            contentDisposition = "attachment; filename=" + Uri.EscapeDataString(strFileName).Replace("'", Uri.HexEscape("'"c))
        ElseIf (System.Web.HttpContext.Current.Request.Browser.Browser = "Safari") Then
            contentDisposition = "attachment; filename=" + strFileName
        Else
            contentDisposition = "attachment; filename*=UTF-8''" + Uri.EscapeDataString(strFileName)
        End If
    Else
        contentDisposition = "attachment; filename*=UTF-8''" + Uri.EscapeDataString(strFileName)
    End If

    Return contentDisposition
End Function ' GetContentDisposition

CSV はプレーン テキストであるため、MemoryStream を使用せずに、ContentType を設定し、Attach + テキストを Response に直接書き込むことができます。

于 2013-07-01T13:36:09.680 に答える