|
|
|
|
|
在前一文中,我用7個示例介紹了 C# .NET CsvHelper 讀取CSV文件的各種方法,由于篇幅有限,上文沒有介紹CsvHelper如何寫CSV文件,這將在本文重點介紹。
文章內(nèi)容目錄
注入警告
在外部程序中打開 CSV 時,可能會運行包含漏洞的字段中的公式。由于這個問題,有一個InjectionOptions
可以配置的設(shè)置。
要檢測的注入字符列表是可配置的CsvConfiguration.InjectionCharacters
,默認為=
, @
, +
, -
, \t
, \r
。注入字符可以是字段或引用字段的第一個字符。即=foo
或"=foo"
。
InjectionOptions
值為None
(默認值)、Escape
、Strip
和Exception
。
none
沒有采取注入保護。
Exception
如果檢測到注入字符,則拋出一個CsvWriterException
。
Strip
字段開頭的所有注入字符都將被刪除,===foo
將被剝離到foo
。
Escape
如果檢測到注入字符,該字段將默認用 InjectionEscapeCharacter
裝作為'
,如果該字段尚未被引用,則該字段將被引用。
=one
->"'=one"
"=one"
->"'=one"
=one"two
->"'=one""two"
默認情況下禁用此選項,如果你要存儲用戶輸入的數(shù)據(jù),但你自己沒有清理,并且你要讓可能在 Excel/Sheets/etc 中打開的人訪問它,你可以考慮啟用此功能。讀取時不會刪除InjectionEscapeCharacter
。
編寫時,你可以拋出一個可枚舉的類對象、動態(tài)對象、匿名類型對象或幾乎任何其他對象,它就會被寫入。
編寫類對象
例子
void Main()
{
var records = new List<Foo>
{
new Foo { Id = 1, Name = "one" },
};
using (var writer = new StreamWriter("path\\to\\file.csv"))
using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
{
csv.WriteRecords(records);
}
}
public class Foo
{
public int Id { get; set; }
public string Name { get; set; }
}
輸出
Id,Name
1,one
編寫動態(tài)對象
例子
void Main()
{
var records = new List<dynamic>();
dynamic record = new ExpandoObject();
record.Id = 1;
record.Name = "one";
records.Add(record);
using (var writer = new StringWriter())
using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
{
csv.WriteRecords(records);
writer.ToString().Dump();
}
}
輸出
Id,Name
1,one
編寫匿名類型對象
例子
void Main()
{
var records = new List<object>
{
new { Id = 1, Name = "one" },
};
using (var writer = new StreamWriter("path\\to\\file.csv"))
using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
{
csv.WriteRecords(records);
}
}
輸出
Id,Name
1,one
附加到現(xiàn)有的 CSV 文件
例子
void Main()
{
var records = new List<Foo>
{
new Foo { Id = 1, Name = "one" },
};
// Write to a file.
using (var writer = new StreamWriter("path\\to\\file.csv"))
using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
{
csv.WriteRecords(records);
}
records = new List<Foo>
{
new Foo { Id = 2, Name = "two" },
};
// Append to the file.
var config = new CsvConfiguration(CultureInfo.InvariantCulture)
{
// Don't write the header again.
HasHeaderRecord = false,
};
using (var stream = File.Open("path\\to\\file.csv", FileMode.Append))
using (var writer = new StreamWriter(stream))
using (var csv = new CsvWriter(writer, config))
{
csv.WriteRecords(records);
}
}
public class Foo
{
public int Id { get; set; }
public string Name { get; set; }
}
輸出
Id,Name
1,one
2,two
總結(jié)
本文重點介紹了C# .NET CsvHelper 寫入CSV文件的各種方法。如果你要讀CSV文件,請參閱上一篇文章:
相關(guān)文章