我正在使用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();
}
}
答案 0 :(得分:0)
尝试在Excel Cell.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);
答案 1 :(得分:0)
图书馆的Codeplex网站有一些帖子通过更改源代码并重新编译库来引用修复,但为了更快地解决问题,我已经能够通过用&替换单引号来解决这个问题。 34;正确的单引号&#34;。
所以&#34; Bob&#34;最终成为&#34; Bob的&#34; - 这完全可以接受我的目的。
我把它写成一个扩展方法:
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();