2014-06-11 27 views
-1

我正在从sql表中写入数据并将其导出到excel文件,但问题在于数据是否仅在一个单元格中出现,并且所有数据之间都有\符号。其特殊字符我应该使用来移动到下一列C#将数据写入下一列特殊字符

SqlDataReader dr = cmd.ExecuteReader(); 
using (System.IO.StreamWriter fs1 = new System.IO.StreamWriter(Filename)) 
{ 
    // Loop through the fields and add headers 
    for (int i = 0; i < dr.FieldCount; i++) 
    { 
     string name = dr.GetName(i); 
     if (name.Contains(",")) 
      name = "\"" + name + "\""; 

     fs1.Write(name + "\\"); 

    } 
    fs1.WriteLine(); 

    // Loop through the rows and output the data 
    while (dr.Read()) 
    { 
      for (int i = 0; i < dr.FieldCount; i++) 
      { 
       string value = dr[i].ToString(); 
       if (value.Contains(",")) 
        value = "\"" + value + "\""; 

       fs1.Write(value + "\\");        
      } 
      fs1.WriteLine(); 
    } 
    fs1.Close(); 
} 

输出 A \ B \ C \ d 在一列..我想下一ABCD到每个其他列

+0

很难理解你的问题,如果它使用'\'作为分隔符,请从文件 – 3dd

+0

中发布一行数据的例子,试试'\\'?不知道有什么问题或你在问什么 – Noctis

+0

@ 3dd它的输出是在一个列中..不在旁边对方列..请检查输出 – user3226440

回答

0

例如文本文件包含以下数据:

a\b\c\d 
1\2\3\4 

您可以在Excel中读取该文件,并指定定界符:

转到Microsoft Excel(我正在使用2010版本)。 文件>打开>选择过滤器Text Files 选择该文件。

你会看到如下对话框:上

enter image description here

enter image description here

移动和选择列的类型和完成文本导入向导。

输出将按要求。

使用代码

变化反斜线分隔符\\,

fs1.Write(name + ","); 

保存与.csv扩展名的文件。

+0

谢谢,但我想它代码 – user3226440

+0

通过代码你可以创建一个'.csv'文件。 – Hassan

+0

是写入...不可能创建excel格式文件 – user3226440

0

当打开由“\”分隔的文件时,Excel不会自动分割。如果你想让它承认他们是单独的列,你要么需要一个CSV或TXT文件(逗号分隔和制表符分隔分别

无论是出口到.csv文件有:

fs1.Write(value + ","); 

或一.TXT与

fs1.Write(value + "\t"); 

不知道,如果你不在乎,但你现在写的方式,你将会对输出文件的每一行的最后一个分隔符文件。

0

这可能不是你原来的问题直接写入到Excel文件,但我相信这是你所需要的。

您是否知道可以将结果输出为Excel。

using (OleDbConnection conn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\yourExcel.xls;Extended Properties='Excel 8.0;HDR=Yes'")) 
{ 
    conn.Open(); 
    OleDbCommand cmd = new OleDbCommand("CREATE TABLE [Sheet1] ([Column1] string, 
       [Column2] string, [Column3] string, [Column4] string)", 
       conn); 
    cmd.ExecuteNonQuery(); 
    cmd = new OleDbCommand("Insert Into [Sheet1] Values ('a','b','c','d')", conn); 
    cmd.ExecuteNonQuery(); 
} 
0

不知道是什么问题。

下面的代码工作对我来说:

var input = @"a\b\c\d"; 
var list = new List<string>(); 

foreach (var piece in input.Split('\\')) 
{ 
    list.Add(piece); 
} 

// list holds 4 strings: "a", "b","c","d" 

,或者你可以做的东西少的进攻(|例如)只需更换有问题的\

var changed = input.Replace('\\','|'); 
// changed holds :"a|b|c|d" 

,然后进行迭代。