【发布时间】:2023-03-06 17:38:01
【问题描述】:
我正在使用 LinqToCSV 将列表输出到 CSV。示例代码片段如下:
class Person
{
[CsvColumn(Name = "Name", FieldIndex = 1)]
public string UserName { get; set; }
[CsvColumn(Name = "Address 1", FieldIndex = 2)]
public string Address1 { get; set; }
[CsvColumn(Name = "Telephone", FieldIndex = 3)]
public string Telephone { get; set; }
}
private void OutputToCSV(string filenamePrefix, List<Person> people)
{
CsvFileDescription outputFileDescription = new CsvFileDescription
{
SeparatorChar = ','
FirstLineHasColumnNames = true,
FileCultureName = "en-GB"
};
CsvContext cc = new CsvContext();
cc.Write(
people,
@"C:\temp\people.csv",
outputFileDescription);
}
我的问题是电话号码。如果它在对象中为 0123456789012,那么当我在 Excel 中打开 CSV 时,它被视为一个数字,并且前导零被删除。我想将 CSV 中的列预先格式化为文本。
根据Stop Excel from automatically converting certain text values to dates,我可以用等号开始字段并将值放在引号中,但是我可以设置一个属性,这意味着 LinqToCSV 将为我执行此操作吗?我真的不想使用 LinqToCSV,然后打开文件并对其进行编辑以得到我想要的。
【问题讨论】:
-
使用 EPPlus 代替 CSV 创建一个真实 Excel 文件。 CSV 没有任何格式信息,因此无法判断字段是文本还是数字
-
Panagiotis:这看起来是一个不错的选择,也是创建 Excel 文件的好方法,但不是 CSV 文件。