2016-01-25 2 views
0

Мне нужно сохранить содержимое файла DataTable в файл . В DataTable все в порядке, данные поступают из запроса SQL. Тем не менее, если я открываю CSV в Excel я вижу это:В чем разница между запятой и запятой?

+---------------------+---------------------+------------------------------+------+------+----+ 
| DisplayName0  |  Publisher0  |    col3    | col4 | col5 | | 
+---------------------+---------------------+------------------------------+------+------+----+ 
| Dropbox    | Dropbox, Inc.  | 432       | 415 | 17 | | 
| Chef Client v12.4.3 | Chef Software  | Inc. <[email protected]>"" | 193 | 180 | 13 | 
| Cisco AnyConnect | Cisco Systems, Inc. | 836       | 824 | 12 | | 
+---------------------+---------------------+------------------------------+------+------+----+ 
'Dropbox, Inc.' -> 'Dropbox, Inc.' //this is good 
'Cisco Systems, Inc.' -> 'Cisco Systems, Inc.' //this is good too 
'"Chef Software, Inc. <[email protected]>"' -> 'Chef Software' and ' Inc. <[email protected]>""' //what happened here? 

Мой старый добрый кусок кода для экспорта DataTable в CSV является:

System.IO.StreamWriter streamWriter = new System.IO.StreamWriter(dlg3.FileName); 

string strHeader = ""; 
for (int s = 0; s < tbl.Columns.Count; s++) 
{ 
    strHeader += "\"" + tbl.Columns[s].ColumnName + "\","; 
} 
streamWriter.WriteLine(strHeader); 

for (int m = 0; m < tbl.Rows.Count; m++) 
{ 
    string strRowValue = ""; 
    for (int n = 0; n < tbl.Columns.Count; n++) 
    { 
     if (tbl.Rows[m][n].ToString() != "") 
     { 
      strRowValue += "\"" + tbl.Rows[m][n] + "\","; 
     } 
     else 
     { 
      strRowValue += tbl.Rows[m][n] + ","; 
     } 
    } 
    streamWriter.WriteLine(strRowValue); 
} 
streamWriter.Close(); 

Таким образом, вопрос, почему запятая dropbox one не «генерирует» новую ячейку, а клиент-шеф-повар делает это?

+0

Вот почему я добавить '" 'до и после каждого значения ячейки на основе этого Excel обычно ускользает все, но теперь – fishmong3r

+1

Пожалуйста, используйте правильный NuGet пакет Csv вместо –

+0

Это может... яснее, если вы включили текст, который генерирует ваша программа (крыса ее, чем ваша интерпретация того, как Excel интерпретирует этот текст). – Richard

ответ

4

Этот мир струн получил двойное повышение. Вы можете проверить, начинается ли строка allready и заканчивается цитатой, прежде чем добавлять это.

if(!tbl.Rows[m][n].StartsWith("\"") && !tbl.Rows[m][n].EndsWith("\"")) 
strRowValue += tbl.Rows[m][n] + ","; 
else 
strRowValue += "\"" + tbl.Rows[m][n] + "\","; 
+0

Ударьте меня в это :) Но даже цитата с одной стороны, а не другая, будут жевать резину, хотя это вряд ли произойдет. –

+0

Вы правы. Хотя я просто решил с помощью 'tbl.Rows [m] [n] .ToString(). Trim ('"') ', поскольку мне это не нужно в экспорте. – fishmong3r

3

У вас есть двойные кавычки после данных задачи: «»

Похоже, что вы могли бы иметь котировки в ваших данных, то вы добавляете кавычки при выводе данных, так что вы в конечном итоге с этим в файле:

""Chef Software, Inc. <[email protected]>"" 
Смежные вопросы