VB.NET中使用CsvHelper Writer的ShouldQuote实现字段全用Chr(34)包裹示例求助
VB.NET CSV全字段包裹双引号实现方案
ShouldQuote 委托的VB.NET对应实现
如果你使用的是CsvHelper类库(和C#中用到的ShouldQuote为同一类库的API),VB.NET下的语法和C#逻辑完全对齐,仅Lambda写法有差异:
要实现所有字段强制用Chr(34)(双引号)包裹,直接将ShouldQuote委托的返回值固定为True即可。
完整代码示例
基于CsvHelper的实现
Imports System.Globalization Imports System.IO Imports System.Text Imports CsvHelper Imports CsvHelper.Configuration Public Sub ExportQuotedCsv(savePath As String, dataList As IEnumerable(Of 你的业务模型类)) ' 配置CSV导出规则 Dim csvConfig As New CsvConfiguration(CultureInfo.InvariantCulture) With { .ShouldQuote = Function(context) True ' 强制所有字段都添加引号包裹 } Using streamWriter As New StreamWriter(savePath, False, Encoding.UTF8) Using csvWriter As New CsvWriter(streamWriter, csvConfig) csvWriter.WriteRecords(dataList) End Using End Using End Sub
无第三方依赖的手动实现
如果你不想引入类库,可以自己实现全字段包裹逻辑,同时自动处理字段内的双引号转义:
Imports System.IO Imports System.Text Public Sub ManualExportQuotedCsv(savePath As String, rows As List(Of List(Of String))) Dim formattedLines = rows.Select(Function(row) ' 逐字段转义内部双引号,外层包裹Chr(34) Dim quotedFields = row.Select(Function(field) Dim escapedField = field.Replace("""", """""") Return $"{Chr(34)}{escapedField}{Chr(34)}" End Function) Return String.Join(",", quotedFields) End Function) File.WriteAllLines(savePath, formattedLines, Encoding.UTF8) End Sub
补充说明
- 如果需要自定义判断是否需要加引号的逻辑,修改
ShouldQuote委托内的返回条件即可,和C#中的判断逻辑完全通用 - 字段内的双引号必须转义为两个连续双引号,否则会导致CSV格式解析错误
内容的提问来源于stack exchange,提问作者qwackerz
相关产品推荐
相关产品推荐

