2010-11-13 43 views
4

我目前正在C#中开发一个应用程序,我需要从它从MySQL数据库中检索的数据中编写一个制表符分隔的CSV文件。数据库检索工作正常。在c#中编写制表符分隔的csv文件

我遇到的问题是写入文件。在我写的每个变量之间,我使用了\ t,我认为将一个制表符放入csv中,因此,在Excel中打开时,每个变量都将位于其自己的单元格中。

但是由于某些原因,它并没有这样做,它只是将整行写成一个长字符串。以下是我编写的代码示例:

while (reader.Read()) 
{ 
    int bankID = reader.GetInt16("ban_bankID"); 
    int userID = reader.GetInt16("ban_userID"); 
    string bankUsername = reader.GetString("ban_username"); 
    string accountName = reader.GetString("ban_accountName"); 
    string accountType = reader.GetString("ban_accountType"); 
    decimal overdraft = reader.GetDecimal("ban_overdraft"); 
    char defaultAccount = reader.GetChar("ban_defaultAccount"); 

    string line = bankID + "\t" + userID + "\t" + bankUsername + "\t" + accountName + "\t" 
       + accountType + "\t" + overdraft + "\t" + defaultAccount + "\n"; 

    tw.WriteLine(line); 

感谢您对此问题的帮助。

回答

6

格式是正确的,一个CSV预计文件被逗号分隔。当保存一个制表符分隔文件时,通常只使用一个txt扩展名(或一些人保存为.tsv)等。

如果您看一下Excel中的另存为选项,则该选项为文本(制表符分隔).txt

如果我打开由示例代码生成的输出(在数据中存根),则所有内容都将按照您的预期加载到Excel 2007中。

+1

+1我在盯着这个问题思考:“输出没什么问题,它必须是它的加载方式”,但完全错过了提到CSV文件但用tab分开的问题。 – 2010-11-13 02:07:43

1

您应该使用文本导入向导:数据/来自文本。从那里你可以指定你的分隔符到一个标签。

+0

我不知道这是如何工作。正在编写的CSV文件的目的是为了让用户能够将他们的数据从数据库备份到csv文件。因此,我的程序逐行读取数据库,将数据写入csv文件。 – Boardy 2010-11-13 01:57:31

+0

由于你的.csv文件并不是真正的“逗号” - 分离的,你必须以某种方式告诉Excel你的分隔符实际上是一个“选项卡”。如果你这样做,你会看到你的文件正确导入。不要用制表符分隔,而要用逗号分隔。 – 2010-11-18 01:15:37

1

问题是你的编码。
你不显示您的TextWriter实例,但它应该是这个样子:

TextWriter tw = new Stream(filename, false, Encoding.ASCII); 
+0

另外,要小心CSV-into-Excel的事情,特别是使用银行账号,因为如果一个数字超过15位数字,Excel将把它看作是科学记数法(指数)。 – BeemerGuy 2010-11-13 02:02:37

相关问题