Пример Саймона не сработал для меня, и я подозреваю, что это языковая разница. В C# вот как выглядит моя строка рабочего формата:
var linebreak = (i++ == list.Count) ? "" : "\r\n";
csv += String.Format("=\"{0}\",{1},{2},{3},=\"{4}\"{5}",
item.Value, item.Status, item.NewStatus, item.Carrier, c.Status, linebreak);
и вот как выглядит выходной файл:
="abababababab",INVALID,INVALID,USPS,="",
="9500100030492359000149",UNKNOWNSTATUS,DELIVERED,USPS,="3"
="9500100030492359000149",UNKNOWNSTATUS,DELIVERED,USPS,="3"
="9500100030492359000149",UNKNOWNSTATUS,DELIVERED,USPS,="3"
="9500100030492359000149",UNKNOWNSTATUS,DELIVERED,USPS,="3"
="9400110200793482982812",UNKNOWNSTATUS,DELIVERED,USPS,="3"
="9400110200793482982812",UNKNOWNSTATUS,DELIVERED,USPS,="3"
="9400110200793000216184",UNKNOWNSTATUS,INVALID,USPS,=""
Как видно, формат выходного файла - ="VALUE",
, а не "=""VALUE""",
, что, на мой взгляд, может быть условным для Visual Basic.
Я использую Excel 2010. Кстати, Google Sheets не будет открывать/конвертировать файл, отформатированный таким образом. Это сработает, если вы удалите знак равенства, таким образом "VALUE",
- Excel все равно откроет файл, но проигнорирует тот факт, что вы хотите, чтобы ваши столбцы были строками.