Excel 2019 从 ashx 处理程序获取数据时抛出 XML 错误
Excel 2019 throws a XML error when get data from ashx handler
我有一个连接到 ASHX 处理程序的 excel 文件。用户可以按需更新此文件。使用 Excel 2016(及更早版本)的用户在更新时没有问题,但 Excel 2019 用户在尝试更新此文件时会遇到 XML 错误。错误文本:
"error in the top-level element of the document".
ASHX代码:
public void ProcessRequest(HttpContext context)
{
var dataProvider = new ReportDataProvider();
var paramsId = GetParamsId(context);
var customReportParams = dataProvider.GetParams(paramsId);
var predifinedParams = new CrossReportPredefinedParams(customReportParams.PredefinedParams);
var formParams = (customReportParams.FormParams ?? string.Empty)
.Split(new[] { ',', ';' }, StringSplitOptions.RemoveEmptyEntries)
.Select(x =>
{
int value;
return new { Valid = int.TryParse(x, out value), Value = value };
})
.Where(x => x.Valid && x.Value > 0)
.Select(x => x.Value)
.Distinct()
.ToArray();
if (!predifinedParams.IsAnyOneDefined && formParams.Length <= 0)
{
ReturnError(context, "Не определены параметры отчёта.");
return;
}
var formId = GetFormId(context);
var data = dataProvider.GetData(formId, predifinedParams, formParams);
if (data == null)
{
ReturnError(context, "Нет данных для указанной регистрационной формы.");
return;
}
var excelCheat = !string.IsNullOrWhiteSpace(context.Request.Params["ExcelCheat"]);
if (excelCheat && (data.Rows.Count == 1))
data.Rows.Add();
context.Response.ContentType = "text/xml";
data.WriteXml(context.Response.OutputStream);
}
知道为什么在使用 2019 时会发生这种情况 Excel 以及如何解决它吗?
UPD_1: xml 文件有效。我创建它而不是在输出流中返回并使用 xml 验证器检查。
UPD_2: xml 文件:
<NewDataSet>
<Report>
<_x2116_>25962</_x2116_>
<Дата_x0020_последнего_x0020_изменения>14.06.2019 11:52</Дата_x0020_последнего_x0020_изменения>
<Клиент>*Ромбо</Клиент>
<Пользователь>Стефанкевич Юлия Владимировна</Пользователь>
<Статус>Подтверждена</Статус>
<ФИО>Стефанкевич Юлия Владимировна</ФИО>
<Название_x0020_компании>ООО "Ромбо-проекты"</Название_x0020_компании>
<Должность>ассистент менеджера по продажам</Должность>
<Мобильный_x0020_телефон_x003C_br_x003E__x0028_Пример_x003A__x0020__x002B_7_x0020__x0028_987_x0029__x0020_123_x0020_45_x0020_67_x0029_>+7(906)7105234</Мобильный_x0020_телефон_x003C_br_x003E__x0028_Пример_x003A__x0020__x002B_7_x0020__x0028_987_x0029__x0020_123_x0020_45_x0020_67_x0029_>
<Адрес_x0020_электронной_x0020_почты>Stefankevich@rombo.ru</Адрес_x0020_электронной_x0020_почты>
</Report>
</NewDataSet>
UPD_3:我手动将 <?xml version="1.0" encoding="UTF-8"?>
添加到生成 ASHX 处理程序的 xml 文件,但没有帮助。
string xmlstr;
using (var stream = new MemoryStream())
{
data.WriteXml(stream);
stream.Seek(0, SeekOrigin.Begin);
var sr = new StreamReader(stream);
xmlstr = sr.ReadToEnd();
xmlstr = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + Environment.NewLine + xmlstr;
}
var doc = new XmlDocument();
doc.LoadXml(xmlstr);
doc.Save(context.Response.Output);
嗯,真正的错误原因是... Excel trim URL 对 ashx 处理程序的请求。只有 115 个符号,仅此而已。如何以及为什么?我们(我和我的团队)没有发现。这不仅发生在 2019 excel 用户身上,有些人与 2016 excel.
用户有同样的事情
因此,如果您有同样的问题,请检查 url 从 excel 发送请求(例如使用 Fiddler)。
p.s.: excel 文件是由我们的 winforms 工具为用户报告制作的。而这个工具使用了 Microsoft.Office.Interop.Excel
库,所以我们对此有一些怀疑。
我有一个连接到 ASHX 处理程序的 excel 文件。用户可以按需更新此文件。使用 Excel 2016(及更早版本)的用户在更新时没有问题,但 Excel 2019 用户在尝试更新此文件时会遇到 XML 错误。错误文本:
"error in the top-level element of the document".
ASHX代码:
public void ProcessRequest(HttpContext context)
{
var dataProvider = new ReportDataProvider();
var paramsId = GetParamsId(context);
var customReportParams = dataProvider.GetParams(paramsId);
var predifinedParams = new CrossReportPredefinedParams(customReportParams.PredefinedParams);
var formParams = (customReportParams.FormParams ?? string.Empty)
.Split(new[] { ',', ';' }, StringSplitOptions.RemoveEmptyEntries)
.Select(x =>
{
int value;
return new { Valid = int.TryParse(x, out value), Value = value };
})
.Where(x => x.Valid && x.Value > 0)
.Select(x => x.Value)
.Distinct()
.ToArray();
if (!predifinedParams.IsAnyOneDefined && formParams.Length <= 0)
{
ReturnError(context, "Не определены параметры отчёта.");
return;
}
var formId = GetFormId(context);
var data = dataProvider.GetData(formId, predifinedParams, formParams);
if (data == null)
{
ReturnError(context, "Нет данных для указанной регистрационной формы.");
return;
}
var excelCheat = !string.IsNullOrWhiteSpace(context.Request.Params["ExcelCheat"]);
if (excelCheat && (data.Rows.Count == 1))
data.Rows.Add();
context.Response.ContentType = "text/xml";
data.WriteXml(context.Response.OutputStream);
}
知道为什么在使用 2019 时会发生这种情况 Excel 以及如何解决它吗?
UPD_1: xml 文件有效。我创建它而不是在输出流中返回并使用 xml 验证器检查。
UPD_2: xml 文件:
<NewDataSet>
<Report>
<_x2116_>25962</_x2116_>
<Дата_x0020_последнего_x0020_изменения>14.06.2019 11:52</Дата_x0020_последнего_x0020_изменения>
<Клиент>*Ромбо</Клиент>
<Пользователь>Стефанкевич Юлия Владимировна</Пользователь>
<Статус>Подтверждена</Статус>
<ФИО>Стефанкевич Юлия Владимировна</ФИО>
<Название_x0020_компании>ООО "Ромбо-проекты"</Название_x0020_компании>
<Должность>ассистент менеджера по продажам</Должность>
<Мобильный_x0020_телефон_x003C_br_x003E__x0028_Пример_x003A__x0020__x002B_7_x0020__x0028_987_x0029__x0020_123_x0020_45_x0020_67_x0029_>+7(906)7105234</Мобильный_x0020_телефон_x003C_br_x003E__x0028_Пример_x003A__x0020__x002B_7_x0020__x0028_987_x0029__x0020_123_x0020_45_x0020_67_x0029_>
<Адрес_x0020_электронной_x0020_почты>Stefankevich@rombo.ru</Адрес_x0020_электронной_x0020_почты>
</Report>
</NewDataSet>
UPD_3:我手动将 <?xml version="1.0" encoding="UTF-8"?>
添加到生成 ASHX 处理程序的 xml 文件,但没有帮助。
string xmlstr;
using (var stream = new MemoryStream())
{
data.WriteXml(stream);
stream.Seek(0, SeekOrigin.Begin);
var sr = new StreamReader(stream);
xmlstr = sr.ReadToEnd();
xmlstr = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + Environment.NewLine + xmlstr;
}
var doc = new XmlDocument();
doc.LoadXml(xmlstr);
doc.Save(context.Response.Output);
嗯,真正的错误原因是... Excel trim URL 对 ashx 处理程序的请求。只有 115 个符号,仅此而已。如何以及为什么?我们(我和我的团队)没有发现。这不仅发生在 2019 excel 用户身上,有些人与 2016 excel.
用户有同样的事情因此,如果您有同样的问题,请检查 url 从 excel 发送请求(例如使用 Fiddler)。
p.s.: excel 文件是由我们的 winforms 工具为用户报告制作的。而这个工具使用了 Microsoft.Office.Interop.Excel
库,所以我们对此有一些怀疑。