导出为ex​​cel数据时出错:“',hex值0x07,是一个无效的字符,使用c#

当我尝试导出kendo ui网格中的数据以达到excel时,我遇到了一个奇怪的问题。

错误:

An exception of type 'System.ArgumentException' occurred in System.Xml.dll but was not handled in user code Additional information: ' ', hexadecimal value 0x07, is an invalid character. 

和下面的方法我用于出口到Excel

  private static void WriteDataTableToExcelWorksheet(DataTable dt, WorksheetPart worksheetPart) { OpenXmlWriter writer = OpenXmlWriter.Create(worksheetPart); writer.WriteStartElement(new Worksheet()); writer.WriteStartElement(new SheetData()); string cellValue = ""; int numberOfColumns = dt.Columns.Count; bool[] IsNumericColumn = new bool[numberOfColumns]; string[] excelColumnNames = new string[numberOfColumns]; for (int n = 0; n < numberOfColumns; n++) excelColumnNames[n] = GetExcelColumnName(n); uint rowIndex = 1; writer.WriteStartElement(new Row { RowIndex = rowIndex }); for (int colInx = 0; colInx < numberOfColumns; colInx++) { DataColumn col = dt.Columns[colInx]; AppendTextCell(excelColumnNames[colInx] + "1", col.ColumnName, ref writer); IsNumericColumn[colInx] = (col.DataType.FullName == "System.Decimal") || (col.DataType.FullName == "System.Int32") || (col.DataType.FullName == "System.Double") || (col.DataType.FullName == "System.Single"); } writer.WriteEndElement(); double cellNumericValue = 0; foreach (DataRow dr in dt.Rows) { ++rowIndex; writer.WriteStartElement(new Row { RowIndex = rowIndex }); for (int colInx = 0; colInx < numberOfColumns; colInx++) { cellValue = dr.ItemArray[colInx].ToString(); if (IsNumericColumn[colInx]) { cellNumericValue = 0; if (double.TryParse(cellValue, out cellNumericValue)) { cellValue = cellNumericValue.ToString(); AppendNumericCell(excelColumnNames[colInx] + rowIndex.ToString(), cellValue, ref writer); } } else { AppendTextCell(excelColumnNames[colInx] + rowIndex.ToString(), cellValue, ref writer); } } writer.WriteEndElement(); } writer.WriteEndElement(); writer.WriteEndElement(); writer.Close(); } private static void AppendTextCell(string cellReference, string cellStringValue, ref OpenXmlWriter writer) { writer.WriteElement(new Cell { CellValue = new CellValue(cellStringValue), CellReference = cellReference, DataType = CellValues.String }); } 

在下面提到的方法我得到以上的exception错误..

  private static void AppendTextCell(string cellReference, string cellStringValue, ref OpenXmlWriter writer) { writer.WriteElement(new Cell { CellValue = new CellValue(cellStringValue), CellReference = cellReference, DataType = CellValues.String }); } 

任何人请帮助如何克服这个错误,同时出口到Excel数据….

提前谢谢了..

XML可以处理任何字符,但有范围,控制代码等等,它不会。

你最好的办法是,如果你不能让他们修正他们的输出结果,那就是要清理你所接收到的原始数据。 您需要用您记下的字符参考格式replace非法字符。

有很多符号不能在xml代码中。 为了replace它们,我们可以使用Reqex.Replace

 static string ReplaceHexadecimalSymbols(string txt) { string r = "[\x00-\x08\x0B\x0C\x0E-\x1F\x26]"; return Regex.Replace(txt, r,"",RegexOptions.Compiled); } 

x26是符号“&”字符 – 这可以使用“&”进行编码,以便它出现在您的Excel表格中。