在Excel输出文件中使用逗号分隔符 - C#webform

时间:2013-11-29 11:15:21

标签: c# sql excel

我是C#的新手,所以请耐心等待。我正在尝试将数据表写入Excel文件 - 这样可以正常工作,但数据表中的列数必须是可变数,这取决于Web表单上添加的某些复选框选项,这些选项由用户。

对于标题列而言,这很容易实现硬编码,具体取决于所选的复选框选项。

选择插入数据表的数据,并使用while(sqldatareader.read)循环读取,并在该循环中 - 再次,根据表单中的用户选项,将表的元素添加到一个string类型的列表,在循环之外声明。

在此之外的for循环,然后遍历List的元素并将它们添加到数据表(行)。一切运行良好,记录数量和数据与SQL数据库返回的数据一致。

问题:当写入Excel本身工作正常时,我试图用分隔符分隔元素的值以写入Excel文件 - 在本例中为逗号。但是,将逗号附加到列表中的每个元素,将逗号输出为另一个字符串,因此生成的元素将在返回的Excel文件中列出,而逗号则表示为分隔符,并且正好移动到下一列中。数据表。

非常感谢您提前获取任何信息!

代码:

//initially declare list to hold elements of data table rows
List<string> elements = new List<string>();


    using (SqlDataReader rdr = cmd.ExecuteReader())
            {
        //if option checked, add to List
                while (rdr.Read())
                {
                    if (ckVegName.Checked)
                    {
                        elements.Add(rdr["VegName"]);
                    }
                    if (ckFruitName.Checked)
                    {
                        elements.Add(rdr["FruitName"]);
                    }
                    if (ckJuice.Checked)
                    {
                        elements.Add(rdr["JuiceName"]);
                    }
                }
            }


//for loop to read elements
for (int i = 0; i < elements.Count; i++)
{
dt.Rows.Add(elements[i]);
}

//issue: if i add comma delimeter to this.. ie
for (int i = 0; i < elements.Count; i++)
{
dt.Rows.Add(elements[i] + ',');
}

/*
row value simply appends the comma as a character to
each returned value. I sort of expected this result, but wonder
if there is another way of forcing the code to accept a delimeter
and move to next row - instead of - as here, reading the comma
as just another char to append to each element?
*/

1 个答案:

答案 0 :(得分:0)

根据您的评论,我认为您的问题是理解字符串中的逗号和用于分隔方法参数的逗号之间的区别。

假设您的评论中的工作示例有效

dt.Rows.Add(rdr["VegName"], rdr["FruitName"], rdr["JuiceName"]);

那么也许这样的事情就是你所追求的:

string vegName;
string fruitName;
string juiceName;

using (SqlDataReader rdr = cmd.ExecuteReader())
{
    while (rdr.Read())
    {
        if (ckVegName.Checked)
        {
            vegName = rdr["VegName"];
        }
        else
        {
            vegName = String.Empty;
        }

        if (ckFruitName.Checked)
        {
            fruitName = rdr["FruitName"];
        }
        else
        {
            fruitName = String.Empty;
        }

        if (ckJuice.Checked)
        {
            juiceName = rdr["JuiceName"];
        }
        else
        {
            juiceName = String.Empty;
        }

        dt.Rows.Add(vegName, fruitName, juiceName);
    }   
}