Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在asp.net中导出到excel后,如何防止文本框中的新行与新行分离?_C#_Asp.net - Fatal编程技术网

C# 在asp.net中导出到excel后,如何防止文本框中的新行与新行分离?

C# 在asp.net中导出到excel后,如何防止文本框中的新行与新行分离?,c#,asp.net,C#,Asp.net,我有一个由ASP.NET开发的表单,对于Notes输入部分,我使用 下面是表单条目输出表的示例: ID Product Notes 1 Salt 29NOV Cleaning Process 30NOV Packing 1 DEC Out from Factory 2 Sugar 30 NOV Packi

我有一个由ASP.NET开发的表单,对于Notes输入部分,我使用

下面是表单条目输出表的示例:

ID       Product        Notes
1        Salt           29NOV  Cleaning Process
                        30NOV  Packing
                        1 DEC  Out from Factory
2        Sugar          30 NOV Packing
                        3 DEC  Sell
上面的数据存储在SQL Server中,当我使用C#插入导出代码时,Notes列中的ENTER(新行)中的结构消失了

当前excel的输出:

ID       Product        Notes
1        Salt           29NOV  
Cleaning Process
30NOV  
Packing
1 DEC  
Out from Factory
2        Sugar          30 NOV 
Packing
3 DEC  
Sell
C#代码

    protected void Completed_Click(object sender, EventArgs e)
    {
        Response.ClearContent();
        Response.Buffer = true;
        Response.AddHeader("content-disposition", string.Format("attachment; filename={0}", "Completed.xls"));
        Response.ContentType = "application/ms-excel";
        DataTable dt = GetDatafromDatabase_Completed();
        string str = string.Empty;
        foreach (DataColumn dtcol in dt.Columns)
        {
            Response.Write(str + dtcol.ColumnName);
            str = "\t";
        }
        Response.Write("\n");
        foreach (DataRow dr in dt.Rows)
        {
            str = "";
            for (int j = 0; j < dt.Columns.Count; j++)
            {
                Response.Write(str + Convert.ToString(dr[j]));
                str = "\t";
            }
            Response.Write("\n");
        }
        Response.End();
    }
protectedvoid已完成\u单击(对象发送方,事件参数e)
{
Response.ClearContent();
Response.Buffer=true;
AddHeader(“内容处置”,string.Format(“附件;文件名={0}”,“Completed.xls”);
Response.ContentType=“应用程序/ms excel”;
DataTable dt=GetDatafromDatabase_Completed();
string str=string.Empty;
foreach(数据列中的数据列dtcol)
{
Response.Write(str+dtcol.ColumnName);
str=“\t”;
}
响应。写入(“\n”);
foreach(数据行dr在dt.行中)
{
str=“”;
对于(int j=0;j

有人有想法吗?

因为您是通过写入
响应来直接构建Excel文档的,所以默认情况下
\n
换行符被视为新行,即它会转到下一行

构造Excel文档的最佳推荐方法是使用任何第三方库,如OpenXML或ClosedXML,它们是非常流行的免费库。但出于某种原因,如果您不喜欢使用任何库并继续直接写入
Response
对象,那么我建议您使用HTML表构造构造Excel。这样,你就有了更多的控制权。比如说,

Response.ClearContent();
            Response.Buffer = true;
            Response.AddHeader("content-disposition", string.Format("attachment; filename={0}", "Completed.xls"));
            Response.ContentType = "application/ms-excel";
            Response.Write("<table border='1'>");
            Response.Write("<tr>"); // Header row starts
            Response.Write("<td>Column 1</td> <td>Column2</td>");
            Response.Write("</tr>"); // header Row ends
            Response.Write("<tr>");  // First data row starts
            Response.Write("<td> Row1 Column1 Data 1</td>");
            Response.Write("<td> Row1 Column2 Data 1</td>");
            Response.Write("</tr>"); // First data row ends

            Response.Write("<tr>");  // Second data row starts
            Response.Write("<td> Row2 Column1 Data 1</td>");
            Response.Write("<td> Row2 Column2 Data 1");
            Response.Write("<br>"); // Makes it look like new line in same cell (Alt + Enter in excel)
            Response.Write("Row2 Column2 Data 2");
            Response.Write("<br>"); // Makes it look like new line in same cell (Alt + Enter in excel)
            Response.Write("Row2 Column2 Data 3</td>");
            Response.Write("</tr>"); // Second data row ends

            Response.Write("<tr>"); // Third data row Starts
            Response.Write("<td> Row3 Column1 Data 1</td>");
            Response.Write("<td> Row3 Column2 Data 1</td>");
            Response.Write("</tr>"); // Third data row Starts
            Response.Write("</table>");
            Response.End();

希望这能回答你的问题

您好,很遗憾,我使用c#从sql server读取数据并在gridview中显示,然后导出到excelfile@ShiJieTio对不起,我不明白你说的是什么意思?@ShiJieTio你仍然在手动构建Excel文档,如你的C#代码片段所示,对吗?在这种情况下,只要手动操作,就可以混合HTML元素来构建excel响应。这些HTML元素与数据的来源或C语言无关。@ShiJieTio。我想你误解了涉及HTML的部分。我们所要做的不是传递纯文本,而是传递包装在HTML表元素中的纯文本以形成excel。不,我不是手动构建它,而是直接从sql server检索
protected void Completed_Click(object sender, EventArgs e)
    {
        Response.ClearContent();
        Response.Buffer = true;
        Response.AddHeader("content-disposition", string.Format("attachment; filename={0}", "Completed.xls"));
        Response.ContentType = "application/ms-excel";
        DataTable dt = GetDatafromDatabase_Completed();
        string str = string.Empty;
        Response.Write("<table border='1'>");
        Response.Write("<tr>");
        foreach (DataColumn dtcol in dt.Columns)
        {
            Response.Write("<td>");
            Response.Write(str + dtcol.ColumnName);
            Response.Write("</td>");
        }
        Response.Write("</tr>");
        foreach (DataRow dr in dt.Rows)
        {
            Response.Write("<tr>");
            for (int j = 0; j < dt.Columns.Count; j++)
            {
                Response.Write("<td>");
                String lineFeedToBreakConvertedData = Convert.ToString(dr[j]).Replace("\n", "<br>");
                Response.Write(str + lineFeedToBreakConvertedData);
                Response.Write("</td>");
            }
            Response.Write("</tr>");
        }
        Response.Write("</table>");
        Response.End();
    }