簡體   English   中英

無法使用C#使用ExcelPackage以撇號創建XLSX

[英]Can't create XLSX with apostrophe using ExcelPackage using C#

我正在使用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();
        }
    }

嘗試更新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);

庫的Codeplex網站上有一些帖子,它們通過更改源代碼並重新編譯庫來引用修復程序,但是對於更快的修復程序,我可以通過將單引號替換為“正確的單引號”來解決。

因此,“鮑勃的”最終以“鮑勃的”結尾-對於我的目的,這完全可以接受。

我將其編寫為擴展方法:

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();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM