gpt4 book ai didi

c# - 导出到 excel 数据时出错 : ' ' , 十六进制值 0x07,是使用 c# 的无效字符

转载 作者:行者123 更新时间:2023-12-04 21:16:39 25 4
gpt4 key购买 nike

当我尝试将 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 });
}

在下面提到的方法中,我遇到了异常错误..
  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 几乎可以处理任何字符,但是它不能处理范围、控制代码等。

如果你不能让他们修复他们的输出,你最好的选择是清理你收到的原始数据。您需要用您记下的字符引用格式替换非法字符。

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

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

关于c# - 导出到 excel 数据时出错 : ' ' , 十六进制值 0x07,是使用 c# 的无效字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24237008/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com