O exemplo de Simon não funcionou para mim, e suspeito que seja uma diferença linguística. Em C# aqui está o aspecto da minha cadeia de formatos de trabalho:
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);
e este é o aspecto do ficheiro de saída:
="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,=""
Como se pode ver, o formato no ficheiro de saída é ="VALUE",
e não "=""VALUE""",
o que acredito que possa ser uma convenção Visual Basic.
Estou a utilizar o Excel 2010. A propósito, Google Sheets não irá abrir/converter um ficheiro formatado desta forma. Funcionará se remover o sinal de igualdade assim "VALUE",
- o Excel ainda abrirá o ficheiro mas ignorará o facto de querer que as suas colunas sejam cordas.