2

这可能有点愚蠢,但我需要通过文本电子邮件发送 DataTable 的内容(未知列、未知内容)。基本思想是遍历行和列,并使用 .ToString() 将所有单元格内容输出到 StringBuilder 中。

格式化是一个大问题。关于如何以文本格式使其看起来“可读”的任何提示/想法?

我正在考虑用空格“填充”每个单元格,但我还需要将一些单元格拆分为多行,这使得 StringBuilder 方法有点混乱(因为第一列的第二行文本在第一行之后最后一列中的文本行等)

4

7 回答 7

1

将数据表转换为 HTML 表并发送 HTML 邮件是另一种选择吗?如果他们的客户支持它,那将在接收端变得更好。

于 2008-09-10T08:58:10.637 回答
1

这听起来像是一个非常糟糕的解决方案,但它可能会起作用:

将 DataTable 内容呈现到 DataGrid/GridView(假设为 ASP.NET)中,然后进行屏幕抓取。

我告诉过你这会很乱。

于 2008-09-10T08:59:32.053 回答
1

首先获取每列的最大大小。这样,包含邮政编码的 varchar(255) 列不会占用太多空间。

也许您可以拆分整个表格而不是拆分单行。将表格的完整右侧部分放入第二个字符串生成器中,并将其放在第一个表格的下方。

您还可以为用户提供创建逗号分隔文本的选项,以便接收者可以将表格导入电子表格。

于 2008-09-10T09:03:26.957 回答
0

循环遍历数据表并将其作为 HTML 电子邮件发送 -从数据表生成 html 表并将其作为电子邮件正文发送

于 2008-09-10T09:02:09.427 回答
0

我通过专门为此任务编写自定义格式化程序来完成这项工作。代码大约有 120 -130 行长,所以我不知道是否应该将其作为答案发布在这里(也许将 .cs 文件附加到主题的功能会是一个好主意!)。

无论如何,如果有人对此感兴趣,请告诉我,我会提供代码。

于 2008-09-10T09:59:30.007 回答
0

它是否需要很好地格式化,或者自动化系统会在另一端接收邮件消息吗?如果是后者,只需使用数据表的 .WriteXml() 方法。

于 2008-09-10T13:57:44.783 回答
-2

你可以这样做(如果是 VB):

Dim Str As String = ""
    'Create File if doesn't exist
        Dim FILE_NAME As String = "C:\temp\Custom.txt"
        If System.IO.File.Exists(FILE_NAME) = False Then
            System.IO.File.Create(FILE_NAME)
        End If

        Dim objWriter As System.IO.StreamWriter
        Try
            objWriter = New System.IO.StreamWriter(FILE_NAME)
        Catch ex As System.IO.IOException
            MsgBox("Please close the file: (C:\temp\Custom.txt) before proceeding" & vbCrLf & ex.Message.ToString, MsgBoxStyle.Exclamation)
            objWriter = Nothing
            Err = True
        End Try


'I assume you know how to write to text file.
'Say my datagridview is named "dgrid"

Dim x,y as integer

For x = 0 to dgrid.rows.count -1
    For y = 0 to dgrid.columns.count - 1
       Str = dgrid.Rows(x).Cells(y).Values & " "
   Next y
Next x

objWriter.Close()

资源

或者,您甚至可以从 DataTable生成CSV文件。

于 2008-09-10T09:04:09.967 回答