代码之家  ›  专栏  ›  技术社区  ›  user995219

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

  •  1
  • user995219  · 技术社区  · 7 年前

    Im使用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;David&歌利亚

    调用引发异常: “已添加具有相同密钥的项目”。 有没有一种方法可以在不更改输入csv数据的情况下避免此问题?

    2 回复  |  直到 7 年前
        1
  •  0
  •   kuujinbo    7 年前

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

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

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

    所以这个 就像一只虫子。直接取自源代码,四个参数重载:

    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 当源数据中有与号时。

        2
  •  0
  •   Owen Pauling tmatuschek    7 年前

    符号将作为 & 在XML中,您正在使用“;”作为分隔符。