EPPlus csv解析&符号(“&”)问题

时间:2018-01-22 11:18:26

标签: c# excel csv epplus

我正在使用EPPlus LoadFromText将csv解析为excel文件。

var format = new ExcelTextFormat();
        format.Delimiter = ';';
        format.Encoding = System.Text.Encoding.UTF8;
        format.Culture = System.Globalization.CultureInfo.GetCultureInfo("pt-pt");

        using (ExcelPackage package = new ExcelPackage(new FileInfo(excelFilePath)))
        {
            ExcelWorksheet worksheet = package.Workbook.Worksheets.Add(worksheetsName);

            worksheet.Cells["A1"].LoadFromText(new FileInfo(fileName), format, OfficeOpenXml.Table.TableStyles.None, false);
            package.Save();
        }

如果一行有多个带&符号的列(“&”):

001; David&歌利亚; 10; 20;大卫&巨人

该调用抛出异常: “已经添加了具有相同键的项目”。 有没有办法在不更改输入csv数据的情况下避免此问题?

2 个答案:

答案 0 :(得分:0)

&符号将在XML中以&转义,并且您正在使用';'作为分隔符。

答案 1 :(得分:0)

这两个参数调用适用于我,因此您可以将其用作解决方法:

worksheet.Cells["A1"].LoadFromText(
    new FileInfo(path), format
);

请注意,上面示例中的四个参数调用完全相同。

所以这个看起来像就像一个bug。直接从源代码中获取,四个参数重载:

public ExcelRangeBase LoadFromText(string Text, ExcelTextFormat Format, TableStyles TableStyle, bool FirstRowIsHeader)
{
    ExcelRangeBase excelRangeBase = this.LoadFromText(Text, Format);
    ExcelTable excelTable = this._worksheet.Tables.Add(excelRangeBase, "");
    excelTable.ShowHeader = FirstRowIsHeader;
    excelTable.TableStyle = TableStyle;
    return excelRangeBase;
}

当源数据中有&符号时,尝试添加ExcelTable时会爆炸。