2

我正在使用Excelpackage.codeplex.com创建 xlsx。

当用撇号 (') 写一个字符串时,我得到一个System.Xml.XPath.XPathException异常。

如何使用该包编写带有 ' 的 xlsx 单元格?

private void ExportApostrphoe()
    {
        DataTable dt = new DataTable();
        dt.Columns.Add("ID", typeof(int));
        dt.Columns.Add("Name");

        dt.Rows.Add(1, "Ben");
        dt.Rows.Add(2, "Joe's");
        dt.Rows.Add(3, "Mike");

        FileInfo newFile = new FileInfo(@"c:\1.xlsx");
        using (ExcelPackage xlPackage = new ExcelPackage(newFile))
        {
            OfficeOpenXml.ExcelWorksheet worksheet = xlPackage.Workbook.Worksheets.Add("Sheet1");
            for (int x = 0; x < dt.Columns.Count; ++x)
            {
                DataColumn column = dt.Columns[x];
                worksheet.Cell(1, 1 + x).Value = column.Caption;

            }
            for (int x = 0; x < dt.Columns.Count; ++x)
            {
                for (int y = 0; y < dt.Rows.Count; ++y)
                {
                    worksheet.Cell(2 + y, 1 + x).DataType = "text";
                    worksheet.Cell(2 + y, 1 + x).Value = Convert.ToString(dt.Rows[y][x]);

                }

            }
            xlPackage.Save();
        }
    }
4

2 回答 2

0

尝试更新 ExcelCell.cs 中的以下代码搜索XmlNode stringNode并更新与以下代码相同的代码。创建一个dll。它对我有用。

 XmlNode stringNode = _xlWorksheet.xlPackage.Workbook.SharedStringsXml.SelectSingleNode(string.Format("//d:si[d:t='{0}']", System.Security.SecurityElement.Escape(Value)), _xlWorksheet.NameSpaceManager);
于 2013-08-01T18:17:40.597 回答
0

该库的 Codeplex 站点有一些帖子通过更改源代码和重新编译库来引用修复,但为了更快地修复,我已经能够通过用“右单引号”替换单引号来解决它。

所以“Bob's”最终变成了“Bob's”——这对我的目的来说是完全可以接受的。

我把它写成一个扩展方法:

public static string ReplaceSingleQuote(this string s) {
  if (!string.IsNullOrEmpty(s))
    return s.Replace('\u0027', '\u2032');
  else
    return s;
}

所以例如你会改变这一行:

worksheet.Cell(2 + y, 1 + x).Value = Convert.ToString(dt.Rows[y][x]);

至 :

worksheet.Cell(2 + y, 1 + x).Value = Convert.ToString(dt.Rows[y][x]).ReplaceSingleQuote();
于 2017-05-05T05:44:41.623 回答