2010-11-13 4 views
4

В настоящее время я разрабатываю приложение на C#, где мне нужно написать отдельный CSV-файл с вкладками, которые он извлекает из базы данных MySQL. Поиск базы данных отлично работает.Записать вкладку с разделом csv в C#

Проблема, которая возникает у меня, это записать файл. Между каждой переменной, которую я пишу, я использую \ 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-файл, который все еще разделяется на вкладку. –

1

Следует использовать мастер импорта текста: данные/текст. Оттуда вы можете указать свой разделитель на вкладке.

+0

Я не уверен, как это сработает. Цель записываемого CSV-файла - предоставить пользователю возможность резервировать свои данные из базы данных в файл csv. Поэтому моя программа читает через базу данных по строкам, чтобы записать данные в файл csv. – Boardy

+0

Поскольку ваш CSV-файл на самом деле не «разделен запятой», вам нужно как-то сказать Excel, что ваш разделитель на самом деле является «вкладкой». Если вы это сделаете, вы увидите, что ваш файл импортируется должным образом. Вместо разграничения по вкладке попробуйте разграничить запятую. –

1

Проблема заключается в вашей кодировке.
Вы не показывать TextWriter экземпляров, но это должно выглядеть примерно так:

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

Кроме того, будьте осторожны с CSV-в-Excel, особенно с номерами банковских счетов, поскольку, если число превышает 15 цифр, Excel будет рассматривать/показывать его, как если бы это была научная нотация (экспоненциальная). – BeemerGuy

Смежные вопросы