【发布时间】:2021-10-30 14:33:58
【问题描述】:
我有一个 C# 程序,它从 RESTful API 读取数据,并将其输出到 CSV 文件中。
if (response.IsSuccessful)
{
//serialize the data into the Devices[] array RootObject
RootObject ro = new RootObject();
ro = JsonConvert.DeserializeObject<RootObject>(response.Content);
//create a new DataTable with columns specifically required
DataTable dt = new DataTable("tblDevices");
dt.Columns.Add("AssetNumber");
dt.Columns.Add("DeviceFriendlyName");
dt.Columns.Add("IMEI");
//iterate through each device data and add it into a DataRow
foreach(Device d in ro.Devices)
{
DataRow dr = dt.NewRow();
dr["AssetNumber"] = d.AssetNumber;
dr["DeviceFriendlyName"] = d.DeviceFriendlyName;
dr["IMEI"] = '"'+d.Imei+'"'; //<-- this is always a "number" in CSV
还有字符串生成器代码:
//now turn the datatable into a enumerated string
StringBuilder sb = new StringBuilder();
IEnumerable<string> columnNames = dt.Columns.Cast<DataColumn>().
Select(column => column.ColumnName);
sb.AppendLine(string.Join(",", columnNames));
//read each row of the datateble, enumrate and save into the StringBuilder object
foreach (DataRow row in dt.Rows)
{
IEnumerable<string> fields = row.ItemArray.Select(field => field.ToString());
sb.AppendLine(string.Join(",", fields));
}
//finally save the string as a CSV file
string FilePath = ConfigurationManager.AppSettings["FilePath"];
string wsFileName = FilePath+"\\airwatch_"+DateTime.Now.ToString("yyyyMMddHHmm")+".csv";
File.WriteAllText(wsFileName, sb.ToString());
当我打开 CSV 时,我得到的 IMEI 号码在 Excel 中始终是一个数字。
因此,它没有将数字显示为字符串 - “353034999819999”,而是将其显示为“3.53034E+14”。是的,这是一个很大的数字。
我不希望它是指数。我想要的是 Excel 中的字符串。
我已经尝试在字段周围使用双引号,如上面的代码所示,它始终作为数字传递。我也尝试过在值的开头使用单引号,但它看起来像一个以单引号开头的字符串。
如何将此值保存在 CSV 文件中,作为字符串而不是数字?
【问题讨论】:
-
试着用这种方式把数字放在引号里
"=""353034999819999""",看这个answer
标签: c# string type-conversion